603 tutoriels en ligne

Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Google Analytics

Tutoriel DVWA : Le guide pour hacker légalement

Temps de lecture estimé : 11 minutes
Accueil Sécurité Tutoriel DVWA : Le guide pour hacker légalement

Vous avez déjà eu ce petit frisson en entendant parler de “failles XSS”, “injection SQL” ou “pentest”, sans trop savoir par où commencer… et sans vouloir faire n’importe quoi. Bonne nouvelle : il existe un outil parfait pour apprendre proprement, en local, et surtout sans risque. Son nom est un peu provocateur, et c’est volontaire. DVWA, pour Damn Vulnerable Web Application.

DVWA est un terrain d’entraînement conçu exprès pour vous montrer comment les failles web fonctionnent, et surtout comment les éviter. C’est comme une salle de sport… mais pour votre cerveau de développeur.

  • Comprendre à quoi sert DVWA et comment l’utiliser sans danger, pour apprendre la sécurité web de manière légale et sereine.
  • Mettre en place un environnement d’entraînement en local et choisir les bons réglages pour progresser sans se perdre ni se décourager.
  • Développer des réflexes concrets pour repérer les failles les plus courantes et s’entraîner efficacement avec des exercices simples.

Dans ce tutoriel, je vous guide pas à pas, en partant de zéro, avec des explications simples, des exemples concrets, et une vraie méthode d’entraînement. L’idée, ce n’est pas de “jouer au hacker”, c’est de comprendre la sécurité web pour coder plus proprement, plus sereinement, et plus pro grâce à DVWA.

DVWA : qu’est-ce que c’est exactement ?

DVWA signifie Damn Vulnerable Web Application. En français, ça donne quelque chose comme “l’application web sacrément vulnérable”. Le nom est volontairement direct : DVWA est un site web rempli de failles de sécurité… mais des failles mises exprès.

C’est une application PHP qui tourne avec une base de données MySQL (ou MariaDB). Une fois lancée, elle ressemble à un petit site web avec un menu et plusieurs pages. Et dans ces pages, vous trouverez des vulnérabilités très connues du monde réel : des failles XSS, des injections SQL, des problèmes de contrôle d’accès, des uploads dangereux, du CSRF, etc.

Ce n’est donc pas un “jeu” au sens classique. C’est un laboratoire. Un environnement dans lequel vous avez le droit de tester, d’échouer, de recommencer, et surtout de comprendre. DVWA est très utilisé par les débutants en cybersécurité, mais aussi par des développeurs web qui veulent apprendre à sécuriser leurs applications, ou réviser les bases de l’OWASP Top 10.

Et la vraie force de DVWA, c’est que ce n’est pas un outil théorique. Vous n’êtes pas en train de lire une définition dans un cours. Vous êtes face à un vrai comportement de code vulnérable. Vous voyez les effets. Vous voyez les erreurs. Et vous apprenez à parler le langage de la sécurité web.

À quoi sert DVWA, concrètement ?

DVWA sert à apprendre la sécurité web en conditions réelles, mais dans un cadre légal. En pratique, il vous aide à comprendre comment une faille apparaît, comment elle se détecte, et pourquoi elle est dangereuse.

La plupart des failles ne viennent pas de “magie noire”. Elles viennent d’une chose très simple : l’application fait trop confiance à l’utilisateur. Un champ de formulaire, un paramètre d’URL, un cookie, un fichier uploadé… Tout ça, ce sont des points d’entrée. Et quand on ne filtre pas, ou qu’on ne contrôle pas correctement, l’utilisateur peut faire des choses non prévues. Parfois sans mauvaise intention. Parfois avec beaucoup d’imagination.

DVWA sert aussi à apprendre à se protéger. Et ça, c’est important : un pentest sérieux n’est pas une démonstration de force. C’est une démarche de prévention. Le but final, c’est toujours de corriger.

Si vous gérez un site, si vous développez une application, ou même si vous proposez des formations, DVWA vous donne une vision plus claire des dangers. Et à partir du moment où vous voyez ces dangers en vrai, vous codez différemment. Votre cerveau active une nouvelle couche de vigilance.

