R136A1
[webhacking.kr] Challenge old-54 :: js 본문
WEB SECURITY/html | javascript | php
[webhacking.kr] Challenge old-54 :: js
r136a1x27 2022. 2. 23. 05:06플래그를 그냥 빠르게 보여준다
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);
💡 setTimeout(callback, [timeout], [param1], [param2], ...)
지정한 시간(timeout, 단위ms, 1000=1초)이 지나면
지정한 callback 함수를 호출한다. param을 함께 전달할 수 있다.
function answer(i)
XMLHTTP 객체를 열어, GET으로 m=i 를 전달한다
aview.innerHTML에 위의 XMLHTTP에서 응답한 텍스트를 적는다
i를 늘리고
응답한 텍스트가 있었을 경우 20ms 후 answer(i)를 다시 호출하고
없었을 경우 aview.innerHTML에 ? 를 띄운다
처음에 불리는, 마지막에 있는 setTimeout("answer(0)", 1000); 은 로딩시간 배려를 위함
개발자 모드 Network(*Waterfall로 정렬할 것)와 피들러를 이용해 어떤 일이 일어나는지 관찰 가능.
개발자 모드에서는 Preview로 어떤 응답을 했는지 확인할 수도 있다.
사실 그냥 녹화해서 하나씩 조합하면 될 것 같은데... 문제의 의도가 아니고.
또 m=i 하면 될 것 같은데, 수동으로 하면 될 것 같은데....안된다. (어떤 m 값을 전달해도 물음표만 뜸)
자바 스크립트로 짜여진 로직은 Console을 적극 활용하도록 하자.
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);
모든 작업이 끝나고 다시 한 번 쳐주면 아래와 같이 이어져서 나오게 된다.
다른 풀이
1. setTimeout의 시간을 늘려서 수기로 적는다
2. 개발자모드 Network에서 Preview를 보며 수기로 적는다
'WEB SECURITY > html | javascript | php' 카테고리의 다른 글
[webhacking.kr] Challenge old-38 :: CRLF injection? (0) | 2022.02.23 |
---|---|
[webhacking.kr] Challenge old-42 :: html, js (0) | 2022.02.22 |
[webhacking.kr] Challenge old-36 :: etc (0) | 2022.02.22 |
[dreamhack] session-basic (0) | 2022.02.19 |
[dreamhack] funjs (0) | 2022.02.18 |
Comments