본문 바로가기
웹 해킹/Webhacking.kr

[Webhacking.kr] old-54

by L3m0n S0ju 2021. 9. 6.

 

 

문제 서버에 접속하면 위와 같이 Password가 출력되지만 빨라서 읽기가 힘들고 일정시간이 지나면 ?로 표시됩니다.

 

 

 


 

<html><head>
<title>Challenge 54</title>
</head>
<body>
<h1><b>Password is <font id="aview">?</font></b></h1>
<script>
function run(){
  if(window.ActiveXObject){ // ActiveXObject를 지원하는 브라우저라면 오브젝트를 리턴 그렇지 않으면 null 반환
   try {
    return new ActiveXObject('Msxml2.XMLHTTP'); // MS(마이크로소프트) xml 코어 서비스를 사용하겠다. 
   } catch (e) {
    try {
     return new ActiveXObject('Microsoft.XMLHTTP'); // 위 방법이 실패하면 다른 방법으로 시도
    } catch (e) {
     return null;
    }
   }
  }else if(window.XMLHttpRequest){ // 위에서 브라우저가 지원안하더라도 다른 방법으로 XHR 객체를 생성한다.
   return new XMLHttpRequest(); // XHR 객체 반환
 
  }else{
   return null;
  }
 }
x=run();
function answer(i)

{
  x.open('GET','?m='+i,false); // url ?m={숫자}에 요청을 합니다. false는 아래 send 함수에서 서버로부터 응답이 올 때까지 기다림을 의미한다.


  x.send(null);
  aview.innerHTML=x.responseText; // x의 응답 메시지를 aview에 저장한다.
  i++;
  if(x.responseText) setTimeout("answer("+i+")",20); // 제귀적으로 answer 자신을 호출
  if(x.responseText=="") aview.innerHTML="?";
}
setTimeout("answer(0)",1000);
</script>


</body></html>

 

 

 

XHR 객체는 서버와 상호작용하기 위해서 사용됩니다. 전체 페이지의 새로고침 없이도 URL로부터 데이터를 받아올 수 있습니다. 이는 웹페이지가 사용자가 하고 있는 것을 방해하지 않으면서 페이지의 일부를 업데이트할 수 있도록 해줍니다. XHR 객체는 보통 빠르게 동작하는 동적인 웹페이지를 만들때 사용하는 Ajax 개발기법에 자주 사용됩니다.

 

 

 

 


aview.innerHTML=x.responseText; 

 

코드 핵심 부분을 다시 살펴보면 위 명령어는 aview라는 변수에 서버에서 가져온 어떤 데이터를 저장하는 코드이므로 아래와 같이 +를 붙여 문자가 하나씩 추가되도록 만든다.

 

aview.innerHTML+=x.responseText;  

 

 

 

 


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

 

위 명령어는 aview를 ?로 만드므로 제거한다. 완성된 코드는 아래와 같다.

 

 

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

 

 

 


해당 코드를 그냥 새로고침하면 적용이 안되는 것을 확인하였다. 따라서 위 그림과 같이 콘솔창에 입력하면 플래그를 획득할 수 있다.

 

 

 

 


플래그

 

 

 

'웹 해킹 > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-25  (0) 2021.09.07
[Webhacking.kr] old-39  (0) 2021.09.07
[Webhacking.kr] old-38  (0) 2021.09.05
[Webhacking.kr] old-26  (0) 2021.09.05
[Webhacking.kr] old-24  (0) 2021.09.05

댓글