반응형
문제
각각 파라미터 no이 1일 때와 2일 때의 결과이다.
<script>
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.`;
}
}
</script>
문제풀이
view.php에 query 매개변수를 전송할 때, 아래와 같은 결과를 볼 수 있다.
빈 쿼리를 날릴 때 결과는 아래와 같다.
SQL의 information_schema.tables 처럼 작동하는 쿼리인 query{__schema{types{name}}}을 전송하면 아래와 같다.
필드 이름을 알아내기 위해 전송하면 결과는 아래와 같다.
위에서 얻은 정보를 바탕으로 쿼리를 날리면 flag 값을 얻을 수 있다.
반응형
'write-up(web) > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-03 (0) | 2023.02.18 |
---|---|
[Webhacking.kr] old-02 (0) | 2023.02.18 |
[Webhacking.kr] BABY (0) | 2023.01.16 |
[Webhacking.kr] old-61 (0) | 2023.01.15 |
[Webhacking.kr] old-60 (0) | 2023.01.15 |