ホームページ >バックエンド開発 >PHPチュートリアル >PHP の脆弱性 HTTP 応答分割の分析と解決策_PHP チュートリアル

PHP の脆弱性 HTTP 応答分割の分析と解決策_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:11:251276ブラウズ

実際、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 応答の分割は、ターゲット ユーザーが 1 つのリクエストを使用して 2 つの応答を生成できるように、攻撃者が慎重に設計した電子メールまたはリンクの使用によるものです。前者の応答はサーバーの応答であり、後者は攻撃者によって設計された応答です。この攻撃は、WEB プログラムが 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%0aAccount%20< ;br%20/>パスワード%20

読み取り可能な文字列に変換:

コンテンツタイプ: text/html

HTTP/1.1 200 OK

コンテンツタイプ: text/html

コンテンツの長さ: 158

アカウント
パスワード

1 つの HTTP リクエストで 2 つの応答が生成されました

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/629606.html技術記事実際、http レスポンスの脆弱性は CRLF インジェクション攻撃の脆弱性であり、基本的にはヘッダー内の CRLF を置き換えることで解決できます。もちろん、Apache でも使用できます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。