minhui study

Webhacking.kr 6번 본문

Hacking/Webhacking.kr

Webhacking.kr 6번

minhui 2020. 3. 2. 20:29

Challenge 06 - 100 Points

 

처음에는 다음과 같은 화면이 뜬다.

일단 코드부터 살펴보자

<?php
include "../../config.php";
if(
$_GET['view_source']) view_source();
if(!
$_COOKIE['user']){  // user라는 쿠키값이 존재하지 않으면
  
$val_id="guest";  
  
$val_pw="123qwe"// val_id와 val_pw값을 각각 guest와 123qwe로 저장한다.
  for(
$i=0;$i<20;$i++){
    
$val_id=base64_encode($val_id);
    
$val_pw=base64_encode($val_pw);
  }  // val_id와 val_pw 값을 20번 인코딩한다.
  
$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);
// str_replace함수를 통해 val_id와 val_pw 값을 특정 기호로 치환한다.
  
Setcookie("user",$val_id,time()+86400,"/challenge/web-06/");
  
Setcookie("password",$val_pw,time()+86400,"/challenge/web-06/");

// 각각 치환된 값을 user와 password쿠키값에 저장하고 해당 쿠키값은 24시간동안 저장된다.
  echo(
"<meta http-equiv=refresh content=0>");
  exit;
}
?>

다음과 같이 edit this cookie를 통해 실제 쿠키값에 인코딩된 굉장히 복잡한 값이 있는 것을 확인할 수 있다.

(오른쪽 쿠키모양을 누르면 된다. 쉽게 다운받을 수 있다.)

나머지 코드를 마저 해석해보자

<?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);
// 위의 코드와 반대로 str_replace함수를 통해 기호를 특정 숫자로 치환한다.
for(
$i=0;$i<20;$i++){
  
$decode_id=base64_decode($decode_id);
  
$decode_pw=base64_decode($decode_pw);
}
// decode_id와 decode_pw를 20번 디코딩한다.
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"){

// decode_id값이 admin이고 decode_pw값이 nimda이면 문제해결
  
solve(6);
}
?>

 

그렇다면 문제가 해결되기 위해서는 user와 password 쿠키값에 admin과 nimda가 20번 인코딩된 값을 넣어주어야 한다.

직접 인코딩을 20번 하기 힘드므로 아래 사이트에서 다음과 같이 코드를 입력해서 출력해보면 기호가 없으므로 따로 치환해줄 필요없이 그 값을 복사하여 $id값은 user에 $pw값은 password에 쿠키값을 넣어주면 문제가 해결된다.

http://www.writephponline.com/

 

WriteCodeOnline - PHP | write and run php code online

Write PHP Online is an online code editor helps you to write and test run your php code online from your browser anywhere, anytime.

www.writephponline.com

'Hacking > Webhacking.kr' 카테고리의 다른 글

[ Wargame.kr ] md5 password  (0) 2020.03.22
Webhacking.kr 23번  (0) 2020.02.18
Webhacking.kr 58번  (0) 2020.02.18
Webhacking.kr 47번  (0) 2020.02.16
Webhacking.kr 32번  (0) 2020.02.15
Comments