首页 > php框架 > PHP页面跳转与跨站提交伪造Referer地址来源

PHP页面跳转与跨站提交伪造Referer地址来源

本文章来给大家介绍二种利用php来实现页面跳转与跨站提交伪造Referer地址来源具体实现,方法主要用到了fsockopen,curl两个函数,有需要了解的朋友可进入参考。

一、尝试过的URL跳转方法

echo '<meta http-equiv="refresh" content="0; URL='.$url.'">';
echo '<scrīpt language="Javascrīpt">window.location.href="'.$url.'";</scrīpt>';
echo '<script language="Javascrīpt">window.location.replace="'.$url.'";</ script>';

以上三种方法均无法传递REFERER地址。

二、使用PHP Socket函数伪造REFER

下面是PHP伪造REFERER代码部分,经过测试可以实现REFERER地址传递,其中$url是输入地址。

<?php
$uinfo = parse_url($url); //解析URL地址,比如http://phprm.com/archives/1.html
if ($uinfo['path']) //
$data = $uinfo['path']; //这里得到/archives/1.html
else $data = '/'; //默认根
if (!$fsp = @fsockopen($uinfo['host'], (($uinfo['port']) ? $uinfo['port'] : "80") , $errno, $errstr, 12)) {
    echo "对不起对方网站暂时无法打开,请您稍后访问:" . $uinfo['host'];
    exit;
} else {
    fputs($fsp, "GET “.$data .” HTTP/1.0\r\n"); //如果是跨站POST提交,可使用POST方法
    fputs($fsp, "Host: " . $uinfo['host'] . "\r\n");
    fputs($fsp, "Referer: phprm.com\r\n"); //伪造REFERER地址
    fputs($fsp, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n");
    $res = '';
    while (!feof($fsp)) {
        $res.= fgets($fsp, 128);
        if (strstr($res, "200 OK")) {
            header("Location:$url");
            exit;
        }
    }
}
//如果是301或302状态码可以继续处理
//返回地址大概形式:HTTP/1.1 301 Moved PermanentlynContent-Length: 164nContent-Type: text/htmlnLocation: http://phprm.com/
$arr = explode("n", $res);
$arr = explode(": ", $arr[3]); //Location后面是真实重定向地址
header("location:" . $arr[0]); //跳转目标地址
exit;
?>

利用另一种方法 curl)伪造HTTP_REFERER

<?php
//PHP(前提是装了curl):
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.phprm.com/");
curl_setopt($ch, CURLOPT_REFERER, "http://www.phprm.com/");
curl_exec($ch);
curl_close($ch);
//PHP(不装curl用sock)
$server = 'blog.qita.in';
$host = 'blog.qita.in';
$target = '/xxx.asp';
$referer = 'http://www.baidu.com/'; // Referer
$port = 80;
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />n";
} else {
    $out = "GET $target HTTP/1.1\r\n";
    $out.= "Host: $host\r\n";
    $out.= "Cookie: ASPSESSIONIDSQTBQSDA=DFCAPKLBBFICDAFMHNKIGKEG\r\n";
    $out.= "Referer: $referer\r\n";
    $out.= "Connection: Closern\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>


本文地址:http://www.phprm.com/frame/php1005373.html

转载随意,但请附上文章地址:-)

标签:none

发表留言