webhacking.kr - challenge 6
소스 보기를 눌러서 코드를 확인했다.
index.phps를 누르면 해당 페이지로 이동한다. 클릭을 했더니 소스코드가 나왔다.
<?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>
엄청 긴 것 같지만 사실 중요한 부분은 php 부분이다. php는 처음부분과 끝부분 이렇게 두 부분으로 삽이됐는데 먼저 처음 부분은 val_id와 val_pw를 초기화하고 각 변수를 base64로 인코드를 20번한다. 그리고 1부터 8까지 숫자가 있을 경우는 이를 모두 !, @, $, ^, &, *, (, )로 치환한다.
후반부의 php에서는 decode_id롸 decode_pw를 쿠키값으로 동일하게 초기화한다. 그리고 앞선 php의 순서를 정확히 반대로 뒤집어 디코드한다. 결과값이 admin으로 나오면 문제를 풀 수 있다.
그러면 admin을 위 php와 동일한 방식으로 인코딩해서 쿠키값으로 넣어주기만 하면 된다. admin을 20번 base64로 바꿔주는 게 문제인데 이건 webhacking.kr사이트의 기능을 이용하면된다. memo에 있는 텍스트창에 admin을 적고 <-base64를 20번 눌러주면 된다. 이후 문자열 치환 부분은 신경쓰지 않아도 되는데 어차피 디코드 과정을 거치기때문에 사실 하나 안하나 상관이 없기 때문이다. admin을 base64로 인코드를 끝냈다면 이제 이 값을 쿠키에 넣고 새로 고침을 하면 성공!
참고:
https://opentutorials.org/course/50/89
댓글
댓글 쓰기