Web Hacking/Webhacking.kr

[Webhacking.kr] old-54번 문제 풀이

프레딕 2023. 8. 13. 23:35
728x90

처음 접속하면 패스워드가 막 이리저리 바뀌다가 ?에서 멈추게 된다. 

그럼 일단 소스코드를 확인해주자

일단 run()함수에 대한 부분은 복잡하니 answer함수부터 알아본다.

천천히 한줄 식 해석하면

 

x.open('GET', '?m=' +i, false)

?m=i라는 주소를 동기식 방식으로 불러온다. (true면 비동기, false면 동기)

x.send(null)

GET 방식으로 서버에 요청을 보낸다.

aview.innerHTML = x.responseText

aview id에 x에서 받은 응답 메세지를 넣어준다.

i++;

if(x.responseText) setTimeout("answer("+i+")",20);

만약 응답 메세지가 있으면 계속해서 answer함수를 불러오고

if(x.responseText=="") aview.innerHTML="?";

없으면 ?문자로 바꿔준다.

 

이렇게 보니 응답쪽에 관련이 있을것 같아 Network 페이지를 봐주었다.

m=0 부터 m=38까지 Response응답이 있는걸 확인할 수 있다.

그리고 이 응답들을 한번에 보기 위해서 아래와같이 코드를 수정하고 console창에 넣으면

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);

 

플래그를 얻을 수 있다!

728x90
반응형