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}