ペネトレーションテストについて学び、「Bodgeit Store」という脆弱なアプリケーションをダウンロードしました。クロスサイトスクリプティング攻撃を実行する以外のほとんどすべての課題を終えました。アプリのソースコードを調べたところ、次のJavaコードが見つかりました:
_if (request.getMethod().equals("POST") && comments != null)
{
anticsrf = request.getParameter("anticsrf");
if (anticsrf != null && anticsrf.equals(request.getSession().getAttribute("anticsrf")))
{
// Strip script tags, because that will make everything alright...
comments = comments.replace("<script>", "");
comments = comments.replace("</script>", "");
// And double quotes, just to make sure
comments = comments.replace("\"", "");
.................
}
}
_
挑戦は言う:
「ポップアップを表示:
<script>alert("XSS")</script>
」
しかし、ソースを見ると、_<script>
_および_</script>
_タグがnull文字に置き換えられていることがわかります。また、コードはリクエストがPOSTリクエストであるかどうかも確認するため、GETリクエストを作成できません。
外部の.jsファイルを使用するなど、他の方法を使用してアラートボックスを実行することに成功しましたが、この課題をどのように完了することができるのかを本当に知りたいです。これを解決する方法についていくつかの提案をお願いします。
Gumbo's Nice and simple answer の他に、最後のreplace()
呼び出しを使用して、以前の呼び出しをバイパスすることもできます。たとえば、次のようになります。
<scr"ipt>alert('XSS')</scr"ipt>
実際、これはチャレンジの作成者が期待していた解決策かもしれないと思います:意図的にこれを許可するために二重引用符を除いてに多くの意味はありません特定の攻撃、そして「念のために」のコメントもそれに注意を喚起します。
もちろん、コードが二重引用符を削除しなかった場合でも、次のように実行できます。
<scr</script>ipt>alert('XSS')</scr</script>ipt>
あなたの質問をもう一度見直して、私はついにあなたが達成することを試みている挑戦が何であるかを見ます。アンチXSSコードが、if
パラメーターの存在をチェックするanticsrf
ステートメントによってどのように包まれているか、およびユーザーの中に存在するanticsrf
オブジェクトと等しいかどうかに注意してください。セッションオブジェクト。これら2つの条件のいずれかを解除することにより、上記のコード(<script>alert("XSS")</script>
)を効果的に機能させることができます。つまり、リクエストからanticsrf
パラメータを除外するか、リクエストのanticsrf
パラメータを任意の値に変更すると、comment
パラメータはそのまま反映されます。コードはXSSコードを取り除くブロックはスキップされます。
<script>
タグコンテナは、XSSを実行できる唯一の場所ではありません。他のHTMLタグとその機能を確認してください。たとえば、以下は<img>
タグ:
<img src=javascript:alert('hi'); />
この目的のために利用できるHTMLのタグ全体に関連付けられたonload
、onmouseover
などのイベントハンドラーもあります。私の最善の提案は、さらにアイデアを得るために HTML仕様 を参照することです。あなたがウェブペンテスターになるつもりなら、あなたは確かにその知識で武装したいと思うでしょう。
自動送信フォーム:
<html>
<body onload="document.forms[0].submit()">
<form method="POST" action="...">
...
</form>
</body>
</html>
XSS、スクリプトタグなし:
<img src="missing" onerror="..." />
私はここで他の独創的な投稿のいくつかが答えのために好きです。
すぐに頭に浮かんだシンプルで愚かなものがいくつかあります:
<script >alert('XSS')</script >
<SCRIPT>alert('XSS')</SCRIPT>