-
<Webhacking.kr> old-54Wargame/Webhacking.kr 2021. 12. 27. 18:17
FLAG 값으로 보이는 문자들을 한 글자씩 빠르게 보여준다.
페이지 소스 코드를 살펴보면
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);
run() 함수를 먼저 살펴보면,
function run(){ if(window.ActiveXObject){ 브라우저가 IE일 경우 XMLHttpRequest 객체 구하기 try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { // 예외 처리 try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { return null; } } }else if(window.XMLHttpRequest){ // IE 외의 브라우저에서 XMLHttpRequest 객체 구하기 return new XMLHttpRequest(); // XMLHttpRequest() 객체 생성 }else{ return null; } }
answer() 함수를 살펴보면
function answer(i){ // 새로 생성된 요청을 초기화하거나 기존 요청을 다시 초기화한다. x.open('GET','?m='+i,false); // ./?m=i에 GET 방식으로 HTTP 요청하고, send() 응답을 받을 때까지 메서드가 반환되지 않는다(동기적으로 처리). x.send(null); // 요청을 서버로 보낸다. aview.innerHTML=x.responseText; // 요청을 보낸 후 서버에서 받은 텍스트를 반환한다. i++; // setTimeout() : 만료된 후 함수나 지정한 코드를 실행하는 타이머를 설정 if(x.responseText) setTimeout("answer("+i+")",20); if(x.responseText=="") aview.innerHTML="?"; }
한 글자씩 나오므로 개발자 도구 Sources 탭을 사용하여
Breakpoints를 사용하면 FLAG를 구할 수 있다.
"aview.innerHTML=x.responseText;" 부분에 중단점을 설정하면 한 글자씩 출력하게 된다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
<Webhacking.kr> old-42 (0) 2021.12.30 <Webhacking.kr> old-59 (0) 2021.12.28 <Webhacking.kr> old-39 (0) 2021.12.27 <Webhacking.kr> old-28 (0) 2021.12.25 <Webhacking.kr> old-29 (0) 2021.12.21