Comment fonctionne DVWA ?

DVWA est une application web PHP. Cela veut dire qu’elle tourne sur un serveur web (souvent Apache), qu’elle exécute du code PHP côté serveur, et qu’elle stocke certaines données dans une base MySQL/MariaDB.

Quand vous l’installez, vous avez donc besoin d’un environnement qui fournit : un serveur Apache, un interpréteur PHP, et une base de données MySQL.

Ensuite, DVWA vous propose une interface web. Vous vous connectez (identifiants par défaut), vous choisissez votre niveau de sécurité, et vous accédez aux modules de vulnérabilités.

Chaque module illustre une faille. Par exemple, dans un module XSS, l’application va prendre une donnée utilisateur, et l’afficher sans filtrage. Dans un module SQL injection, elle va construire une requête SQL en concaténant une entrée utilisateur sans protection. Et là, vous voyez la différence entre “le monde parfait” et “la réalité”.

C’est un peu comme apprendre à conduire sur une route d’entraînement. Vous pouvez vous tromper, faire caler le moteur, recommencer… sans risquer de casser une vraie voiture sur l’autoroute.

Avant de commencer : une règle très importante

DVWA est vulnérable par dessein. Donc si vous le mettez sur un serveur accessible depuis Internet, vous offrez un buffet à volonté à n’importe qui.

DVWA doit toujours être utilisé en local, en VM isolée, ou dans un container. Jamais sur un hébergement public. Jamais. Même “juste pour tester”.

Je préfère le dire clairement, parce que ça arrive plus souvent qu’on ne croit : des gens installent DVWA sur un petit VPS, se disent “personne ne va tomber dessus”… et trois jours après, ils se demandent pourquoi leur serveur fait du minage de cryptomonnaie.

DVWA, c’est un terrain d’entraînement. Pas un site à exposer.

Installer DVWA en local : méthode pas à pas pour débutant

Il existe plusieurs façons d’installer DVWA. La plus simple pour un débutant dépend de votre environnement. L’idée générale reste la même : vous devez obtenir DVWA, et lui fournir Apache/PHP/MySQL.

Je vais vous présenter deux approches : une approche “classique” avec un pack serveur local, et une approche “propre” avec Docker.

Option 1 : Installer DVWA avec un serveur local (MAMP / XAMPP / WAMP)

Cette méthode est parfaite si vous aimez voir les dossiers, toucher aux fichiers, et comprendre ce qui se passe. Vous installez un pack qui contient tout ce qu’il faut : Apache + PHP + MySQL.

Sur Mac, MAMP est souvent utilisé. Sur Windows, XAMPP et WAMP sont populaires. Sur Linux, vous pouvez faire votre propre stack, mais pour un débutant, un pack est plus rapide.

Une fois votre pack installé, vous démarrez Apache et MySQL depuis l’interface.

Ensuite, vous téléchargez DVWA depuis Github, puis vous placez le dossier dans votre répertoire web local. Sur MAMP, ce sera souvent un dossier nommé htdocs. Sur XAMPP, également.

Préparer l’environnement (MAMP)

  • Lancez MAMP.
  • Vérifiez que les serveurs Apache et MySQL sont bien allumés (voyants verts).

Télécharger et placer DVWA

  • Téléchargez l’archive sur le GitHub officiel de DVWA.
  • Décompressez le dossier et renommez-le simplement dvwa.
  • Déplacez ce dossier dans le répertoire racine de MAMP
  • Dans PhpMyAdmin, créer une nouvelle base de données : dvwa
  • Copiez config/config.inc.php.dist vers config/config/config.inc.php et configurez-le selon votre environnement.

Ouvrez le fichier config.inc.php avec un éditeur de texte (Notepad++, VS Code, TextEdit). Modifiez les lignes suivantes pour correspondre aux identifiants par défaut de MAMP :

