ホームページ >バックエンド開発 >PHPチュートリアル >PHP の脆弱性 HTTP 応答分割の分析と解決策_PHP チュートリアル
実際、http 応答の脆弱性は CRLF インジェクション攻撃の脆弱性であり、解決策は基本的にはヘッダーの CRLF を置き換えることで解決できます。もちろん、Apache の httpd.conf のオプションを使用することもできます。 = Prod、ServerSignature = Off、php.ini では、オプション Expose_php = Off を使用できます。
まず、360 が提供する脆弱性ページのアドレス「/?r=XXXXX」を分析すると、? の後に r=XXXX が続くことが問題となります。PHP では、この r= が問題となります。 request (リンク内に直接表示されるリクエスト) は通常、侵入を防ぐためにテキストをフィルタリングする必要がありますが、この操作は完了していません。次に、入り口を見つけてコードを見て、$_GET['r を検索します。サイト全体のすべてのファイル。'] の場合、サイト上のどのファイルに問題があるかがわかっている場合は、このファイルを直接検索できます。リンク内の ?r= 内の r は変更できます。あなた自身の要件に従って。
問題はすぐに見つかりました:
$redirect = $_GET['r'];
画像のコードは $_GET['r'] を $redirect 変数に直接与えます。 簡単に言うと、 $redirect は $_GET['r'] になります。 もちろん、変数は次のように記述されます。名前は変更される可能性があります。問題の原因が見つかったので、この変数の内容をフィルタリングするだけです。
PHP
$redirect = trim(str_replace("r","",str_replace("rn","",strip_tags(str_replace("'",""),str_replace("n", "", str_replace(" "," ",str_replace("t","",trim($redirect))))),""))));
上記のコードをすべて $redirect = $_GET['r'];に直接コピーします。
それでは、ウェブサイトをもう一度確認してください。必要に応じて変数名を変更できることを皆さんも理解していただければ幸いです。
HTTP レスポンス分割攻撃
HTTP リクエスト応答分割の影響を受ける可能性のある関数には次のようなものがあります:
setcookie();
HTTP 応答の分割は通常、次のように発生します。
Location ヘッダー: リダイレクトされた URL アドレスにユーザーのデータを書き込みます
Set-Cookie ヘッダー: ユーザーデータを Cookie に書き込みます
例:
header("場所: " . $_GET['page']);
?>
リクエスト
GET /location.php?page=http://www.00aq.com HTTP/1.1?
ホスト: ローカルホスト?
?
戻る
HTTP/1.1 302 個見つかりました
日付: 2010 年 1 月 13 日水 03:44:24 GMT
サーバー: Apache/2.2.8 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
場所: http://www.00aq.com
コンテンツの長さ: 0
キープアライブ: タイムアウト=5、最大=100
接続: キープアライブ
コンテンツタイプ: text/html
以下のリンクにアクセスすると、直接ログイン画面が表示されます
http://localhost/location.php?page=%0d%0aContent-Type:%20text/html%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-長さ:%20158%0d%0a%0d%0a
読み取り可能な文字列に変換:
コンテンツタイプ: text/html
HTTP/1.1 200 OK
コンテンツタイプ: text/html
コンテンツの長さ: 158
1 つの HTTP リクエストで 2 つの応答が生成されました