====== 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 !