$_DVWA[ 'db_server' ]   = getenv('DB_SERVER') ?: 'localhost';
$_DVWA[ 'db_database' ] = getenv('DB_DATABASE') ?: 'dvwa';
$_DVWA[ 'db_user' ]     = getenv('DB_USER') ?: 'root';
$_DVWA[ 'db_password' ] = getenv('DB_PASSWORD') ?: 'root';
$_DVWA[ 'db_port']      = getenv('DB_PORT') ?: '3306';

DVWA possède une page de configuration accessible depuis le navigateur. Quand vous y allez, DVWA vous indique souvent ce qui manque : permissions, base inexistante, paramètres incorrects… Ce n’est pas grave. C’est même fait pour.

Vous cliquez ensuite sur le bouton qui initialise la base de données. DVWA crée ses tables. Et voilà : vous pouvez vous connecter.

DVWA

Les identifiants par défaut sont généralement admin / password.

Setup DVWA

Cliquez sur Create / Reset database. Et l’installation est prête !

Quand vous êtes connecté, prenez une minute pour explorer le menu. Vous verrez plusieurs modules, et un endroit très important : le réglage du niveau de sécurité.

Option 2 : Installer DVWA avec Docker (simple et propre)

Docker est souvent plus “propre”, car tout est isolé. Vous ne touchez pas à votre installation PHP locale. DVWA tourne dans son coin. Et quand vous en avez fini, vous pouvez tout supprimer facilement.

Le principe est simple : vous lancez DVWA via un conteneur, et il démarre avec tout ce qu’il faut.Vous aurez besoin d’installer Docker Desktop. Une fois installé, vous pouvez lancer DVWA avec une image existante.

Je vous donne ici un exemple minimaliste, très courant :

docker run --rm -it -p 8080:80 vulnerables/web-dvwa

Ensuite, vous ouvrez votre navigateur et vous allez sur : http://localhost:8080

Si tout va bien, vous voyez DVWA. Selon l’image Docker utilisée, vous devrez peut-être initialiser la base via l’interface DVWA, comme dans la méthode classique.

L’avantage de Docker, c’est que vous évitez les problèmes du type “mon PHP local n’est pas la bonne version” ou “mon Apache ne veut pas démarrer”.

Bien configurer DVWA : modes et réglages à connaître

DVWA propose plusieurs réglages, mais un seul est vraiment central : le niveau de sécurité.

Menu DVWA

Les niveaux de sécurité DVWA

Dans DVWA, vous pouvez changer la difficulté, et ce n’est pas juste un bouton cosmétique. Ce réglage modifie réellement la façon dont le code se protège.

Vous trouverez généralement les niveaux suivants :

  • Low : aucune protection, ou presque. C’est le niveau parfait pour comprendre la faille. Tout est “ouvert”, et vous voyez immédiatement l’impact.
  • Medium : quelques protections apparaissent. Parfois un filtrage partiel, parfois des vérifications naïves. C’est un niveau très intéressant, parce qu’il ressemble à ce qu’on voit souvent en vrai : “on a essayé de protéger, mais pas complètement”.
  • High : la protection est plus sérieuse, et les techniques simples ne marchent plus. Vous commencez à réfléchir autrement.
  • Impossible : normalement, la vulnérabilité est corrigée correctement. C’est un niveau “exemple de bonne pratique”.
Niveau de difficulté DVWA

Un conseil simple : commencez toujours en Low. C’est là que vous apprendrez le plus vite. Ensuite, remontez progressivement. Le but n’est pas de souffrir. Le but est de comprendre.

Les options PHP à surveiller

Selon votre installation, DVWA peut vous dire qu’il manque certaines options PHP. Par exemple, DVWA peut utiliser des fonctionnalités comme GD (images) ou la configuration des sessions.

La page de setup DVWA vous montre souvent un état “OK / missing”. Ne paniquez pas. Prenez simplement le temps de corriger ce qui bloque.

Les outils dont vous aurez besoin pour utiliser DVWA

DVWA peut s’utiliser uniquement avec un navigateur. Mais si vous voulez vraiment apprendre, vous aurez envie d’outils supplémentaires.

Il y a les outils “visuels” et les outils “terminal”.

