====== HackingWeek 2014 - Web-4 ====== Code source disponible pour cette épreuve : https://repo.zenk-security.com/hackingweek2014_ctf/web4.zip Le but de cette épreuve est de se retrouver authentifier sur la page ''auth.php'', pour cela, il faut avoir un cookie valide, mais c'est quoi un cookie valide ? (isset($_COOKIE['PHPSESSID2'])) or die("Oops! This page appears broken - Access error."); $user = User::CreateFromCookie($_COOKIE['PHPSESSID2']); if (($user == null) OR ($user->IsAdmin() === false)) die("Oops! This page appears broken - Access error."); echo "Success! The password is \"" . $secretpassword4 . "\"."; Allons voir la fonction ''CreateFromCookie''. public static function CreateFromCookie($cookie) { global $hash_secret; $temp = explode(urlencode(" "), $cookie, 2); if (count($temp) != 2) return null; $cookie = $temp[0]; $sign = $temp[1]; if (hash_hmac('sha256', $cookie, $hash_secret) != $sign) return null; $cookie = urldecode($cookie); $cookie = base64_decode($cookie); $cookie = explode("::", $cookie, 4); if (count($cookie) != 4) return null; $_id = htmlspecialchars($cookie[0], ENT_QUOTES); $_username = htmlspecialchars($cookie[1], ENT_QUOTES); $_password = htmlspecialchars($cookie[2], ENT_QUOTES); $_admin = htmlspecialchars($cookie[3], ENT_QUOTES); $user = new User($_id, $_username, $_password, $_admin); return $user; } Chaque cookie est signé avec un ''hmac'' en ''sha256'' du cookie avec une clef inconnu. On connait déjà un couple ''$cookie'' et le résultat du ''hmac'', plus qu'à faire un bête bruteforce par dictionnaire. Ce fichier nous donne ''phantom'' comme ''$hash_secret'', on a trouvé la clef. Reste plus qu'à chiffrer un compte :) On se connecte avec ''tapz:tapz'' et le flag est à nous !