티스토리 뷰

hacking/webhacking.kr

<webhacking.kr> - 54번

khe0616 2018. 1. 16. 23:11

54번을 클릭하였을때의 화면이다. 시간이 좀 지나면 is뒤에 문자가 한글자씩 나오다가 ?가 나오고 더이상 변하지 않는다. 코드를 확인해 보겠다.







XMLHttpRequest는 Ajax요청을 생성하고 전송할 수 있는 객체이다.

Ajax(Asynchronous JavaScript and XML)란 자바스크립트를 이용해서 비동기적으로 서버와 브라우저가 통신하는 방식이다.


run()함수에서 if(window.ActiveXObject)는 구버전의 IE일 경우 수행되고

 else if(window.XMLHttpRequest)는 신버전의 IE(7이상) 또는 다른 웹브라우저(크롬 등)  일 경우 수행된다.


나는 크롬을 이용하였으므로 run()함수에서 XMLHttpRequest객체가 생성되고, 이 객체를 변수 x가 참조하게 되었다.




run()함수는 단순히 Ajax를 위한 객체를 생성할 뿐이므로 정답은 answer()함수에서 얻을 수 있을것 같다. 








answer()함수가 호출되는 부분이다.

10000ms, 즉 10초후에 answer(0)를 호출하는 코드이다.

setTimeout함수를 사용했기 때문에 54번 문제를 클릭하였을때, 일정 시간이 지난 다음 is뒤에 문자가 출력되었다는 것을 알 수 있다. 이제 answer()함수의 내부를 자세히 봐야겠다.




function answer(i)

  {

x.open('GET','?m='+i,false); //x에서 ?m=i 페이지를 여는 요청을 초기화

x.send(null);                             //요청을 전송

aview.innerHTML=x.responseText;  //서버의 응답(리턴값)을 화면에 출력

i++;                                          //i를 1증가


if(x.responseText) setTimeout("answer("+i+")",100); //서버의 응답이 있으면 재귀

if(x.responseText=="") aview.innerHTML="?";    //서버의 응답이 없으면 재귀종료
}

answer()함수는 재귀함수이다. x.responseText값 즉, 서버의 응답(리턴값)이 존재하면 1만큼 증가된 i를 인자로 하는 answer()이 호출되고, 서버의 응답(리턴값)이 없으면 재귀호출을 종료한다.


54번 문제에 들어왔을때 Password is 뒤에 나오는 문자들은 

aview.innerHTML=x.responseText에 의해 나타났다가

answer()의 재귀 호출에 의해 다른 값으로 변경되는 것이므로 이 코드를 조작하면 정답을 얻을 수 있다. 코드 조작을 위해 Burp Suite를 이용하였다.








answer()가 재귀적으로 호출될때마다 is뒤의 문자가 다른 값으로 바뀌지 않고 기존 문자열에 추가되도록 하기 위해 

aview.innerHTML=x.responseText -> aview.innerHTML+=x.responseText 로 바꿨고


x.responseText값이 없을때 is뒤의 문자가 ?로 바뀌지 않도록 하기위해 해당 분기문을 삭제하였다.


마지막으로 시간 절약을 위해

  setTimeout("answer(0)",10000) -> answer(0)로 바꾸었다.






위와 같이 수정하면

다음과 같이 패스워드를 알 수 있게된다.








복사해서 입력하면 54단계가 클리어된다.

'hacking > webhacking.kr' 카테고리의 다른 글

<webhacking.kr> - 1번  (0) 2018.01.19
<webhacking.kr> - 20번  (0) 2018.01.17
<webhacking.kr> - 16번  (0) 2018.01.13
<webhacking.kr> - 14번  (0) 2018.01.12
<webhacking.kr> - 17번  (0) 2018.01.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함