Dans les outils visuels, l’inspecteur du navigateur suffit déjà pour débuter. Vous pouvez voir le HTML, tester des paramètres, observer les requêtes.

Ensuite, il y a Burp Suite, qui est un proxy. Le principe est simple : vous faites passer votre trafic web à travers Burp, et vous pouvez observer et modifier les requêtes. C’est très formateur.

Côté terminal, vous aurez souvent besoin de curl, parce que c’est un outil simple qui permet d’envoyer des requêtes HTTP et de tester rapidement.

Enfin, pour certains exercices, des outils comme sqlmap peuvent exister, mais je recommande de ne pas démarrer avec ça. Pourquoi ? Parce que sqlmap peut automatiser tellement de choses que vous n’apprenez pas vraiment le mécanisme. Vous apprenez juste à lancer un outil. Ce n’est pas le but au début.

Pour aller plus loin : Les outils essentiels de Pentesting

Comment s’entraîner efficacement avec DVWA

Avant de vous donner des exemples, je veux vous donner une méthode simple.

Quand vous testez une faille, vous devez toujours répondre à trois questions :

  1. Qu’est-ce que l’application attend ?
  2. Qu’est-ce que je lui donne ?
  3. Qu’est-ce qu’elle en fait vraiment ?

Si vous avez ces trois questions en tête, vous progressez vite.

Et une règle encore plus simple : testez doucement. Ne cherchez pas “le hack ultime” dès la première minute. Souvent, une faille se découvre avec un petit test basique.

Exemple débutant : découvrir une faille XSS avec DVWA

Le XSS, c’est quand l’application affiche une donnée utilisateur sans la nettoyer, et que cette donnée devient du code exécuté dans le navigateur.

Dans DVWA, vous avez généralement un module XSS reflected ou stored.

  • Reflected veut dire que le contenu est renvoyé immédiatement dans la réponse.
  • Stored veut dire que le contenu est enregistré, puis affiché plus tard.

Pour débuter, le reflected est très bien. Vous allez dans le module XSS (Reflected). Vous voyez souvent un champ texte. L’application vous demande un nom, ou une valeur.

Vous mettez une valeur classique, comme “Jean”, et vous voyez qu’elle est affichée en retour.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Ensuite, vous testez un signe qui pose souvent problème : l’apostrophe. Si l’apostrophe casse l’affichage ou provoque un comportement étrange, ça donne déjà une info.

Puis vous testez si le HTML est interprété. Par exemple, vous mettez une balise très simple. Si l’application affiche la balise “telle quelle”, elle échappe le HTML. Si elle l’interprète, alors vous êtes sur un terrain glissant.

Dans un cadre d’entraînement, le but est de comprendre que si l’application affiche un contenu non échappé, elle peut potentiellement exécuter du JavaScript injecté.

L’outil principal ici est votre navigateur. Vous observez, vous regardez le code source, vous voyez ce qui est rendu.

Et si vous voulez tester rapidement via terminal, vous pouvez aussi envoyer une requête avec curl. Voici un exemple de principe :

curl "http://localhost:8080/vulnerabilities/xss_r/?name=test"

L’idée n’est pas d’avoir “la commande magique”, mais de comprendre qu’un paramètre d’URL peut transporter une donnée, et que cette donnée peut être renvoyée dans la page.

Une fois que vous avez vu le mécanisme, vous comprenez l’intérêt de fonctions comme htmlspecialchars en PHP. Vous réalisez que ce n’est pas une “option”, c’est une ceinture de sécurité.

Exemple débutant : découvrir une injection SQL avec DVWA

L’injection SQL arrive quand une application construit une requête SQL en mélangeant du texte SQL et une entrée utilisateur sans protection.

Dans DVWA, le module SQL Injection est souvent très clair. Vous avez un champ qui demande un identifiant, ou une valeur, et DVWA affiche des informations associées en base.

  • Vous mettez 1, vous voyez un utilisateur.
  • Vous mettez 2, vous voyez un autre utilisateur.

Déjà, vous comprenez que le champ sert à construire une requête. Ensuite, vous testez une entrée qui peut provoquer une erreur SQL. Par exemple, une apostrophe.

