선릉역 1번 출구

Webhacking_54 문제풀이 본문

Hacking & Security/Web_hacking 문제풀이

Webhacking_54 문제풀이

choideu 2021. 8. 15. 11:07

화면을 들어가면 ?부분에 문자가 막 나오다가 마지막은 ?로 끝난다. 

동체시력이 좋다면 이 문자를 그대로 받아적으면 될 듯 ㅋㅋㅋ

아무튼 먼저 소스코드를 확인했다.

2가지 function run(), answer()이 존재했다. 첫 번째 함수 run()은 객체 관련 함수라 패스하겠다. 여기서 중요한 건 x가 그 객체를 받아왔다는거고 그 뒤 answer()함수를 통해 화면에 어떤 문자열을 띄우게 돼 있다는 것이다.

먼저 중요해 보이는 함수인 setTimeout에 대해서 알아보자.

 *setTimeout은 시간 지연 함수이다.
 setTimeout(1,2)에서 1은 실행시킬 코드를 의미하고 2는 delay 시간으로 1000=1초이다.

그러니까 setTimeout을 통해서 1초 뒤에 answer에 매개변수 0을 넘겨서 실행시킨다는 의미이다. 그 다음 function answer의 코드를 살펴보자. 

 open(method, url, async) 
 method: http 전달 방식(get or post)
 url: 요청 페이지의 주소
 async: 비동기 통신 여부(true or false)

 send()

 *비동기로 통신한다는 것 = 서버의 응답을 기다리면서 다른 어떤 작업도 할 수 없음(false일 때), true라면 서버의 응답을 기다리면서 다른 작업 ok

aview.innerHTML = x.responseText 부분에서 실시간으로 변하는 문자열을 html 화면에 띄워주는 것 같은데 = -> +=로 바꿔주면 그 전 문자열도 같이 보일 것이다. 

i++, if(x.responseText) setTimeout("answer("+i+")',20); 은 빠르게 다음 문자를 호출하는 코드이고 마지막 if는 결국 마지막에 ?를 띄우는 코드이기 때문에 생략하겠다.

function run(){
  if(window.ActiveXObject){
   try {
    return new ActiveXObject('Msxml2.XMLHTTP');
   } catch (e) {
    try {
     return new ActiveXObject('Microsoft.XMLHTTP');
    } catch (e) {
     return null;
    }
   }
  }else if(window.XMLHttpRequest){
   return new XMLHttpRequest();
 
  }else{
   return null;
  }
 }
x=run();
function answer(i){
  x.open('GET','?m='+i,false);
  x.send(null);
  aview.innerHTML+=x.responseText;
  i++;
  if(x.responseText) setTimeout("answer("+i+")",20);
}
setTimeout("answer(0)",1000);

이 코드를 검사->console창에서 실행시켜주자

FLAG값이 도출되었다!

이 값을 auth창에 가서 인증해주면 

clear

'Hacking & Security > Web_hacking 문제풀이' 카테고리의 다른 글

LORD OF SQLINJECTION - troll  (0) 2021.08.16
Webhacking_34 문제풀이  (0) 2021.08.15
LORD OF SQLINJECTION - orc  (0) 2021.08.15
LORD OF SQLINJECTION - skeleton  (0) 2021.08.13
LORD OF SQLINJECTION - vampire  (0) 2021.08.13
Comments