suninatas-WEB05
주어진 사이트로 이동하게 되면 다음과 같은 화면이 뜬다.
<!DOCTYPE html>
<html>
<head>
<title>Game 05</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" href="/static/img/game.ico" />
</head>
<body onload="init();">
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<form name="frm" method="post" action="./web05.asp">
<table width="250" cellpadding="0" cellspacing="0" align="center">
<tr height="30">
<td colspan="2" width="100%" class="table_top" align="right">
<input type="button" name="main_btn" value="main" style="width: 60" onclick="location.href = '/'"> <input type="button" name="main_btn" value="Back" style="width: 60" onclick="history.back()"></td>
</tr>
<tr height="30" class="table_main">
<td width="200" align="center" bgcolor="cccccc"><font size="2"><input name="password" value="" style="width:180"></td>
<td width="50" align="center" bgcolor="cccccc" align="center">
<button type="submit">Check</button></td>
</tr>
<tr height="30" class="table_top">
<td colspan="2">
<script>
eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('g l=m o(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'a\',\'b\',\'c\',\'d\',\'e\',\'f\');p q(n){g h=\'\';g j=r;s(g i=t;i>0;){i-=4;g k=(n>>i)&u;v(!j||k!=0){j=w;h+=l[k]}}x(h==\'\'?\'0\':h)}',34,34,'||||||||||||||||var|result||start|digit|digitArray|new||Array|function|PASS|true|for|32|0xf|if|false|return'.split('|'),0,{}))
</script>
<b>Check Key Value</b>
</td>
</tr>
<tr>
<td colspan="2" align="center"></td>
</tr>
</table>
</form>
</body>
</html>
<script>
function init(){
document.frm.password.value = "";
document.frm.password.focus();
}
</script>
<!--Hint : 12342046413275659 -->
<!-- M@de by 2theT0P -->
관리자 모드에서 볼 수 있는 코드이다.
여기서 주어진 힌트는 12342046413275659이다.
이 숫자를 빈칸에 넣고 check를 해보면 정답을 얻을 수 없다.
또 다른 힌트를 얻기 위해서 코드를 보면
eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('g l=m o(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'a\',\'b\',\'c\',\'d\',\'e\',\'f\');p q(n){g h=\'\';g j=r;s(g i=t;i>0;){i-=4;g k=(n>>i)&u;v(!j||k!=0){j=w;h+=l[k]}}x(h==\'\'?\'0\':h)}',34,34,'||||||||||||||||var|result||start|digit|digitArray|new||Array|function|PASS|true|for|32|0xf|if|false|return'.split('|'),0,{}))
길게 암호화된 코드를 확인할 수 있다.
UnPacker
eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(0(){4 1="5 6 7 8";0 2(3){9(
matthewfl.com
위 사이트를 이용해서 암호화된 코드를 복호화해준다.
var digitArray=new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
function PASS(n)
{
var result='';
var start=true;
for(var i=32;
i>0;
)
{
i-=4;
var digit=(n>>i)&0xf;
if(!start||digit!=0)
{
start=false;
result+=digitArray[digit]
}
}
return(result==''?'0':result)
}
복호화를 하면 얻을 수 있는 코드이다.
PASS 함수에 숫자 n을 넣어주어야한다.
콘솔 창을 이용해본다.
콘솔 창에 함수를 입력해준 뒤에 힌트로 주어진 숫자를 함수에 넣어 입력해준다.
그렇게 해서 얻은 숫자를 빈칸에 넣어준다.
빈칸에 넣어주면 다음과 같이 정답을 얻을 수 있다.