CTF

[Webhacking.kr]Challenge 6 Writeup

채영채영 2023. 4. 5. 15:34

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

 

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

 

webhacking.kr

다 썼는데 쓰레기같은 학교 네트워크가 내 정성스러운 writeup을 날렸다.
푸는 과정을 다 남겼는데, already pwned 가 떠서 이제 과정을 ... 실시간으로 적어내기가 어렵다. 그래도 문제에서 중요한 부분을 .. 다시 적어보겠다. 

<?php
include "../../config.php";
if($_GET['view_source']) view_source();
if(!$_COOKIE['user']){
  $val_id="guest"; //1
  $val_pw="123qwe";
  for($i=0;$i<20;$i++){
    $val_id=base64_encode($val_id); //2
    $val_pw=base64_encode($val_pw);
  }


  Setcookie("user",$val_id,time()+86400,"/challenge/web-06/"); //3
  Setcookie("password",$val_pw,time()+86400,"/challenge/web-06/");

  exit;
}
?>

 
<?php
$decode_id=$_COOKIE['user']; 
$decode_pw=$_COOKIE['password'];


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


if($decode_id=="admin" && $decode_pw=="nimda"){ //5
  solve(6);

불필요한 코드는 날리고, 문제 해결에 필요한 코드만 남겼다. 
1. 초기 id : guest , pw : 123qwe
2. id 와 pw 각각 base64 20번 encode
3. $val_id를 user, $val_pw를 password로 쿠키 설정
4.  id 와 pw 각각 base64 20번 decode
5. id = admin, pw = nimda 일 때 SOLVE

즉, 3번에서의 user 가 admin을 20번 encode한 것, password에 nimda를 20번 encode한 것을 넣으면 된다!

encode를 온라인상에서 손수 20번 할 수 있지만, python으로 코드를 작성해서 풀어보겠다. 

코드 설명

그럼 이 코드를 가지고 cookie 값을 수정해 보겠다. 앞의 b' ~ 와 뒤의 ~' 를 제외해야함을 주의하자. 

수정하고,  새로고침을 하면 solved메시지가 뜰 것이다.