본문 바로가기

보안공부/Webhacking.kr 풀이

webhacking.kr 54번 문제 풀이 - 한국인의 참을성

WEBHACKING.KR 54번 문제 풀이

비교대신 대입! ]


그럼 오늘은 webhacking.kr 54번 문제를 풀어보도록 하자.


비밀번호는.... 일단 기다려봅시다...

기다리면 일단 하나씩 나옵니다.


하지만 현대 문명의 한국인들은 이런 느리고 깐죽대는 행위를 가장 싫어하죠.

따라서 우리는 우리의 비밀번호를 알기 위해 코드를 작성해봅시다.


코드를 재작성하기 위해서는 원래코드를 알아야겠죠?

원래 코드는 다음과 같습니다.

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);

이 코드는 ActiveX 객체를 사용하는것으로 보아 ActiveX를 사용하는 문제인가 봅니다.

코드 윗부분은 ActiveX 객체를 생성해주는 부분이니 우리는 아래에 answer 구문을 활용해봅시다.


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="?";
}

이 함수는 aview.innerHTML=x.responseText;를 통해 원래 값을 덮어쓰기합니다.

그래서 값이 하나씩 따로따로 출력되던 것입니다.

따라서 이제 저 코드를 한국인에 맞게 고친다면 aview.innerHTML+=x.responseText;가 되겠죠?


그리고 이제 일일히 보고 있기 귀찮으니 if(x.responseText=="") aview.innerHTML="?";

if(x.responseText=="") alert(aview.innerHTML); 로 바꿔줍시다.


그럼 우리가 사용할 최종 코드는 다음 코드가 되겠죠?


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=="") alert(aview.innerHTML);
}

그럼 이제 이 코드를 개발자 도구의 console에 넣고 돌리면


뿅!

문제 해결!




WEBHACKING.KR 54번 문제 클리어!