Webhacking.kr - New: NotSQL Writeup
오늘은 webhacking.kr 전 문제들이 아닌, 최근에 올라오기 시작한 새로운 문제들 중 하나를 골라서 풀어보았다.
문제 제목도 NotSQL인거 보니 nosql에 관한 문제 같아 보였다. 우선 접속 해보자
심플한 초기화면이다. 첫번째 라인 링크를 누르면 no=1 이 붙으면서 첫번째 사진이 나오고,
두번째 라인 링크를 누르면 no=2 가 붙으면서 두번째 사진이 나온다.
페이지에는 딱히 단서가 없어보이니 소스코드를 살펴 보자.
아무래도 이 게시판을 view 시켜주는 php 파일 경로는 /view.php 인 것 같다.
거기에 graphsql 에서 사용하는 쿼리를 query 라는 이름의 파라미터로 입력받고 그에 해당하는 게시글을 보여주고 있다.
해당 경로로 가서 쿼리를 직접 입력한 후 보내보자.
/view.php?query={view{no,subject,content}} 를 입력하자 아래사진 처럼 두개의 게시글이 한번에 출력되었다.
이를 이용하여 Graphql 의 쿼리형식으로 FLAG를 찾아야 할 것 같다.
https://graphql-kr.github.io/learn/introspection/
GraphQL 공식 사이트에 들어가면 스키마를 확인할 수 있는 쿼리문이 있다. 그대로 가져와 입력해보면
/view.php?query={__schema{types{name}}}
아래처럼 GraphQL이 어떤 쿼리문을 지원하는지 알 수 있다.
위 처럼 정리하고보니, 시도해볼만한 몇몇의 이름이 보인다. [물론 처음 푸는 입장에서 전부 시도해봤다]
그중에서 Query라는 이름의 타입 아래에 있는 필드를 확인해보려고 한다.
/view.php?query={__type(name:"Query"){fields{name}}}
우리가 아까 게시글을 보는데 사용했던, view라는 쿼리가 보이고, 그 다음으로 login으로 시작하는 쿼리가 하나 더있다.
저걸 이용해야된다는 느낌이 든다.
그렇다면 바로 view 대신 login~을 넣어서 쿼리를 보내보자.
/view.php?query={login_51b48f6f7e6947fba0a88a7147d54152}
는 실패..
에러를 잘 읽어보면 서브필드를 포함해야 한다고 적혀있다.
login 이라는 쿼리를 실행하는데 필요한 서브필드? 왠지 비밀번호 같은 것이 필요할 것 같다.
그래서 아까 찾아놨던 types 들을 다시 한번씩 탐색했다. 그 중
비밀번호를 가지고 있을 것만 같은 이름을 골랐다.
아까 Query 타입을 탐색했을 때 처럼 저 이름을 입력해서 쿼리를 보내주면,
/view.php?query={__type(name:"User_d51e7f78cbb219316e0b7cfe1a64540a"){fields{name}}}
아니나 다를까 필드 중에 passwd_로 시작하는 필드가 있다.
서브필드에 저부분을 넣어주면 될 것 같다.
저부분을 포함해서 다시 쿼리문을 작성하면,
/view.php?query={login_51b48f6f7e6947fba0a88a7147d54152{passwd_e31db968948082b92e60411dd15a25cd}}
이 완성된다. 이렇게 요청해주면
짜잔 FLAG{i_know_how_to_use_graphql} 두두둥장