반응형

php 의 느슨한 비교로 인해 발생하는 취약점이다.

== 비교에 대한 matrix는 아래와 같다.

이제 문제의 코드를 보겠다.

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

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

==비교를 하고 있으며 웹페이지에서  제출되는 값을 비교하여 참 거짓을 판별한다.

이때, 제출되는 payload를 보면, json형식으로 {key:value} 요롷게 전송되는 것을 볼 수 있다.

여기서 1234를 true로 전송해주면 상기의 표에 의해 비교했을때 true이므로 풀린다.

반응형

'wargame' 카테고리의 다른 글

LoS - zombie assassin  (0) 2023.08.27
phpreg  (0) 2023.08.27
tmitter  (0) 2023.08.26
Robot-only  (0) 2023.07.21
file-csp-1  (0) 2023.07.02

+ Recent posts