Description

Category: Web

Source: wargame.kr

Points: 247

Author: Jisoon Park(js00n.park)

Description:

JUST COMPARE ONLY.

with the other value :D

Write-up

비교만 한다고 한다. 문제 코드가 주어지니 조금 더 살펴보도록 하자.

<?php
    if (isset($_GET['view-source'])) {
         show_source(__FILE__);
         exit();
    }

    if (isset($_GET['v1']) && isset($_GET['v2'])) {
        sleep(3); // anti brute force

        $chk = true;
        $v1 = $_GET['v1'];
        $v2 = $_GET['v2'];

        if (!ctype_alpha($v1)) {$chk = false;}
        if (!is_numeric($v2) ) {$chk = false;}
        if (md5($v1) != md5($v2)) {$chk = false;}

        if ($chk){
            include("../lib.php");
            echo "Congratulations! FLAG is : ".auth_code("md5_compare");
        } else {
            echo "Wrong...";
        }
    }
?>
<br />
<form method="GET">
    VALUE 1 : <input type="text" name="v1" /><br />
    VALUE 2 : <input type="text" name="v2" /><br />
    <input type="submit" value="chk" />
</form>
<br />
<a href="?view-source">view-source</a>

알파벳으로만 이루어진 v1과 숫자로만 이루어진 v2를 찾아야 하는데, 둘의 md5 hash가 같으면 된다고 한다.

MD5가 취약한 것으로 소문나있긴 하지만 임의의 충돌쌍을 그렇게 쉽게 찾을 수 있을 것 같지는 않다. 소스 코드를 좀 더 유심히 살펴보면, hash의 비교 연산자가 !==가 아닌 !=임을 알 수 있다.

type collision을 이용한 문제로 생각된다. type collision을 활용하려면, digest가 "0e"로 시작하고, 이후의 값들은 모두 숫자로 이루어져 있으면 된다.

간단히 코드를 작성하여 찾으려고 해보았으나, 생각보다 시간이 오래 걸려 검색을 통해 알아보았다. 검색창에 md5 0e까지만 입력을 하자 md5 beggining with 0e라는 추천 검색어가 보였고(ㅎㅎㅎ), 이를 이용해서 원했던 입력값들인 240610708QNKCDZO를 쉽게 찾을 수 있었다.

찾아낸 값들을 넣으면 flag를 얻을 수 있다.

Flag : 242af79b3c0ce74de3ed7769f9f781374a52a063

'writeups > Web' 카테고리의 다른 글

php? c?  (0) 2019.11.25
md5 password  (0) 2019.11.25
login with crypto! but..  (0) 2019.11.25
login filtering  (0) 2019.11.25
fly me to the moon  (0) 2019.11.25

+ Recent posts