Webhacking.kr old 54번 Writeup

  • 오늘은 Webhacking.kr의 54번 문제를 한번 풀어보도록 하겠습니다.

  • 일단 문제 사이트에 접속을 해주겠습니다.

  • 사이트에 접속을 해보면 Password is ?라고 해서 뒤에 문자열이 계속 바뀌는 것을 알 수 있습니다. 즉, 빠르게 이동하는 이것이 우리가 원하는 FLAG라는 것을 알 수 있습니다.

  • 그렇기 때문에 이를 천천히 받기만 하면 FLAG를 얻을 수 있다는 것을 대충 예상해볼 수 있습니다.

  • 개발자모드(F12)를 이용해서 Element에서 소스코드를 확인해보겠습니다.

  • 위의 코드에서 자바스크립트 코드만 보자면 아래와 같습니다.

  • 위의 자바 스크립트 코드를 분석해보자면 함수는 2개 즉, run()함수와 answer() 함수가 존재한다.

  • run() 함수에 대해서 살짝 헷갈려서 ActiveXObject와 XMLHttpRequest에 대해서 검색을 해보면 비동기관련 내용이라는 것을 확인할
    수 있다.

  • 그 다음에 x변수에 run()함수, 즉 function answer()의 내용을 보면 `aview.innerText = x.responseText;라는 코드를 확인할 수 있고, 이 코드의 의미를 분석해보면 response text를 보여주는 코드라고 대충 생각해볼 수 있습니다.

  • 즉, 단순히 responseText를 하나만 출력하는 것이 아닌 계속 더하면 어떨까?라고 생각을 하게 되었고, answer()함수를 조금 변형해서 이를 이용하면 될 것 같다고 생각을 하였습니다.

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);
  • 그리하여 아래와 같은 Flag source를 작성하면 됩니다.
function answer(i){
  x.open('GET','?m='+i,false);
  x.send(null);
  aview.innerHTML += x.responseText; // aview.innerHTML = aview.innerHTML + x.responseText; (출력하는 내용을 계속 끝까지 더해서 출력)
  i++;
  if(x.responseText) setTimeout("answer("+i+")",20);
  if(x.responseText=="") aview.innerHTML="?";
}
setTimeout("answer(0)",1000);
  • 그런 다음 해당 소스코드를 웹 개발자 도구의 Console탭에 넣어줍니다.

  • 그리고나서 웹 페이지를 확인해주면 플래그를 확인할 수 있습니다.

좋은 웹페이지 즐겨찾기