web-dev-qa-db-ja.com

これらの条件でXSSを実行するにはどうすればよいですか?

ペネトレーションテストについて学び、「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ファイルを使用するなど、他の方法を使用してアラートボックスを実行することに成功しましたが、この課題をどのように完了することができるのかを本当に知りたいです。これを解決する方法についていくつかの提案をお願いします。

6
zoozo

Gumbo's Nice and simple answer の他に、最後のreplace()呼び出しを使用して、以前の呼び出しをバイパスすることもできます。たとえば、次のようになります。

<scr"ipt>alert('XSS')</scr"ipt>

実際、これはチャレンジの作成者が期待していた解決策かもしれないと思います:意図的にこれを許可するために二重引用符を除いてに多くの意味はありません特定の攻撃、そして「念のために」のコメントもそれに注意を喚起します。

もちろん、コードが二重引用符を削除しなかった場合でも、次のように実行できます。

<scr</script>ipt>alert('XSS')</scr</script>ipt>
12
Ilmari Karonen

あなたの質問をもう一度見直して、私はついにあなたが達成することを試みている挑戦が何であるかを見ます。アンチXSSコードが、ifパラメーターの存在をチェックするanticsrfステートメントによってどのように包まれているか、およびユーザーの中に存在するanticsrfオブジェクトと等しいかどうかに注意してください。セッションオブジェクト。これら2つの条件のいずれかを解除することにより、上記のコード(<script>alert("XSS")</script>)を効果的に機能させることができます。つまり、リクエストからanticsrfパラメータを除外するか、リクエストのanticsrfパラメータを任意の値に変更すると、commentパラメータはそのまま反映されます。コードはXSSコードを取り除くブロックはスキップされます。

考慮すべきその他の事項:

<script>タグコンテナは、XSSを実行できる唯一の場所ではありません。他のHTMLタグとその機能を確認してください。たとえば、以下は<img>タグ:

<img src=javascript:alert('hi'); />

この目的のために利用できるHTMLのタグ全体に関連付けられたonloadonmouseoverなどのイベントハンドラーもあります。私の最善の提案は、さらにアイデアを得るために HTML仕様 を参照することです。あなたがウェブペンテスターに​​なるつもりなら、あなたは確かにその知識で武装したいと思うでしょう。

3
Nadeem Douba

自動送信フォーム:

<html>
    <body onload="document.forms[0].submit()">
        <form method="POST" action="...">
        ...
        </form>
    </body>
</html>

XSS、スクリプトタグなし:

<img src="missing" onerror="..." />
1
Pierre Ernst

私はここで他の独創的な投稿のいくつかが答えのために好きです。

すぐに頭に浮かんだシンプルで愚かなものがいくつかあります:

<script >alert('XSS')</script >
<SCRIPT>alert('XSS')</SCRIPT>
1
Jeff Ferland