본문 바로가기

Wargame(hacking)/webhacking.kr

Webhacking.kr : old-54

 

<  풀이 과정 >

 

그림 1

 

<코드 1>
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);
  if(x.responseText=="") aview.innerHTML="?";
}
setTimeout("answer(0)",1000);

 

위의 코드 1을 javascript 콘솔 창에서 돌리면, 그림 1에서 문자들이 빠르게 변화한다. 이것이 Flag 값임을 직감할 수 있다. 

처음에는 속도를 줄이고자, wait() 함수를 이용해 sleep을 주고자 하였다. 그 코드는 아래 코드 2와 같다. 

 

<코드 2>
function wait(sec) {
    let start = Date.now(), now = start;
    while (now - start < sec * 1000) {
        now = Date.now();
    }
}

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);
  wait(2);  
  x.send(null);
  aview.innerHTML=x.responseText;
  i++;
  if(x.responseText) setTimeout("answer("+i+")",20);
  if(x.responseText=="") aview.innerHTML="?";
}
setTimeout("answer(0)",1000);

 

하지만, flag 값은 생각보다 너무 많았고, 받아 적어야 하는 불편함이 있었다. ( 심지어 잘못 받아 적었다.. )

그래서 아래 코드3 을 구현하였다. 

 

<코드 3>
let s = ''
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);
  s +=x.responseText;
  i++;
  if(x.responseText) setTimeout("answer("+i+")",20);
  if(x.responseText=="") aview.innerHTML="?";
}
setTimeout("answer(0)",1000);

 

코드 3을 돌리면, 아래 그림 2와 같이 FLAG 값이 출력된다. 

 

그림 2

 

< 코드 4 >
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);

 

코드4 는 페이지에 FLAG 값이 보이게 된다. 

 

 

 

한줄 평 : Flag를 빠르게 찾고.. 이 Flag를 어디에 입력할지 몰라 한시간을 허비했다.. 마음이 아프다.

 

 

 

 

<  참고 >  

 

https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90-sleep-wait-%EB%8C%80%EA%B8%B0-%ED%95%A8%EC%88%98-%EC%93%B0%EA%B8%B0

 

🚀 자바스크립트에 sleep() & wait() 대기 함수 쓰기

자바스크립트 sleep(), wait() 대기 함수 보통 C언어, 자바, 파이썬에서 보면, 입력한 시간 만큼 코드의 실행을 멈추는 일반적인 기능으로 sleep()이나 wait() 같은 함수가 존재한다. ​하지만 자바스크

inpa.tistory.com

 

https://dororongju.tistory.com/68

 

[자바스크립트] 타이머 함수(setTimeout, setInterval)

타이머 함수 자바스크립트 내장 함수중에 타이머 함수가 있습니다. 타이머 함수는 다음과 같은 역할을 합니다. 함수 이름 설명 setTimeout(함수, 시간) 일정 시간 후 함수 실행 setInterval(함수, 시간)

dororongju.tistory.com