문제를 포면 Password 가 '?' 칸에 한 글자씩 출력되면서 사라진다.
소스 코드를 확인해보자.
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);
다른 태그는 중요한 게 없으니 script 태그만 확인해 보자.
answer 함수를 보면 XMLHttpRequest 객체를 사용해서 서버에 HTTP GET를 요청한다.
현재 페이지의 URL에 쿼리 문자열 '? m='와 'i'를 추가하여 요청한다 Network를 봐보자.
네트워크를 요청받은 URL '? m' , 'i'가 담겨있다.
이걸 전부 다 확인하면 Password를 알 수 있을 거 같지만 귀찮으니 기존 소스코드를 수정해 보자.
'aview.innerHTML=x.responseText;'이 부분은 HTML요소 중 id가 'aview'에 한 글자씩만 출력되게 합니다
= 왼쪽에 '+'를 붙여 한 글자씩 출력하되 사라지지 않게 수정하자.
그리고
''if(x.responseText="") aview.innerHTML="?"' -> 서버로부터 받은 응답이 없는 경우 'aview' 내용을 '?'로 변경시킨다.
여기서 'aivew'은 Password='(이 부분)' 뜻한다.
지워버리도록 하자.
'+'를 추가하고 아까말한 부분은 지웠다.
실행시켜 보자.
FLAG 가 출력되고 'Auth'로 가서 FLAG 값을 넣어보자.
'Wargame > Webhacking.kr' 카테고리의 다른 글
webhacking.kr - old 25 (PHP wrapper [LFI]) (0) | 2024.03.14 |
---|---|
webhacking.kr - old 27 (SQL INJECTION) (0) | 2024.03.14 |
webhacking.kr - old 38 (Log Injection) (0) | 2024.03.13 |
webhacking.kr - old 39 (0) | 2024.03.13 |
webhacking.kr - old 10 (0) | 2024.03.13 |