R136A1

[webhacking.kr] Challenge old-54 :: js 본문

WEB SECURITY/html | javascript | php

[webhacking.kr] Challenge old-54 :: js

r136a1x27 2022. 2. 23. 05:06

플래그를 그냥 빠르게 보여준다

 

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);
💡 setTimeout(callback, [timeout], [param1], [param2], ...)
지정한 시간(timeout, 단위ms, 1000=1초)이 지나면
지정한 callback 함수를 호출한다. param을 함께 전달할 수 있다.

function answer(i)

XMLHTTP 객체를 열어, GET으로 m=i 를 전달한다

aview.innerHTML에 위의 XMLHTTP에서 응답한 텍스트를 적는다

i를 늘리고

응답한 텍스트가 있었을 경우 20ms 후 answer(i)를 다시 호출하고

없었을 경우 aview.innerHTML에 ? 를 띄운다

 

처음에 불리는, 마지막에 있는 setTimeout("answer(0)", 1000); 은 로딩시간 배려를 위함

 

개발자 모드 Network(*Waterfall로 정렬할 것)와 피들러를 이용해 어떤 일이 일어나는지 관찰 가능.

개발자 모드에서는 Preview로 어떤 응답을 했는지 확인할 수도 있다.

사실 그냥 녹화해서 하나씩 조합하면 될 것 같은데... 문제의 의도가 아니고.

또 m=i 하면 될 것 같은데, 수동으로 하면 될 것 같은데....안된다. (어떤 m 값을 전달해도 물음표만 뜸)

 

 

자바 스크립트로 짜여진 로직은 Console을 적극 활용하도록 하자.

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. setTimeout의 시간을 늘려서 수기로 적는다

2. 개발자모드 Network에서 Preview를 보며 수기로 적는다

Comments