SQL Injection (SQLi) : quelques commentaires

Un billet concernant les SQL Injection avec SQLMap.
Le net regorge de tutorials explicatifs sur les SQL Injections et sur SQLMap.
Dans ces tutorials, en général, on peux hacker le serveur les doigts dans le nez avec une simple injection SQL.
Ce billet pour relativiser et expliquer pourquoi ce n’est pas forcément le cas.

SQL Injection Round 1

Voici un formulaire PHP qui contient une SQL Injection :

SQL Injection de type Blind :
(Pour les différentes type, se reporter à la page : https://github.com/sqlmapproject/sqlmap/wiki/Techniques ).


La SQL Injection lorsque le formulaire se connecte à la bdd avec un utilisateur root permet, par exemple, de lire le contenu d’un fichier sur le filesystem (on est limité si le serveur web est chrooté).

et de lister les utilisateurs et le hash des mots de passe de la base de données étant donné que l’on a accès à la base mysql :

Cela permet de récupérer pas mal d’informations (comme le répertoire root www) et notamment d’uploader une PHP Backdoor.

La même SQL Injection avec un utilisateur « normal ».
Il est impossible de lister le contenu des fichiers.

On a la confirmation simplement en tentant de faire un select load_file depuis MySQL.
En root, cela ne pose pas de prb.

avec un utilisateur normal, cela retourne NULL.

La réponse vient du fait qu’un utilisateur normal n’a pas le privileges File.

On voit ici pourquoi il est important de ne pas utiliser l’utilisateur root dans les connexions de ses sites WEB.

D’autre part, selon la SQLi, on ne peux pas modifier le contenu de la bdd avec SQLMap :

En blind, l’option os-pwn ne fonctionne pas.
De plus, les requêtes sont beaucoup plus longues. Récupérer une base entière en blind relève de l’exploit (sans mauvais jeu de mot 🙂 )

SQL Injection Round 2

Voici un autre formulaire PHP vulnérable, ce dernier permet d’afficher du contenu selon l’id différent :

Plusieurs SQL Injection dont une de type UNION :

On peux alors tenter le paramètre os-pown pour tenter d’uploader une Backdoor :

TOW !
Notez que le script uploadé a comme utilisateur mysql

Hop un formulaire qui permet d’uploader ce que l’on veux :

ci-dessous, l’upload  est impossible car l’utilisateur Unix mysql n’a pas les droits en écriture sur le répertoire en question.
On obtient le message : [WARNING] it looks like the file has not been written, this can occur if the DBMS process’ user has no write privileges in the destination path

Pour que cela fonctionne, il faut que le groupe other ait les droits en écriture.
Comme vous pouvez donc le voir, les permissions sur les répertoires du serveur WEB sont importantes.

Il est aussi conseillé d’éviter d’utiliser un mot de passe identifique entre un utilisateur MySQL et root ou pire, le mot de passe SSH.
Pas besoin de vous faire un dessin pourquoi !

Pour éviter les SQL Injection, en PHP il est conseillé d’utiliser magic_quotes et ou utiliser addslashes.
De même, il existe beaucoup de literature sur le net pour constuire ses requêtes afin de les éviter.

Comment lire d'autres tutoriels de malekal.com ?

Si le site vous a aidé, svp, débloquez les bloqueurs de publicités, n'hésitez pas non plus à partager l'article ou le site sur les réseaux sociaux.

Pour pouvoir lire plus d'articles et tutoriels, utilisez le menu en haut du site. Plein d'articles et tutos utiles vous attendent !

Besoin d'aide ?

Posez votre question ou soumettez votre problème sur le forum malekal.com pour obtenir une aide efficace : Aller sur le forum malekal.com
(Visited 149 times, 1 visits today)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *