본문 바로가기
정보보안/wargame

[webhacking.kr] challenge(old). old-12

by 민-Zero 2020. 4. 4.

해당 문제에 들어가면 javascript challenge라는 문구만 확인할 수 있다. js에 관련된 문제인 것 같으니 소스코드를 확인해보자

코드를 확인해보면 스크립트 코드가 난독화 되어있는 것을 확인할 수 있다.

 

난독화를 해제하기 위해 크롬 개발자 도구의 콘솔에 입력하면 해제된 코드를 얻을 수 있다. 이때 난독화 코드의 맨 마지막 부분에 ('_')라는 난독화 해제를 방해하는 의미 없는 문자열을 지운 뒤 콘솔에 입력해야 한다.

난독화를 해제한 코드는 위와 같다. 코드를 확인해 보자

 

var enco='';
var enco2=126;
var enco3=33;
var ck=document.URL.substr(document.URL.indexOf('='));

총 4가지의 변수를 선언한다. 그중 ck변수 에는 document.URL로 문서의 URL을 가져온뒤 substr로 문자열을 추출하는데 indexOf함수를 사용해 =이 있는 위치를 반환시켜 추출하는 시작부분이 '='부터 추출된다.

 

for(i=1;i<122;i++){
enco=enco+String.fromCharCode(i,0);
}

fromCharCode()는 아스키코드번호를 받아 문자열을 구성해주는 함수로 i가 1부터 121까지 바뀌면서 enco변수에 계속 추가하게 된다.

 

function enco_(x){
return enco.charCodeAt(x);
}

charCodeAt(문자열 자릿수)은 문자열에서 자릿수를 선택하여 해당 문자를 아스키코드 번호로 변환하는 함수이다.

 

if(ck=="="+String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3)){
location.href="./"+ck.replace("=","")+".php";
}

ck 변수의 값이 "="+ 아스키코드를 통한 문자열이라면 ./ck 문자열.php 라는 페이지로 이동된다.

 

따라서 ck의 값이 =아스키코드를 통한 문자열과 같은 값을 가지도록 해야 문제가 해결될 것 같다. 스크립트 코드는 서버사이드 언어가 아닌 사용자 측 언어이므로 직접 코드를 관리자 도구에서 import 시켜 어떤 값인지 직접 확인할 수 있다.

따라서 직접 콘솔에 입력하여 조건문의 아스키코드를 확인해보면 youaregod~~~~~~~! 라는 문자열을 확인할 수 있다. 해당 문자열을 '='과 합쳐서 url에 입력하면 ck변수에 값이 들어가게 되어 해당 if문이 실행된다.

youaregod~~~~~~~!.php라는 페이지로 이동되며 해당 문제가 해결되는 것을 확인할 수 있다.

댓글