快捷搜索:   服务器  PHP  安全  IIS  linux 安全

使用fsockopen伪造来路REFERER

用 fsockopen 也能伪造来路进行跳转访问,这个主要用来进行一些突破网站对来路限制的情况,或者刷投票之类的,接下来我们看看如何实现。

<?php
$host = "127.0.0.1"; //你要访问的域名
$ip = '127.0.0.1';
$target = "/test2.php"; //你要访问的页面地址
$referer = "http://www.bnxb.com/"; //伪造来路页面
//$fp = fsockopen($host, 80, $errno, $errstr, 30);
$fp = fsockopen($ip, 80, $errno, $errstr, 5);
if(!$fp)
{
    echo "$errstr($errno)<br />\n";
}
else
{
$end = "\r\n";
    $out = "GET $target HTTP/1.1$end";
$out .= "Host: $ip$end";
$out .= "Referer: $referer$end";
$out .= "Connection: Close$end";
$out .= "$end";
    fwrite($fp, $out);
    while(!feof($fp))
    {
        echo fgets($fp, 1024);
    }
    fclose($fp);
}
?>



test2.php 的代码为:


<?php
$data = $_SERVER;
echo '<pre>';
print_r( $data );
echo '</pre>';
?>



程序输出:

HTTP/1.1 200 OK
Date: Thu, 13 Feb 2014 08:19:10 GMT
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By: PHP/5.3.8
Content-Length: 1393
Connection: close
Content-Type: text/html
Array
(
……
    [HTTP_HOST] => 127.0.0.1
    [HTTP_REFERER] => http://www.bnxb.com/
    [HTTP_CONNECTION] => Close
……
    [SERVER_SIGNATURE] => 
Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 Server at 127.0.0.1 Port 80
    [SERVER_SOFTWARE] => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
    [SERVER_NAME] => 127.0.0.1
    [SERVER_ADDR] => 127.0.0.1
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 127.0.0.1
    [REMOTE_PORT] => 50404
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /test2.php
    [SCRIPT_NAME] => /test2.php
    [PHP_SELF] => /test2.php
    [REQUEST_TIME] => 1392279550
)


可以看到 HTTP_REFERER 的值为 http://www.bnxb.com/,即来路已经伪造成功。


关于伪造IP


如果需要伪造IP,那么加上这么两行代码即可:


$out .= "Client-IP: 121.199.24.143\r\n"; 
$out .= "X-Forwarded-For: 121.199.24.143\r\n"; //主要是这里来构造IP



整体程序为:

<?php
$host = "127.0.0.1"; //你要访问的域名
$ip = '127.0.0.1';
$target = "/test2.php"; //你要访问的页面地址
$referer = "http://www.bnxb.com/"; //伪造来路页面
//$fp = fsockopen($host, 80, $errno, $errstr, 30);
$fp = fsockopen($ip, 80, $errno, $errstr, 5);
if(!$fp)
{
    echo "$errstr($errno)<br>\n";
}
else
{
$end = "\r\n";
    $out = "GET $target HTTP/1.1$end";
$out .= "Host: $ip$end";
$out .= "Referer: $referer$end";
$out .= "Client-IP: 121.199.24.143\r\n"; 
$out .= "X-Forwarded-For: 121.199.24.143\r\n"; //主要是这里来构造IP 
$out .= "Connection: Close$end";
$out .= "$end";
    fwrite($fp, $out);
    while(!feof($fp))
    {
        echo fgets($fp, 1024);
    }
    fclose($fp);
}
?>



输出里的数组也会多这么两行:


Array
(
    [HTTP_REFERER] => http://www.bnxb.com/
    [HTTP_CLIENT_IP] => 121.199.24.143
    [HTTP_X_FORWARDED_FOR] => 121.199.24.143
)



顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论