Si DVWA est en mode Low, vous verrez souvent une erreur SQL apparaître. Et à ce moment-là, vous tenez un signal fort : vous injectez quelque chose qui casse la requête.

Là encore, vous pouvez utiliser le navigateur, mais aussi curl.

Par exemple :

curl "http://localhost:8080/vulnerabilities/sqli/?id=1&Submit=Submit"

Ce que vous cherchez ici, ce n’est pas “hacker la planète”. C’est comprendre que si l’application insère la valeur id dans une requête du type :

SELECT * FROM users WHERE id = 'VALEUR';

alors si la valeur n’est pas contrôlée, elle peut modifier le sens de la requête.

Quand vous comprenez ça, vous comprenez aussi pourquoi les requêtes préparées (PDO avec bindParam) sont indispensables.


Beaucoup de failles ne sont pas “dures” à exploiter. Elles sont juste là, posées, parce que quelqu’un a codé trop vite, ou parce qu’un site a grandi sans refaire de nettoyage.

DVWA vous met exactement dans cette situation, mais sans dégâts.

Exercices concrets de pentesting avec DVWA

Maintenant, place à la pratique. Voici cinq exercices concrets que vous pouvez faire avec DVWA, dans un ordre logique, et surtout en progressant.

Exercice 1 : injection SQL sur une page de login

Votre objectif est de comprendre comment un formulaire de connexion peut être contourné quand il est mal codé.

Vous allez dans la partie brute force ou login, selon la version de DVWA, et vous observez comment le système réagit à des entrées inhabituelles. Vous testez les erreurs, vous regardez si l’application renvoie des messages trop précis.

Objectif : comprendre comment une faille SQLi permet de contourner un login.

À faire :

  • Installez DVWA (Damn Vulnerable Web App)
  • Activez le niveau facile
  • Allez sur la page login
  • Trouvez comment se comporte l’app quand vous mettez des caractères spéciaux (apostrophe, guillemets)
  • Analysez les erreurs SQL (si elles existent)
  • But final : réussir à vous connecter sans connaître le mot de passe

Bonus :

  • Corriger la faille ensuite avec des requêtes préparées (PDO)

Ce qui compte ici, c’est l’observation. Si l’application vous dit “utilisateur incorrect”, ce n’est pas la même chose que “mot de passe incorrect”. Rien que ça, c’est une fuite d’information.

Ensuite, vous notez ce que vous voyez, puis vous passez au mode Medium pour voir si le comportement change.

Exercice 2 : XSS sur un champ de commentaire

Votre objectif est de comprendre comment un contenu utilisateur peut devenir dangereux.

Vous utilisez le module XSS. Vous testez d’abord du HTML simple. Vous observez. Puis vous passez en mode stored si vous voulez voir ce que ça donne quand un contenu est enregistré et réaffiché.

Objectif : injecter du JavaScript dans une page via un champ utilisateur.

À faire :

  • Utilisez DVWA avec un champ “pseudo + message”
  • Stockez le message en base / fichier et réaffichez-le brut
  • Testez ce qui passe (texte normal → HTML → scripts)
  • But final : déclencher une action visible dans le navigateur via une injection

Bonus :

  • Appliquer la bonne protection : htmlspecialchars() + CSP (Content Security Policy)

C’est un exercice extrêmement important, parce que le XSS peut toucher n’importe quel site : blog, forum, espace membre, zone admin… Et un XSS stocké dans une zone admin, c’est parfois le début d’un vrai cauchemar.

Exercice 3 : Broken Access Control (accès non autorisé)

Votre objectif est de tester si vous pouvez accéder à une ressource sans avoir le droit.

DVWA a plusieurs modules qui touchent à la gestion des droits. L’exercice consiste à vous connecter avec un rôle, puis à essayer d’atteindre une page normalement protégée.

Objectif : comprendre une faille de contrôle d’accès (très fréquent en vrai).

À faire :

  • Connectez-vous en user normal
  • Essaie d’accéder à /admin.php directement
  • But final : vérifier si vous pouvez accéder à des ressources interdites juste en tapant l’URL

