webhacking NotSQL 문제로 이번 문제는 멘토분의 도움으로 해결했습니다.
먼저 문제사이트에 접속을 해보면
두개의 링크가 있습니다.
두개 각각 접속을 해보면
GIF사진과 jpg사진이 반겨줍니다.
문제의 접근법 부터 모르는 상황이니 개발자도구로 코드를 먼저 열어보면
view.php라는 코드가 query = query{ ..... } 등으로 무엇인가 처리를 해주고 있는 걸 확인할 수 있습니다.
view.php로 들어가보면
각각의 쿼리값이 어떻게 처리되고 있는지 파라미터 확인이 가능합니다.
문제 자체가 NotSQL인데 SQL과 비슷한 구문을 처리하고 있으니 어떠한 언어를 사용하는지 먼저 알아야 합니다.
Error를 일으키면 어떠한 언어를 사용하는지 확인이 가능해 Error를 일으켜보면
GraphQL이라는 언어를 사용한다고 합니다.
GraphQL 언어는 처음보며 지식은 전무하기에 깃허브자료들을 이용해 스키마를 이용하는 방법을 사용했습니다.
__schema{queryType{name},mutationType{name},types{kind,name,description,fields(includeDeprecated:true){name,description,args{name,description,type{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name}}}}}}}},defaultValue},type{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name}}}}}}}},isDeprecated,deprecationReason},inputFields{name,description,type{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name}}}}}}}},defaultValue},interfaces{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name}}}}}}}},enumValues(includeDeprecated:true){name,description,isDeprecated,deprecationReason,},possibleTypes{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name}}}}}}}}},directives{name,description,locations,args{name,description,type{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name,ofType{kind,name}}}}}}}},defaultValue}}}
GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and Pentest/CTF
A list of useful payloads and bypass for Web Application Security and Pentest/CTF - GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and ...
github.com
값을 query= query { __schema (위의 값) }형태로 값을 전달해보면 값이 쭉 출력되고 있습니다.
이러한 형태로는 보기가 힘드니 JSON 뷰어로 값을 넘겨서 확인해보면
테이블이 어떤구조인지 보기쉽게 확인이 가능합니다.
view.php로 들어갔을때 확인한 필드명 no와 subject등이 있는걸 볼수 있습니다.
여기서 찾은 name : Board에 대한걸 검색해보면 위 사진과 아래 사진 두개가 검색됩니다.
이는 우리가 문제페이지에서 보고있는건 Board를 실체화시킨 name: view를 보고있다는 것을 알려줍니다.
즉 Board -> view 로 실체화시킨다음 view에 접근해 페이지에서 결과를 보여주고 있다는 것이고
그래서 view.php에 접속했을때 쿼리에 전달되는 값으로 view가 전달되고 있었습니다.
문제 해결을 위해서
우리가 찾아야 하는것은 FLAG이기에
다른 값이 없나 쭉 테이블을 살펴보면
Userid와 passwd가 존재합니다.
이또한 검색으로 view처럼 어떤값으로 실체화 되는지 확인해보면
login_51b... 의 값으로 실체화 되고 있음을 확인 할 수 있습니다.
userid와 passwd에 접근법은 Board에 접근하기 위해 view를 이용한것 처럼
login_51b... 을 이용해서 접근해야합니다.
전달값을 login, userid, passwd을 확인해서 구성하면 아래와 같습니다.
query=query{login_51b48f6f7e6947fba0a88a7147d54152{userid_a7fce99fa52d173843130a9620a787ce,passwd_e31db968948082b92e60411dd15a25cd}}
구성한 값을 문제사이트에 전달해보면
passwd 값으로 FLAG가 있는 것을 확인할 수 있습니다.
찾은 FLAG를 전달하며 문제가 해결되었습니다.
이번 문제는 멘토님의 해설과 함께 해결한 문제였음에도
GraphQL에 당황스러웠고 DB에 접근하는 방식을 새롭게 배우는 문제였습니다.
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking Writeup sliping beauty 문제 (0) | 2023.09.12 |
---|---|
Webhacking Writeup baby toctou 문제 (0) | 2023.04.06 |
Webhacking Writeup old-43 문제 (0) | 2022.12.06 |
Webhacking Writeup old-36 문제 (0) | 2022.12.05 |
Webhacking Writeup old-47 문제 (0) | 2022.12.05 |