웹해킹 webhacking.kr Lv.6 / 6번 / - (cookie 편집, 암호화, 복호화)

Study-security/Web-Hack|2013. 7. 6. 03:13

  http://webhacking.kr/challenge/web/web-06/


6번 문제를 풀어봅시다.


6번문제에 접속 하면 아래와 같은 화면을 보게 됩니다.




무슨 내용인지 모르니 소스를 보도록 합시다. (Chorme 기준, 우측 클릭 후 페이지 소스 보기)

소스보기를 누르면 아래와 같은 코드가 보입니다.




index.phps 에 소스 내용이 있는듯 합니다.

webhacking.kr/challenge/web/web-06/index.phps 에 접속하여 소스를 보도록 합시다.

소스는 아래와 같습니다.


<html>
<head>
<title>Challenge 6</title>
</head>
<body>

<?

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>
</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(
"ID : $decode_id<br>");
echo(
"PW : $decode_pw<br>");



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


?>

<!--

index.phps

-->

</body>
</html>


1,2,3,4,5,6,7,8,9,0 을 각 !,@,#,$,%,^,&,*,(,) 으로 치환한 후 base64 방식으로 20번 인코딩 한다고 되어있습니다.


실제로, 화면의 id와 pw 의 내용을 20번 디코딩 해 보면 화면에 있는 user와 password쿠키의 내용이 보여집니다.


@solve 는 id와 pw가 admin이 되면 실행됩니다.



댓글()