Post

my_secret

my_secret



1
2
3
4
5
can you see my secret?

http://web.h4ckingga.me:10010/

made by D0RI


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    class obj{
        var $pass = "I_WANT_FLAG";
        var $key = "TOP SECRET";
    }

    $obj  = new obj;
    $sol = $_GET["sol"];
    $obj = unserialize($sol);

    if(isset($obj->pass)){
        if($obj->key == I_am_robot){
            echo "oh! you are access my secret<br>";
            echo "<h1>".$flag."</h1>";
        }
    }
?>






Solution



코드 상에서 내 입력 값을 대놓고 unserialize를 하므로 obj 클래스를 serialize하여 문제에서 원하는 값을 보내면 된다.


serialize
php.net/manual/en/function.serialize.php
O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}


repl에서 obj 클래스를 serialize하면 값이 나오므로 그 값에서 문제 상에서 원하는 값으로 변경 후 보내주면 된다.

근데 문제에서 I_am_robot이 문자열이 아니라 변수이다.

이 값은 어디서 확인하나면 /robots.txt에서 확인할 수 있다.
0e로 시작한다. 따라서 0을 넣어주면 통과한다.


그러므로 serialize 한 값에서 key 값으로 0을 넣어주면 플래그가 나온다.






This post is licensed under CC BY 4.0 by the author.