제목이 NotSQL인걸 보니 NoSQL 문제인듯 하다
일단 사이트의 no 쿼리에 1과2를 날릴 수 있고 그 외엔 뭐 찾을 수가 없었다.
그래서 일단 개발자도구의 스크립트가 있길래 그걸 봐줬다.
function getQueryVar(variable) {
var query = window.location.search.substring(1);
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair[0]) == variable) {
return decodeURIComponent(pair[1]);
}
}
}
if(!getQueryVar("no")){
q = `query{
view{
no,
subject
}
}`;
xhr = new XMLHttpRequest();
xhr.open("GET", "/view.php?query="+JSON.stringify(q).slice(1).slice(0,-1),false);
xhr.send();
res = JSON.parse(xhr.response);
for(i=0;i<res.data.view.length;i++){
board.innerHTML += `<a href=/?no=${res.data.view[i].no}>${res.data.view[i].subject}</a><br>`;
}
}
else{
q = `query{
view{
no,
subject,
content
}
}`;
xhr = new XMLHttpRequest();
xhr.open("GET", "/view.php?query="+JSON.stringify(q).slice(1).slice(0,-1),false);
xhr.send();
res = JSON.parse(xhr.response);
v = res.data.view;
try{
parsed = v.find(v => v.no==getQueryVar("no"));
board.innerHTML = `<h2>${parsed.subject}</h2><br><br>${parsed.content}`;
}
catch{
board.innerHTML = `<h2>???</h2><br><br>404 Not Found.`;
}
}
일단 no를 가져와서 no값이 없으면 메인페이지에 subject로 표시된 href를 띄운다.
그리고 no가 있으면 subject와 content를 보여준다.
여기서 봐야할 점은 /view.php?query 부분에서 값을 가져온다는 것이다.
그래서 해당 엔드포인트에 query값에 아무값이나 넣어줬더니 아래 에러를 볼 수 있었다.
대충 에러값을 보니 GraphQL을 사용하는걸 확인할 수 있었다.
GraphQL도 인젝션이 가능한데 일단 {__schema{types{name}}을 하면은 스키마의 타입들의 이름을 볼 수 있다.
여기서 GraphQL은 __schema에 대부분의 정보들이 들어있다.
일단 Board는 아마 no의 타입일거고 딱봐도 수상하게 생긴 User_d51e7f78cbb219316e0b7cfe1a64540a 요게 flag의 타입일 것이다.
그다음엔 {__schema{types{fields{name}}} 이걸로 필드값들을 볼 수 있다.
여기로 들어가면 딱봐도 수상하게 생긴 login.... 하고 passwd... 하고 userid....가 보인다.
그리고 추가적으로 {__schema{queryType{fields{name, description}}}} 을 검색하면 쿼리타입의 이름과 description을 볼 수 있다.
view는 no의 쿼리타입이고 login... 이게 flag의 쿼리타입인듯 하다.
그래서 일단 {login_51b48f6f7e6947fba0a88a7147d54152{userid_a7fce99fa52d173843130a9620a787ce}} 이렇게 날려봤다.
그러면 admin 아이디인걸 확인 가능하고 passwd도 똑같이 날려보니
위와 같이 FLAG 획득이 가능했다.
알면 쉬우고 모르면 어려운.,.. 문제인듯 하다
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Regex Master (0) | 2024.08.08 |
---|---|
[Webhacking.kr] child toctou (0) | 2024.08.01 |
[Webhacking.kr] old 13 (1) | 2024.07.22 |
[Webhacking.kr] old-30 (편법) (0) | 2024.07.15 |
[Webhacking.kr] old-45 풀이 (0) | 2024.07.15 |