6번 문제를 클릭하면 계정 정보, index.phps 링크가 존재한다. 또한, 문제를 해결하기 위해 base64 인코딩 및 디코딩 힌트가 주어진다.


'index.phps' 링크를 클릭해 소스코드를 보면 base64 인코딩 및 디코딩으로 분류된다.


최초 페이지 접근 시 쿠키 값이 설정되어 있지 않으므로 'guest' 계정을 총 20회 base64 인코딩한다. 이후 인코딩 된 값에서 숫자를 특수 문자로 치환해 최종 쿠키 값으로 설정한다.

 

문제를 해결하기 위한 단서는 디코딩 부분에 있다. 디코딩된 'user', 'password' 쿠키 값이 'admin'이면 문제를 해결할 수 있다.



<?php

if(!$_COOKIE[user])
{
$val_id="guest";
$val_pw="123qwe";

for($i=0;$i<20;$i++)
{
$val_id=base64_encode($val_id);
$val_pw=base64_encode($val_pw);
}

$val_id=str_replace("1","!",$val_id);
$val_id=str_replace("2","@",$val_id);
$val_id=str_replace("3","$",$val_id);
$val_id=str_replace("4","^",$val_id);
$val_id=str_replace("5","&",$val_id);
$val_id=str_replace("6","*",$val_id);
$val_id=str_replace("7","(",$val_id);
$val_id=str_replace("8",")",$val_id);
$val_pw=str_replace("1","!",$val_pw);
$val_pw=str_replace("2","@",$val_pw);
$val_pw=str_replace("3","$",$val_pw);
$val_pw=str_replace("4","^",$val_pw);
$val_pw=str_replace("5","&",$val_pw);
$val_pw=str_replace("6","*",$val_pw);
$val_pw=str_replace("7","(",$val_pw);
$val_pw=str_replace("8",")",$val_pw);

Setcookie("user",$val_id);
Setcookie("password",$val_pw);
echo("<meta http-equiv=refresh content=0>");
}
?>

<html>

<head>
<title>Challenge 6</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>

<body>

<?

$decode_id=$_COOKIE[user];
$decode_pw=$_COOKIE[password];
$decode_id=str_replace("!","1",$decode_id);
$decode_id=str_replace("@","2",$decode_id);
$decode_id=str_replace("$","3",$decode_id);
$decode_id=str_replace("^","4",$decode_id);
$decode_id=str_replace("&","5",$decode_id);
$decode_id=str_replace("*","6",$decode_id);
$decode_id=str_replace("(","7",$decode_id);
$decode_id=str_replace(")","8",$decode_id);

$decode_pw=str_replace("!","1",$decode_pw);
$decode_pw=str_replace("@","2",$decode_pw);
$decode_pw=str_replace("$","3",$decode_pw);
$decode_pw=str_replace("^","4",$decode_pw);
$decode_pw=str_replace("&","5",$decode_pw);
$decode_pw=str_replace("*","6",$decode_pw);
$decode_pw=str_replace("(","7",$decode_pw);
$decode_pw=str_replace(")","8",$decode_pw);

for($i=0;$i<20;$i++)
{
$decode_id=base64_decode($decode_id);
$decode_pw=base64_decode($decode_pw);
}

echo("<font style=background:silver;color:black> HINT : base64 </font><hr><a href=index.phps style=color:yellow;>index.phps</a><br><br>");
echo("ID : $decode_id<br>PW : $decode_pw<hr>");

if($decode_id=="admin" && $decode_pw=="admin")
{
@solve(6,100);
}

?>

</body>
</html>

소스코드에서 확인한 대로 최초 접근 시 쿠키 값이 설정되어 있지 않으므로 'guest', '123qwe'를 base64 인코딩하여 쿠키 값으로 설정됐다.



아이디와 패스워드가 동일하므로 'admin' 문자열을 총 20회 base64 인코딩 및 숫자를 치환하는 파이썬 스크립트를 작성한다.


# admin_base64.py
# by daze

import base64

val_id="admin"

for i in range(0,20):

val_id = base64.b64encode(val_id)

val_id.replace("1","!")
val_id.replace("2","@")
val_id.replace("3","$")
val_id.replace("4","^")
val_id.replace("5","&")
val_id.replace("6","*")
val_id.replace("7","(")
val_id.replace("8",")")

print val_id

파이썬 스크립트를 실행하면 base64 인코딩 된 문자열이 생성된다.



인코딩 된 문자열을 'user', 'password' 쿠키 값으로 설정하면 6번 문제 클리어한다.



▶ WebHacking.kr 1번 문제 풀이

▶ WebHacking.kr 2번 문제 풀이

▶ WebHacking.kr 3번 문제 풀이

▶ WebHacking.kr 4번 문제 풀이

▶ WebHacking.kr 5번 문제 풀이

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유