it 공부 일기 - 워게임 ctf 풀이 및 언어 강좌모음

hackctf Guess me 문제 풀이 본문

ctf.j0n9hyun.xyz

hackctf Guess me 문제 풀이

kimtong 2021. 1. 11. 16:10

Guess me 문제에 들어가보면은 

 

php 소스코드가 나오는것을 볼 수 있다.

만약에 php 를 자주사용해봤다면 바로 알겠지만 혹시 모른다면은

 

file_get_contents 와 extract 함수를 알고있다면 충분히 풀이가 가능하다.

 

extract 함수는 

www.php.net/manual/en/function.extract.php

 

PHP: extract - Manual

[New Version]This function is very useful for filtering complicated array structure.Also, Some integer bitmasks and invalid UTF-8 sequence detection are available.Code: $_GET,            INPUT_POST => $_POST,            INPUT_COOKIE => $_COOKIE

www.php.net

 

안에 들어가는 배열의 키 와 값을 변수로 만들어준다고 보면은 된다.

<?php 

    $arr = array(
    		"key"=>"helloworld"
    	   );
    extract($arr);
    echo $key;
?>

이런섹으로 "key" 이라는 이름에 helloworld라는 값이 있는 배열을

extract($arr); 이렇게 해버리면 

$key 라는 변수가 생성되면서 helloworld라는 값이 들어가게 된다.

 

그러면은 이제 다시 소스코드로 가보면

if (isset($guess)) {
        $secretcode = trim(file_get_contents($filename));
        if ($guess === $secretcode) {
          $flag = file_get_contents('flag.txt');
          echo "<p>flag is"." $flag</p>";

$guess 라는 변수가 없는데 $guess 변수를 체크하고

$guess 변수와 file_get_contents 함수로 불러온 $secretcode 변수와 비교하는것을 볼 수 있다.

 

그러면 extract 함수를 이용해서

$_GET 변수에 키과 값을 전달해야되는데

 

PHP 같은 경우

$_GET 변수는

 

url?hello=world

 

이런식으로 전달이 가능하다.

 

그리고 $secretcode 변수를 조작하기 위해서는 

$filename 을 조작해야된다.

왜냐하면 ?secretcode= 이런식으로 한다고해도 또 변수가 선언되기때문에 의미가 없다.

 

하지만 file_get_contents 라는 함수에서 $filename 이라는 변수를 받아 해당 파일을 불러오는데

만약에 없는 파일이면은 아무런 값이 반환되지 않아서 $filename 을 조작하면 $secretcode 라는 변수에는 아무런 값이 안들어가게 되는것이다.

(PHP 모르면 혼란스러운 문제)

그러면 이제

$guess 변수와 $secretcode 변수랑 똑같이 되기 위해서는

 

ctf.j0n9hyun.xyz:2030/?guess=&filename=

 

이런식으로 아무런 값을 넣지 않으면 FLAG 가 출력된다.

이 문제는 PHP 만 알고있으면 충분히 풀리는 문제이다. ͡~ ͜ʖ ͡° 

 

FLAG is HackCTF{3xtr4c7_0v3rr1d3ds_pr3vi0u5_kn0wn_v4r1abl35}

'ctf.j0n9hyun.xyz' 카테고리의 다른 글

hackctf 마법봉 문제 풀이  (0) 2021.01.13
hackctf Login 문제 풀이  (1) 2021.01.11
hackctf web / 문제 풀이  (0) 2020.12.12
hackctf Button 문제 풀이  (0) 2020.12.12
hackctf 보물 문제 풀이  (0) 2020.12.12