WEBHACKING.KR 12번 문제 풀이
[ 아すき ]
그동안 부제목이 너무 딱딱(?) 하다 느껴서 일본어도 좀 섞어봤습니다.
すき가 발음이 스키니까 제목은 아스키입니다. (암튼 그렇다구요)
그럼 오늘은 webhacking.kr 12번 문제를 풀어봅시다.
javascript challenge?
감 오시죠? 소스에 js코드가 있다는 겁니다.
그런데 띠용?
WorkTimeFun=String.fromCharCode(118,97,114,32,101,110,99,111,61,39,39,59,13,10,118,97,114,32,101,110,99,111,50,61,49,50,54,59,13,10,118,97,114,32,101,110,99,111,51,61,51,51,59,13,10,118,97,114,32,99,107,61,100,111,99,117,109,101,110,116,46,85,82,76,46,115,117,98,115,116,114,40,100,111,99,117,109,101,110,116,46,85,82,76,46,105,110,100,101,120,79,102,40,39,61,39,41,41,59,13,10,32,13,10,32,13,10,102,111,114,40,105,61,49,59,105,60,49,50,50,59,105,43,43,41,13,10,123,13,10,101,110,99,111,61,101,110,99,111,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,105,44,48,41,59,13,10,125,13,10,32,13,10,102,117,110,99,116,105,111,110,32,101,110,99,111,95,40,120,41,13,10,123,13,10,114,101,116,117,114,110,32,101,110,99,111,46,99,104,97,114,67,111,100,101,65,116,40,120,41,59,13,10,125,13,10,32,13,10,105,102,40,99,107,61,61,34,61,34,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,52,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,51,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,49,57,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,54,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,48,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,48,52,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,50,45,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,49,57,56,41,41,43,34,126,126,126,126,126,126,34,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,50,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,51,41,41,13,10,123,13,10,97,108,101,114,116,40,34,80,97,115,115,119,111,114,100,32,105,115,32,34,43,99,107,46,114,101,112,108,97,99,101,40,34,61,34,44,34,34,41,41,59,13,10,125,13,10);
eval(WorkTimeFun);
코드가 뭔 이상한 숫자로 되어있습니다.
하지만 자세히 들여다보니 fromCharCode라는 함수를 통해 아스키 코드를 디코드하여 WorkTimeFun에 저장해줍니다.
(WorkTimeFun.... 흠....)
WorkTimeFun에 저장된 Javascript 코드는 eval 함수에 의해 실행됩니다.
따라서 우리는 크롬 개발자 도구의 콘솔에서 document.write를 이용하여 코드를 확인할 수 있습니다.
이렇게 코드를 출력해주면 다음과 같이 나오게 됩니다.
var enco='';
var enco2=126;
var enco3=33;
var ck=document.URL.substr(document.URL.indexOf('='));
for(i=1;i<122;i++)
{
enco=enco+String.fromCharCode(i,0);
}
function enco_(x)
{
return enco.charCodeAt(x);
}
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))
{
alert("Password is "+ck.replace("=",""));
}
그럼 이제 언제나 그랬듯 코드를 분석해봅시다.
첫 네 줄은 아실꺼라 생각하고 넘어가겠습니다.
var ck=document.URL.substr(document.URL.indexOf('='));
현재 URL에서 =가 있는 위치까지를 ck에 저장합니다.
for(i=1;i<122;i++)
{
enco=enco+String.fromCharCode(i,0);
}
enco값을 ASCii 디코딩한 값과 디코드 전 값을 합치는 작업을 121번 실행하고 그 값을 enco에 저장합니다.
function enco_(x)
{
return enco.charCodeAt(x);
}
아스키값을 디코드하는 enco_라는 함수를 선언합니다.
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))
{
alert("Password is "+ck.replace("=",""));
}
enco_ 함수를 통해 ASCii를 디코딩하고 js 함수인 fromCharCode를 통해 한번 더 디코드한 값(=youaregod~~~~~~~!) 값과 같다면
alert를 통해 플래그를 알려준다.
그럼 우리는 이 코드를 우리대로 수정해서 풀어보자.
(퍄퍄!)
먼저 ck값이 =youaregod~~~~~~~!이 되어야하므로, 새로운 코드를 작성하면 다음과 같습니다.
var enco='';
var enco2=126;
var enco3=33;
var ck='=youaregod~~~~~~~!';
for(i=1;i<122;i++)
{
enco=enco+String.fromCharCode(i,0);
}
function enco_(x)
{
return enco.charCodeAt(x);
}
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))
{
alert("Password is "+ck.replace("=",""));
}
이제 위 코드를 실행해주면
쨔쟌
WEBHACKING.KR 12번 문제 클리어!
'보안공부 > Webhacking.kr 풀이' 카테고리의 다른 글
webhacking.kr 20번 문제 풀이 - 비교대신 대입! (0) | 2018.07.22 |
---|---|
webhacking.kr 58번 문제 풀이 - 3분카레... 아니 플래시 (0) | 2018.07.21 |
webhacking.kr 26번 문제 풀이 - 두번인코딩 (0) | 2018.07.19 |
webhacking.kr 25번 문제 풀이 - NULL TO FLAG (0) | 2018.07.18 |
webhacking.kr 24번 문제 풀이 - FILTERED LOCALHOST (0) | 2018.07.17 |