Pratiquer les failles web

Introduction : Les tutoriaux qui expliquent comment exploiter des failles web sont multiples sur le net. Cependant, beaucoup de lecteurs se disent "Wow, j'aimerai bien le faire vraiment ! Ça serait cool...".
Ce tutorial est là pour ça.
Nous allons revoir dans un premier temps le principe d'une "faille web". Ensuite, nous verrons comment configurer un serveur apache sous windows pour tester nos connaissances en local. Enfin, nous réaliserons une petite application web vulnérable et nous exploiterons cette faille.
J'éstime que vous avez des connaissances en html/php, même si les notions sont expliquées.

Sommaire :


C'est quoi, une faille web ?

Une faille web, c'est une faille. Oui, d'accord, mais quel type de faille ? Et bien, tout simplement une faille présente dans une application web, donc une faille présente au niveau d'un site internet. Les failles sont majoritairement dues aux erreurs de programmation, ou bien à des oublis de sécurisation. Notez aussi que la faille peut être due à une mauvaise configuration du serveur qui se contente de distribuer les pages web après avoir interprêté le code PHP présent dans le fichier demandé.
C'est en exploitant ces bugs, ces failles web, que le hacker peut obtenir un accés partiel ou total du site. Il peut obtenir des informations de la base de donnée ou, encore, contrôler le contenu intégral du site, le modifier, supprimer des pages, en rajouter, et j'en passe.

Voici les principales failles présentes dans les applications web (Ce tutorial n'apprend pas à toutes les exploiter ! Il les énumères seulement...) :

Notez qu'il existe plusieurs autres failles peu connues, qui n'ont aucun nom, mais qui se trouvent facilement via des audits de sécurité.
La partie suivante nous montre comment installer un serveur web en local. Nous pourrons ainsi y développer nos applications web, y laisser des failles, et nous entraîner à les percer.


Installer un serveur web sous Windows

Dans cette partie, nous allons installer un serveur apache sur notre ordinateur. Nous aurons aussi PHP et MySQL, bien entendu (sinon, il n'y aurait aucun intérêt, étant donné que le html en lui-même ne permet pas l'exploitation de failles web).

Pour ma part, j'ai choisi WAMP : Windows Apache MySQL PHP. Pour ceux qui ne comprennent pas, WAMP est le trio infernal APACHE (serveur), MySQL (base de donnée) et PHP. Vous pouvez le télécharger aiésément à cette adresse : http://www.wampserver.com/download.php.
/!\ WAMP ne fonctionne pas sous Windows 98, Me. Si votre OS est inclu dans ceux concernés, je vous conseille EasyPHP, disponible à l'adresse http://www.easyphp.org, mais je ne détaillerai pas la suite de la configuration. Je vous laisserai donc mon mail en fin de tutorial si vous avez des questions. /!\
C'est fait ? Lancez l'exécutable, vous devriez avoir ce résultat :


Assistant d'installation de WAMP

Poursuivez l'installation, acceptez la license, puis vous vous trouvez ici :


Assistant d'installation de WAMP : choix du répertoire d'installation

On vous demande oû installer wamp. Si vous préférez choisir un autre chemin, faites. Mais, personnellement, j'ai laissé le chemin par défaut.
Continuez jusqu'à vous trouver ici :


Assistant d'installation de WAMP : choix de lancer le serveur au démarrage de l'ordinateur, ou non.

Il vous demande si vous choisissez de lancer le serveur WAMP au démarrage à l'ordinateur. Si vous êtes partants, cochez la case, et faites suivant. Ensuite, cliquez sur Install pour installer le serveur WAMP, puis patientez...
.......

C'est bon ? L'installation s'est terminée ? Vous devriez avoir cela comme résultat :


Assistant d'installation de WAMP : fin de l'installation.

Gardez bien coché l'option : "Launch WAMP5 now". Pour les anglophobes, cela veut dire "Lancer WAMP5 maintenant." Cliquez sur Finish. Voilà, notre serveur est installé !

Si votre vue est bonne, vous voyez cette icône dans le coin en bas à droite de votre écran :


Icône représentant wamp.

Cette icône signifie que les deux services (Apache + PHP et MySQL) sont lancés, et donc à l'écoute sur le port 80, comme tout serveur web. Mais il y a un seul problème, c'est que le serveur est en ligne, donc accessible depuis l'extérieur. Le mal ? C'est que quelqu'un de l'extérieur pourra probablement exploiter vos failles et contrôler votre ordinateur si possible. Passez le serveur hors ligne : Faites un clic gauche sur l'icône et cliquez sur "Passer hors ligne". Maintenant, vous devriez avoir cela :


Icône représentant wamp, hors ligne.

Parfait, votre serveur web est maintenant configuré. Vous pouvez y accéder à partir de l'adresse : http://localhost ou http://127.0.0.1. Vous tombez sur la page d'accueil de WAMP5 :


Page d'accueil de WAMP5.

Et, vous et moi, nous voyons :

"Aucun projet.
Pour en ajouter un nouveau, créez simplement un répertoire dans 'www'."

C'est ce que nous allons faire.
Rendons nous dans le dossier oû nous avons installé wamp5 (par défaut, C:\wamp), puis, dans \www. Créons un dossier nommé "faille", puis actualisons la page. Regardez :


Page d'accueil de WAMP5, avec un projet.

Si nous cliquons dessus, nous atterissons sur une page qui ne signifie pas grand chose, mais là n'est pas la question.
Passons à la partie suivante.


Pirater une application web

Nous voilà enfin dans la partie pratique. Nous allons réaliser une application web vulnérable aux injections SQL.
Pour commencer, nous allons donc configurer le serveur de sorte à ce qu'il ne filtre pas les quotes ('), doubles quotes (") et octets nuls (\0). Faites un clic gauche sur l'icône de WAMP en bas à droite, cliquez sur "Configuration PHP", puis rendez-vous sur magic quotes gpc. Si il y a un triangle noir qui pointe vers la droite, cela veut dire qu'il est actif. Cliquez dessus pour le desactiver. Dans la cas contraire, ne faites rien de plus.

Voilà, on a désactivé magic quotes gpc. Maintenant, on va dans phpMyAdmin pour créer une base de donnée et une table de test. Vous pouvez vous y rendre à l'adresse http://127.0.0.1/phpmyadmin/ (ou http://localhost/phpmyadmin/).

Creez une base de donnée nommée "test", puis exécutez en requête SQL :

CREATE TABLE `membre` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`login` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL
) ENGINE = innodb;

