늘모자란, 개발 :: [wargame.kr] Challenge 12 - type confusion

늘모자란, 개발

Simple Compare Challenge.

hint? you can see the title of this challenge.

 :D


type.. 사실 PHP같은 스크립트 기반 언어에서 type을 신경써본적이 '거의'없다. 무슨 문제일지 궁금하긴하다.

 <?php
 if (isset($_GET['view-source'])) {
     show_source(__FILE__);
    exit();
 }
 if (isset($_POST['json'])) {
     usleep(500000);
     require("../lib.php"); // include for auth_code function.
    $json = json_decode($_POST['json']);
    $key = gen_key();
    if ($json->key == $key) {
        $ret = ["code" => true, "flag" => auth_code("type confusion")];
    } else {
        $ret = ["code" => false];
    }
    die(json_encode($ret));
 }

 function gen_key(){
     $key = uniqid("welcome to wargame.kr!_", true);
    $key = sha1($key);
     return $key;
 }
?>

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
        <script src="./util.js"></script>
    </head>
    <body>
        <form onsubmit="return submit_check(this);">
            <input type="text" name="key" />
            <input type="submit" value="check" />
        </form>
        <a href="./?view-source">view-source</a>
    </body>
</html>



일단 gen_key는 uniqid기때문에 내가 어떤값을 넣어서 보낸다고 해도 별로 소용이 없다.
그래서 다른 방법을 찾아야 할 것 같아보였다. 무조건 값을 참으로 만들어야 하는데 $json->key를 그대로 사용하고 있다.
json은 true와 false의 경우 "true"나 "false"처럼 string으로 캐스팅하지 않고 그대로 사용하고, 형을 보존해서 보내기때문에

key에 true 값을 줘서 보내면 문제를 패스하게 된다
요컨데 이런식이다

json={"key":true}




2016/06/08 15:56 2016/06/08 15:56