ソース:
訳:
このアプリケーションは非常に安全で、1 つのリクエストを 1 回だけ送信できるメカニズムがあり、この検証は URL クエリ パラメーター「OWASP_CSRFTOKEN」によって行われたと思います。
これは本質的に、リクエストをリピーターに受け取って操作することはできず、リクエストをリアルタイムでインターセプトし、[インターセプト] タブにペイロードを挿入する必要があることを意味します。
上記のトークンの値は、コメントのコンテキストで応答に反映されました。
反映された値を取得したので、トークンを追加してペイロードを注入してみました。
これにより、次のような効果が得られます。
.jsp?OWASP_CSRFTOKEN=2F8A-XXXX-XXXX-XXXX/*alert(1)*/
これによりアプリケーションからログアウトされました。
何度か試行錯誤した結果、トークンの値を妨害したり変更したりすると、間違いなくアプリケーションから追い出されることがわかりました。
そこで、アンパサンド (&) を使用して値を注入するというアイデアを思いつきました。 以下のような効果があります。
.jsp?OWASP_CSRFTOKEN=2F8A-XXXX-XXXX-XXXX&/*alert(1)*/
今回は、注入されたペイロードの反映を取得しました。
ログアウトされていませんでしたが、ペイロードは実行されていませんでした。
ブラックリストが影響しているのではないかと思い、さまざまなペイロードを試しましたが、うまくいきませんでした。
次に、運試しとしてペイロードを先頭に追加し始めました。
苦し紛れに、「xss」という名前の新しいパラメータを挿入し、ペイロードの値を「OWASP_CSRFTOKEN」の前に付加して与えました。
.jsp?xss=*/prompt("XSS")/*&OWASP_CSRFTOKEN=2F8A-XXXX-XXXX-XXXX
そしてそれはうまくいきました。 すぐにはそうではありませんでしたが、そうなりました。
alert(1) は明らかに機能していませんでした。
ただ、実際に別のペイロードを使用する前は、prompt(「XSS」) が機能していました。 ポップアップ ペイロードはこのアプリケーションでは動作しないのではないかという印象を受けたため、他の方法を調べた結果、次のような優れたペイロードがあることを知りました。
console.log(document.domain)
上記を使用すると、ポップアップは表示されません。
代わりに、Chromeの開発者ツールでコンソールを開く必要があります。
アプリケーションのドメインがコンソールに表示されている場合は、上記のペイロードが機能したことを意味します。
以上が、関連する思考プロセスの簡単な説明でした。 ここで手順を簡単に説明しましょう。
- これが本来のリクエストです。
2. 以下のマークは、ペイロードが注入された注入ポイントです。
Payload: xss=*/prompt("XSS")/*&
3. コメントのコンテキストでペイロードが反映されました。
したがって、コメント終了記号 (*/) とコメント開始記号 (/*) を使用する必要がありました。
これにより、プロンプト (「XSS」) のコメントが解除され、実行できる状態になります。
ほなほな。