Bonus :

  • Tester aussi avec un paramètre du style ?id=2 pour voir si vous pouvez lire les infos d’un autre utilisateur

Même sans être “expert”, vous pouvez apprendre beaucoup : si une page est censée être privée, elle doit vérifier l’autorisation côté serveur. Toujours.

Exercice 4 : brute force et protections

Votre objectif est de mesurer à quel point une page de login est fragile sans protection.

Dans DVWA, il existe un module brute force. Vous testez le comportement. Est-ce que le site bloque après X tentatives ? Est-ce qu’il ralentit ? Est-ce qu’il loggue ?

Objectif : voir à quel point un login sans protection est fragile.

À faire :

  • Sur DVWA faites un test de résistance : 50 / 100 tentatives de mots de passe
  • Observez la vitesse : est-ce que ça bloque ? est-ce que ça ralentit ?
  • But final : mesurer combien de tentatives sont possibles en 1 minute

Bonus, ajouter :

  • délai progressif (rate limit)
  • captcha après X essais
  • blocage IP temporaire
  • logs + alertes

Vous comprenez vite pourquoi les bonnes pratiques de rate limiting existent. Et vous verrez aussi que certains sites réels n’ont aucune protection. Zéro. C’est comme laisser la porte d’entrée ouverte avec un panneau “faites comme chez vous”.

Exercice 5 : fuite d’informations passive

Votre objectif est de récolter un maximum d’informations sans vous authentifier.

Vous regardez les headers HTTP, les erreurs serveur, les indices dans le code source, les fichiers accessibles. Parfois DVWA expose volontairement des choses pour l’apprentissage.

Objectif : apprendre à repérer ce que le serveur révèle “gratuitement”.

Inspectez :

  • les headers HTTP (Server, X-Powered-By…)
  • le robots.txt
  • les fichiers publics involontaires (.env.git, backups .zip.sql, etc.)
  • le code source HTML (commentaires, clés API visibles, endpoints internes)
  • But final : produire une liste de 10 infos “sensibles” récupérées sans s’authentifier

Bonus :

  • Durcir : supprimer headers inutiles, protéger dossiers, interdire les fichiers sensibles

C’est une compétence sous-estimée. Beaucoup de failles sont découvertes juste en regardant intelligemment.

Comment progresser sans se perdre : la stratégie simple

DVWA est riche. Et justement, c’est le piège : on se disperse. Je vous recommande une méthode très simple : un module par jour.

  • Jour 1, vous faites XSS en Low. Vous comprenez.
  • Jour 2, vous refaites XSS en Medium. Vous comparez.
  • Jour 3, vous faites SQLi en Low.
  • Jour 4, SQLi en Medium.

Et ainsi de suite. Et le plus important : après chaque exercice, posez-vous une question de développeur, pas de hacker.

“Comment je corrige ça dans mon propre code ?”

C’est là que DVWA devient un outil puissant. Parce qu’au lieu de collectionner des “attaques”, vous construisez des réflexes de sécurité.

DVWA, ce n’est pas “apprendre à pirater”, c’est apprendre à construire

Si vous deviez retenir une seule chose, c’est celle-ci : DVWA n’est pas une porte vers des pratiques douteuses. C’est une école, un bac à sable, un endroit où vous avez le droit d’être curieux. Et dans le monde du web, la curiosité bien guidée, c’est une qualité rare.

En apprenant sur DVWA (Damn Vulnerable Web Application), vous gagnez un avantage énorme : vous ne codez plus “à l’aveugle”. Vous comprenez ce qui peut mal tourner. Et quand on comprend le risque, on développe plus proprement, plus sérieusement, et avec une vraie confiance.

Alors oui, parfois, vous allez vous sentir un peu perdu. Vous allez tester un truc, ça ne marchera pas, puis d’un coup ça marchera, et vous aurez ce petit sourire du “ok, j’ai compris”. Et c’est exactement ça, progresser. Pas à pas. Module par module. Sans se comparer. Sans se mettre la pression. Juste en apprenant vraiment.