문제를 클릭하면 위 처럼 검정 화면에 view-source 링크, 그리고 ID와 PW가 적혀있는것을 확인할 수 있습니다. 문제를 어느정도 풀어보신 분이라면 위의 계정을 ADMIN으로 바뀌면 풀리는 문제겠구나~ 할 수 있을겁니다. 일단 확실하게 확인하기 위해 소스를 확인해보겠습니다.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
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,time()+86400,"/challenge/web-06/");
Setcookie("password",$val_pw,time()+86400,"/challenge/web-06/");
echo("<meta http-equiv=refresh content=0>");
exit;
}
?>
<html>
<head>
<title>Challenge 6</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<?php
$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("<hr><a href=./?view_source=1 style=color:yellow;>view-source</a><br><br>");
echo("ID : $decode_id<br>PW : $decode_pw<hr>");
if($decode_id=="admin" && $decode_pw=="nimda"){
solve(6);
}
?>
</body>
</html>
쿠키에 유저 값이 없으면 val_id에 guest, val_pw에 123qwe를 넣고 각각 20번씩 base64 인코딩을 해줍니다. 그 뒤에 인코딩된 문자열을 가지고 1~8을 !~*로 변경하는 간단한 작업을 거친 뒤 해당 값을 쿠키값으로 세팅을 합니다. 그 후에 페이지를 로드하면서 위에서 했던 작업과 정확히 반대되는 작업을 진행하고 해당 작업의 결과물을 ID와 PW로 출력해줍니다. 그리고 그 밑에 디코딩된 id와 pw가 각각 admin, nimda면 문제가 풀리는 코드입니다.
어쩃든 최종 결과값이 admin이랑 nimda면 풀리는 문제인데 코드의 윗부분을 살펴보면 쿠키값에 user가 세팅되어 있지 않을 경우에만 위쪽의 코드가 동작하고 user가 세팅되어 있을경우 아래에 있는 디코딩 부분만 동작하는 것을 확인할 수 있습니다. 그럼 결국 저희는 admin과 nimda를 위의 방식대로 인코딩한 값을 구해서 쿠키에 넣어주면 문제를 풀 수 있습니다.
풀이 방법이야 간단하겠지만 저는 Gnuboard 1-Day 떄문에 쓰고 있는 웹서버가 있기 때문에 해당 서버에 위의 코드를 그대로 긁어서 살짝 수정해서 admin, nimda의 인코딩 결과 값을 출력하게 만들어줬습니다. 그리고 그 값 그대로 긁어서 쿠키에 넣어서 간단하게 풀 수 있었습니다. 아래가 제가 풀이에 사용한 코드입니다.
<?php
$val_id="admin";
$val_pw="nimda";
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);
echo '<p>user is<br>'.$val_id.'</p>';
echo '<p>password is<br>'.$val_pw.'</p>';
$decode_id=$val_id;
$decode_pw=$val_pw;
$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>PW : $decode_pw<hr>");
?>
끝!
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-19 (0) | 2019.12.02 |
---|---|
[Webhacking.kr] old-10 (0) | 2019.10.29 |
[Webhacking.kr] old-54 (0) | 2019.10.22 |
[Webhacking.kr] old-26 (0) | 2019.10.22 |
[Webhacking.kr] old-25 (0) | 2019.10.22 |