WebページのURLが与えられた。
このWebページには、メールアドレスを送るフォームがあった。
a@example.com
)を送ると、
graphql
というファイルにリクエストを送っているのが見えた。
そこで、「graphql writeup」でググると、以下のページが見つかった。
An URL of a web page was given.
the web page had a form to send a e-mail address.
I sent some string (a@example.com
) with the Network tab on the Developer Tool in graphql
.
Then, I googled "graphql writeup" and found this page:
SECCON Beginners 2020 Writeup (profiler, Somen) - Ryoto's Blog
このページを参考に、以下のクエリを送ることで、使えるクエリの情報を得ることができた。
(「クエリを送る」とは、開発者ツールでgraphql
へのリクエストの要求ボディをクエリに書き換え、
「編集して再送信」することである)
Referring this page, I obtained information about available queries by sending the following query.
("send query" here means to replace the request body of the request of the file graphql
to the query and to "Edit and Resend" on the Developer Tool)
以下のレスポンスが得られた。 (見やすいように空白や改行を補っている)
The server sent this response. (spaces and newlines are added for readability)
"name": "flag"
という部分があるので、以下のクエリを送った。
Seeing the part "name": "flag"
, I sent this query:
すると、以下のメッセージが返ってきた。
The server responded with this message:
Field "flag" argument "token" of type "String!" is required, but it was not provided.
そこで、token
を追加した以下のクエリを送った。
Seeing this, I sent this query with token
added:
すると、「Invalid token!」というメッセージが返ってきた。
そこで、"name": "users"
に注目し、
メールアドレスを送った時のクエリに含まれていたusername
と、
tokenの情報を得るために推測したtoken
を用い、以下のクエリを送った。
The server sent "Invalid token!" in the response for this query.
Seeing this, noting the "name": "users"
, I sent the following query using
username
, which is in the query sent on sending an e-mail address,
and token
, which I guessed to obtain information about "token".
すると、username
とtoken
の対応表が得られ、username
がadmin
の項目があった。
そこで、admin
のtoken
を用い、以下のクエリを送った。
This resulted in getting a table of username
and token
.
There was an entry whose username
is admin
.
Seeing this, I sent this query using the token
corresponding to the admin
:
すると、flagを送ってくれた。
The server sent the flag in the response of this query.