웹찢남

Webhacking.kr Update!! 본문

WEB_HACKING

Webhacking.kr Update!!

harry595 2021. 4. 24. 01:29

드디어 Webhacking.kr이 업데이트를 했다.

 

 

 

새로운 문제가 업데이트 됐고

 

 

 

랭킹 페이지가 생겼다.

 

조만간 문제좀 다시 풀어서 ranking에 이름좀 올려 놔야겠다...

 

업데이트 기념으로 오랜만에 감 좀 찾으려고 한 문제만 풀어봤다.

 

NOTSQL 문제를 풀어봤는데 아무래도 writeup이 아직 안풀려서 나도 풀수는 없지만 조금만!

 

 

일단 no=1,2로 귀여운 고양이 사진을 불러온다. 귀엽다

코드를 보면 아래에 no를 q라는 쿼리를 통해 값을 받아와 처리한다.

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.`;
  }
}

 

그럼 view.php에 가보자. 아래처럼 대충 쿼리에 아무거나 넣으니 GraphQL이라는 정보를 얻었다.

 

 

 

여기부터는 GraphQL injection을 찾아보고 그 안의 정보를 사용하며 문제를 풀면된다.

이 문제를 통해 GraphQL을 접해본적이 없었는데 좋은 경험이 된것같다.

 

 

Comments