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탭에 넣어줍니다.
- 그리고나서 웹 페이지를 확인해주면 플래그를 확인할 수 있습니다.
Author And Source
이 문제에 관하여(Webhacking.kr old 54번 Writeup), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dsph9245/Webhacking.kr-old-54번-Writeup저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)