Cette requête SQL va créer une table 'membre' avec trois champs : id, login et password. Maintenant, toujours en requête SQL, exécutez :

INSERT INTO `test`.`membre` (
`id` ,
`login` ,
`password`
)
VALUES (
NULL , 'admin', 'MotDePasse'
);

Cette requête va insérer une nouvelle entrée dans la table, un nouveau "compte" membre, qui a pour login 'admin', et pour mot de passe 'MotDePasse'.

On en a fini côté base de donnée. Maintenant, on va créer notre page PHP vulnérable qui interagit avec la base de donnée. Pour cela, rendez-vous dans le dossier \www\faille (faille étant le dossier projet que nous avons créé. Faites une nouvelle page que vous appellerez "index.php", puis insérez-y le code suivant :

<?php
// Connexion à la base de donnée
mysql_connect("localhost","root",""); // Ce sont les identifiants par défaut sous WAMP
mysql_select_db("test");              // On choisit notre base de donné

// On vérifie si le membre à rempli le formulaire pour se connecter :
if(!empty($_POST['login']) && !empty($_POST['password']))
{
	/* On construit notre requête pour voir si le login et le mot de passe
	   sont présents dans la base de donnée. */
	$sql = "SELECT id FROM membre WHERE login='" . $_POST['login'] . "'".
	"AND password='" . $_POST['password'] . "'";
	
	/* On exécute la requête et on affiche l'erreur si la requête plante,
	ce qui nous permet de mieux comprendre pourquoi on a "merdé". */
	$req = mysql_query($sql) or die($sql."<br />".mysql_error());
	
	if(mysql_num_rows($req)) // Si le pseudo et le mot de passe existent
	{
		// Succés
		echo "Bienvenue dans la zone membre !";
		exit();
	}
	else
	{
		// Echec
		echo "Mauvais login ou mot de passe...";
		exit();
	}
}
// Sinon, on affiche le formulaire de connexion
?>
<form method="post" action="index.php">
	<p>Login : <input type="text" name="login" /><br />
	Pass  : <input type="password" name="password" /><br />
	<input type="submit" value="Connexion" /></p>
</form>

Fait ? Bien. Maintenant, il est temps de le tester. Rendez-vous donc à l'adresse http://localhost/faille. Vous pouvez désormais vous tester aux injections SQL. Mettez en login et en pass a' or 'a'='a, puis connectez-vous. Vous venez de réaliser une injection SQL :


Vous avez trompé le formulaire pour vous connecter.


Tout ce qu'il vous rester à faire, c'est suivre des tutoriaux et pratiquer, maintenant. Le tutorial touche à sa fin, merci d'avoir tout lu.

Geo <geo [point] 669 [at] gmail [point] com>