この記事では、PHP を使用したページ ジャンプと偽のリファラー アドレス ソースのクロスサイト送信の 2 つの具体的な実装を紹介します。この方法では主に fsockopen とcurl の 2 つの関数を使用します。詳細を知りたい人は参照してください。
1. URLジャンプ方法を試してみました
コードは以下の通りです | コードをコピー |
echo ''; echo '<スクリプト言語="Javascrīpt">window.location.href="'.$url.'";'; echo '<スクリプト言語= "Javascrīpt">window.location.replace="'.$url.'"; script>'; |
上記の 3 つのメソッドはいずれも REFERER アドレスを渡すことができません。
2. PHP ソケット関数を使用して REFER を偽造します
以下は、PHP で偽造された REFERER コード部分です。$url は入力アドレスです。
コードは次のとおりです | コードをコピーします |
$uinfo = parse_url($url);// http://php100.com/archives/1.html などの URL アドレスを解析しますif($uinfo ['path']) // $data = $uinfo['path'];// /archives/1.html はここから入手 else $data = '/';//デフォルトroot if (!$fsp = @fsockopen($uinfo['host'], (($uinfo['port']) ? $uinfo['port'] : "80"), $errno, $errstr, 12)){ echo "申し訳ありませんが、相手の Web サイトを一時的に開くことができません。後でアクセスしてください:".$uinfo['host']; exit; }else{ fputs($fsp, "GET " .$data ." HTTP /1.0rn");//クロスサイト POST 送信の場合は、POST メソッド fputs($fsp, "Host: ".$uinfo['host']. "rn"); fputs($fsp , "Referer: php100.comrn");//偽の REFERER アドレス fputs($fsp, "ユーザーエージェント: Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1) )rnrn"); $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://php100.com/ $arr=explode("n",$res); $arr=explode(": ",$arr[3]);// Location の後に実際のリダイレクト アドレスが続きます header("location:".$arr[0]);// ターゲット アドレスにジャンプします exit ; |
別のメソッドcurl)を使用してHTTP_REFERERを偽装します
コードは次のとおりです | コードをコピーします |
//PHP (curlがインストールされている場合): //PHP (curl なしで sock を使用) |