はまやんはまやんはまやん

hamayanhamayan's blog

Warm Up [csictf 2020]

If you know, you know; otherwise you might waste a lot of time.
http://chall.csivit.com:30272

<?php

if (isset($_GET['hash'])) {
    if ($_GET['hash'] === "10932435112") {
        die('Not so easy mate.');
    }

    $hash = sha1($_GET['hash']);
    $target = sha1(10932435112);
    if($hash == $target) {
        include('flag.php');
        print $flag;
    } else {
        print "csictf{loser}";
    }
} else {
    show_source(__FILE__);
}

?>

hashが衝突するような文字列を入力すればいいが、元々と同じであるようなものはダメ。
ideoneでprint sha1(10932435112);をすると、0e07766915004133176347055865026311692244が得られる。
あっ…

Magic Hash

/?hash=aaroZmOkで抜ける。
こうすると最終的な比較は
if("0e66507019969427134894567494305185566735"=="0e07766915004133176347055865026311692244")
となり、PHPだとこれはTrueになる。
Type Jugglingというのがあり、PHPの比較は弱いことが知られている。
以上のような文字列比較だとどちらも浮動小数点表記として評価されて、0=0になってtrueになる。

Capture the flag

csictf{typ3_juggl1ng_1n_php}