http://webhacking.kr/challenge/bonus/bonus-14/
사이트를 들어가면 몇초 뒤에 무슨 글자가 한자리씩 뜨며 마지막에 ?를 찍고 멈추는 것을 보실 겁니다.
이게 대체 뭐지하고 멍할 수 있습니다. 저도 처음 이 문제 풀때는, 일일이 멈춰가면서 적어 풀었지만 자바스크립트를 이해하면 쉽게 해결할 수 있습니다. 문제 페이지에서 마우스 오른쪽 클릭으로 소스보기를 합니다.
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+")",100);
if(x.responseText=="") aview.innerHTML="?";
}
setTimeout("answer(0)",10000);
이런 소스코드가 보일 것입니다.
위에 있는 run 함수는 윈도우관련 코드이고 이미 실행했기 때문에 따로 작성하지 않아도 됩니다.
그러면 아래 있는 answer 함수와 setTimeout을 보겠습니다.
setTimeout은 10초후에 answer 함수에 0을 넣어서 실행하는 것입니다.
그럼 answer 함수가 여기에서 클리어로 가는 중요한 핵심인 것 같군요.
x.open('GET','?m='+i,false);
x.send(null);
aview.innerHTML=x.responseText;
i++;
if(x.responseText) setTimeout("answer("+i+")",100);
if(x.responseText=="") aview.innerHTML="?";
첫번째 줄은 GET방식으로 m이라는 파라미터에 i를 더해가면서 페이지를 여는 것입니다.
두번째 줄은 위에서 했던 것을 보내는 함수
세번째 줄은 html 페이지에 run함수로 실행한 어떤 값을 노출
네번째 줄은 변수 i 에 1씩 더하기
다섯번째 줄은 어떤 값이 생겼으면 answer함수에 변수 i를 저장하고 0.1초 기다림
여섯번째 줄은 어떤 값이 null 이면 페이지에 ?를 노출, 이것은 마지막 값이라는 걸 알 수 있죠.
그러면 대충 어떻게 돌아가는지 아실겁니다.
이제 스크립트를 위한 코딩을 해보겠습니다.
개발자도구를 열어 크롬인 경우 Network 탭을 띄워두세요.
한번 다시 F5를 눌러 페이지를 새로고침 해보세요.
그러면 이런 흐름을 알 수 있습니다.
m 파라미터 값이 바뀌면서 페이지가 새로고침 되네요.
물음표가 나오는 m 파라미터 값은 32이었습니다.
답에 해당하는 문자열은 0부터 31까지겠군요.
어떤 값이 노출되는지 전의 함수에서 알 수 있겠죠.
x.responseText 라는 값이 노출되는 값입니다.
필요없는 코드는 빼고 핵심만 작성해보았습니다.
var total = "";
for(var i=0; i <= 31; i++)
{
x.open('GET','?m='+i,false);
x.send(null);
total = total + x.responseText;
}
변수 i는 m 파라미터에 더해가니까 for문으로 써주고 노출되는 값을 저장할 변수도 하나 만들어줍니다.
이걸 실행하면 total 변수에 답이 저장됩니다.
total을 콘솔에 입력하고 조금 기다리면 답이 출력됩니다.
이 답을 auth에 입력하면 54번 문제가 clear됩니다.
'워게임 > 웹해킹kr' 카테고리의 다른 글
웹해킹kr 1번 문제 풀이 (0) | 2016.05.24 |
---|---|
웹해킹kr 38번 문제 풀이 (0) | 2016.05.24 |
웹해킹kr 28번 문제 풀이 (0) | 2016.05.23 |
웹해킹kr 12번 문제 풀이 (0) | 2016.05.23 |
웹해킹kr 11번 문제 풀이 (0) | 2016.05.03 |