Accidental exposure of private GraphQL fields を解いてみる

WebSecurityAcademyのGraphQLのラボを。

 

問題(機械翻訳):

このラボのユーザー管理機能は、GraphQL エンドポイントを利用して。
このラボには、API にユーザー資格情報フィールドを公開させることができるアクセス制御の脆弱性が含まれて。

ラボを解決するには、管理者としてサインインし、ユーザー名 carlos を削除して。

 

 

さっそくやってみる。

 

 

ログインのクレデンシャルは指定されていないので、いつものようにページを探索。

 

BurpSuiteのhistoryをみてみると、GraphQLのエンドポイントと思しきものが。

 

 

いつものようにRepeaterに送り、Send。
このURLをコピーして、InQL Scannerに貼り付けてLoadして。

 

 

Schemaが色々と出てくるので、そのなかから「getUser.query」が使えそうで。

 

query {
    getUser(id:1334) {
        password
        id
        username
    }
}

 

上記のクエリーをエンドポイントのリクエストのInQLに貼り付けると。

 

 

200 OKが返ってくるけど、errorsが表示され。

エラーメッセージを見ると、getBlogSummaries が邪魔してそうなので、リクエストのボディからこれを削除してみて。

 

 

再度InQLに戻り、idを0から試してみるとnullが返り。

 

 

インクリメントして次を試してみる、id:1。

 

 

usernameとpassword が表示され。

このクレデンシャルでログインを試してみて。

 

ログインができ、Admin panelも表示され。

 



carlosをdeleteすると、

 

解決でけて。

 

 

ほなほな。