第4回CTF勉強会 | ksnctf

今日は4人しかこなかった… 火曜の8:45からってのがきつすぎるんかな… 31 Kangacha PHPで書かれた簡単なwebアプリケーションの問題. Gachaというボタンを押せば日本の戦艦の名前がランダムでリストに追加されていく. ソースコードも与えられているので読んでいく. if (isset($_POST['submit'])) { // Gacha if ($_POST['submit'] === 'Gacha') { // Yamato is ultra rare $ship[] = mt_rand(0, count($shipname)-2); $s = implode(',', $ship); $sign = hash('sha512', $salt.$s); setcookie('ship', $s); setcookie('signature', $sign); } // Clear if ($_POST['submit'] === 'Clear') { setcookie('ship', '', 0); setcookie('signature', '', 0); } header("Location: {$_SERVER['REQUEST_URI']}"); exit(); } このソースから, $_COOKIE['ship']に戦艦の番号の配列が, $_COOKIE['signature']にあらかじめ決められた$saltと戦艦番号のハッシュ値が格納される. // Check signature and read if (isset($_COOKIE['ship']) and isset($_COOKIE['signature']) and hash('sha512', $salt.$_COOKIE['ship']) === $_COOKIE['signature']) $ship = explode(',', $_COOKIE['ship']); else $ship = array(); ここで$_COOKIE['signature']のバリデーションを確認され, 不正であれば配列の中身が空になってしまう. ...

May 17, 2019 · 3 min