Chrooter apache
Matériel
Ajout disque dur
Ajout carte
Audit des disques durs
Gestion des peripheriques
Disquette d'installation
Ajout d'un scanner
Astuces
Ajout d'une imprimante
Réseau
Configuration reseau
Dns
Serveur cvs
Proxy squid 
Installation serveur ftp
Installation qmail 
Installation serveur courrier sous debian
Outil TCP/IP 
Le serveur samba
Connexion a distance securisee
Client/serveur vnc
Configurer apache
Dyndns
Installer un LAMP sous mandriva
Sécurité
Chiffrer un fichier/dossier
Securiser son poste
Mur pare feu pas a pas
Authentification ht-access
Surveillance de serveur CACTI
Snort
Snort-inline
Securiser Apache avec mod_security
Filtrage squid/squidguard/dansguardian
Auditer son site web
Sécuriser son linux
Installer un Lamp avec ssl
Contrer les scans de ports
Traitement anti-spam
Installer/Utiliser tripwire
Faire des sauvegardes incrémentales
Rsync
Nessus
Divers
Elisa, le multimédia facile
Utilisation de lilo
Les commandes Linux
Le multi-tache
Le crontab
Exploration de la configuration
Quotas
Messagerie
Installer une application
Debugger ses applications
Le format RPM
Mise a jour du noyau
Qemu
Tour d'horizon des principaux p2p
Récupération du système
Bips d'un pc
Astuces windows
Table Ascii
Lamerland
Conversion de fichiers musicaux
Compiler ses rpms
Graver en ligne de commande
Graver un fichier avi pour un dvd de salon
Récupérer des fichiers effacés
Liens
hakin9
Secureroot.com
Hackerthreads.org
Defcon
Hackerlounge
Les derniers exploits
Tous les codes sources
Securite sous Linux
Les logiciels libres quotidiens
Ezine divers
Madchat
Textes divers
Archives
 
Traductions LG
Toutes les traductions
Traductions Phrack
Toutes les traductions

Il y a actuellement 7 visiteurs connectés sur le site !

Google

Attaques par injection SQL
Attaques par injection SQL

 

Introduction
Qu'est qu'une attaque de type sql injection ?
L'attaque en question
Demonstration d'autres types d'attaques
Comment se proteger des attaques par injection sql ?
Conclusion

 

Introduction

Suite aux nombreuses vulnerabilites de type "sql injection" que l'on a pu rencontrer dans le passe et que l'on retrouve encore et toujours aujourd'hui, j'ai decide de vous ecrire un petit article pour presenter ce qu'est vraiment une injection sql d'une part, mais nous verrons aussi comment un attaquant peut les utiliser et comment s'en proteger le mieux possible.

Ce type d'attaque vise les serveurs web et plus particulierement les erreurs de programmation au niveau des scripts asp, cgi, php, etc. Ces memes scripts executant des requetes sql... Ce sujet, comme nous l'avons vu auparavant, est assez ancien mais on peut dire qu'il est toujours reste d'actualite ne serait-ce que suite à l'utilisation abondante du asp et du php. Aussi, pas mal d'articles sur ce sujet ont prïvïlegie celui-ci et il est bien entendu que certains n'y verront, pour sur, que le cote rebarbatif. Mais l'important pour nous, en ecrivant cet article est d'expliquer cela par nos propres mots de facon à aider les d�utants, et d'adapter ce type de vulnerabilites à l'actualite.

Qu'est qu'une attaque de type sql injection ?

Comme vous le savez certainement SQL (Structured Query Language) est un language de base de donnees, celles-ci representant le coeur de beaucoup d'applications web de nos jours. C'est un language base sur des requetes utilisant des instructions telles que INSERT (insertion de donnees dans la base de donnees), DELETE (pour en supprimer), UPDATE (pour en mettre à jour), SELECT (pour en selectionner et lire), et bien d'autres. Mais cette simplicite en fait aussi une proie facile aux detections de failles.

Exemple de requete :

SELECT * FROM users WHERE login = 'damien';

Cette requete aura pour effet de selectionner l'utilisateur (extrait de la table "users") dont le login est "damien". "SELECT *" signifiant qu'on selectionne tous les champs de cette table mais peu importe pour le moment.

Continuons sur cet exemple pour bien vous faire comprendre ce qu'est une attaque de type sql injection (Mon exemple n'etant pas du pur hasard puisqu'une attaque de ce type dans le but de recuperer un mot de passe ou de s'identifier est certainement la plus courante). Maintenant imaginons que ma page contienne un formulaire d'identification utilisateur de ce type :


Login :

Password :



La requete associee à ce formulaire permettant de verifier que les login / password entres sont valides par rapport à notre base de donnees serait :

mysql_query("SELECT * FROM users WHERE utilisateur = '$login' AND motdepasse = '$password'");

Cette requete aurait pour effet de selectionner l'utilisateur en question si le nom d'utilisateur ET le mot de passe entres sont dans notre base de donnees. Si l'un des deux est errones la requete ne renverra aucun resultat.

L'attaque en question

Sachant que sur mon exemple la variable $login contient ce que j'ai tape dans mon premier champ de texte et que la variable $password contient de meme ce que j'ai tape dans le deuxieme champ de texte (mot de passe), imaginez ce que cela pourrait donner si j'entrais ceci dans le premier champ de texte



Si nous allons voir ce qui se passe du cote du code, ma requete deviendrait alors :

mysql_query("SELECT * FROM users WHERE utilisateur = '' OR 1=1"); //' AND motdepasse = '$password'");

Et elle permettrait certainement d'identifier car la requete est vraie si un utilisateur "" existe OU si 1=1. Comme il est evident que 1 est egal à 1, elle serait vraie. Le signe "//" signifiant un commentaire en php, le reste serait rendu inutile. il est vrai que ma requete est un peu tiree par les cheveux, mais imaginez maintenant que je sache qu'un certain damien est possesseur des droits administrateurs et que je rentre ceci dans mon champ de texte :



il selectionnera alors l'utilisateur damien sans se preoccuper du mot de passe en suivant le meme raisonnement que precedemment. .

Demonstration d'autres types d'attaques

Dans notre exemple precedent, nous ne faisions que nous identifier et nous aurions tres bien pu recuperer un mot de passe de la meme facon. Mais ce n'est pas tout ce qu'on pourrait faire avec une injection sql. Maintenant que vous avez compris comment vous "fabriquer" vos propres requetes, voici quelques exemples de requetes venant à effectuer des modifications sur les donnees ou meme le systeme cette fois-ci.

login : ' OR 1=1"); drop table users;

password : n'importe lequel

Celle-ci supprimerait completement la table users.

login : '; exec master..xp_cmdshell 'net stop firewall'; --

password : n'importe lequel

Sachant que je suis repasse dans une syntaxe sql utilisee sur asp, cette requete ci-dessus aurait pour effet d'executer une commande shell "net stop firewall" qui stopperait l'execution du service "firewall". Et puisque le serveur sql est lance en tant que SYSTEM par defaut, nous aurions tout à fait ce droit d'arreter des services.

login : '; shutdown with nowait; --

password : n'importe lequel

admin' --

admin' #

admin'/*

' or 1=1-- /////celle-la m'a permis de résoudre un challenge, merci à elle ................

' or 1=1#

' or 1=1/*

') or '1'='1--

') or ('1'='1--

Mais ce ne sont que quelques exemples car les possibilites sont nombreuses.

Comment se proteger des attaques par injection sql ?

Comme vous pouvez vous en douter, le seul moyen de prevenir ces attaques se trouve au niveau de la programmation. Si celle-ci est bien realisee, elles ne sont normalement plus possibles. Alors...quelles sont les rïsques de programmation à prendre en compte ?

- Tout d'abord, evitez d'utiliser un compte ayant tous les pouvoirs pour l'execution de votre serveur sql si possible.

- Supprimer les fonctions que vous n'utilisez pas telle que celle que nous avons vu : master..xp_cmdshell, et de maniere generale toutes celles commencant par "master..xp".

- verifiez les entrees utilisateurs telles que les champs de texte. verifiez aussi que les nombres attendus soient bien des nombres avec une fonction telle que IsNumeric() par exemple.

- verifiez aussi les parametres des URL qui sont ajoutables.

- Utilisez les caracteres et fonctions d'echappement telles que AddStripSlashes() en php, voir les caracteristiques de la fonction et en general les documentations de vos languages de programmation web pour plus d'infos. Cela empechera par exemple l'entree utilisateur du caractere ' en l'echappant à l'aide d'un slash le precedant.

- Vous pouvez aussi empecher d'une maniere generale certaines sequences d'entrees utilisateurs telles que ";", "insert", "select", "//", "--", etc.

- Attention aussi à limiter le nombre de caracteres qu'un utilisateur peut entrer dans un champ de texte, car ceci peut fort bien lui compliquer la tache.

- Pour finir, attention à ce que vous mettez dans les cookies, car un mot de passe (meme crypter en md5) est vite trouvé par une attaque de ce type. Et par la suite un remplacement de cette valeur dans le cookie ïncite l'attaquant à une attaque de type brute force ; c'est donc un joli cadeau.

Conclusion

Nous avons pu voir differents types d'attaques realisables par injection sql ainsi que des moyens de les prevenir, en esperant que votre vision de la programmation sql aura ete amelioree coté securite et que vous pourrez vous-memes essayer de remïedier à ces failles dans vos applications web si besoin est puisque c'est le but.

Volontairement je ne me suis pas attarde sur l'ajout de parametres dans une URL, qui peut provoquer une injection sql de la meme facon car le principe est le meme, sauf que les formulaires vulnerables seront des formulaires les plus souvent caches cette fois-ci.

Voila..souvenez vous qu'aucune application web utilisant une base de donnees n'est totalement securisee si vous ne vous en preoccupez pas.

Sources de l'article


 

Blog
Le blog
La radio
La Radio
Boutique
La boutique du Geek
Php/Mysql
Formulaire en php
Administrer un serveur Mysql
Session en php
Gerer ses bases mysql
Les bases php
Securiser ses scripts PHP
Controler ses programmes avec RATS
Convertir une base sql en utf8
Astuces php
Le fichier php.ini
Programmation
Python rapide
Tutorial Python
Tutorial Perl
Tutorial Perl complet
Tutoriel ruby
Tutoriel C
Introduction à gawk
Filtres et utilitaires
Find
Programmation Shell
Ecriture de scripts bash
Expressions regulieres
Vi
Introduction a Javascript
Compiler avec gcc
Astuces en Bash
Cracking
Tutoriel Assembleur
Guide du cracking pour débutant
Assembleur
Manual Unpacking
Techniques de Protection
Différentes failles Web
Arp spoofing dans un réseau switché
Les intrusions
Les attaques externes
Defacage
Defacage complet
Buffer overflow
Netcat
Injection sql
Injection sql(suite)
John the Ripper
Spoofer un email
Utiliser google
La faille system
Usurper une identité
Le rooting
Shellcode sous Unix
La faille race condition
La faille xss
La faille xss (2)
Attaques sur un routeur
P2P
Azureus pas-a-pas
News
Lire les news de Linux-pour-lesnuls.com au format RSS
Distros
Gestion des paquets debian
101 commandes debian
Jeu
Webtarot
Graphisme
Effet neon dans GIMP
Effet vapeur dans GIMP
Cours fonctionnalités de GIMP
Redimentionner une image avec GIMP
Redimentionner une photo pour en faire un cadre avec gimp
Morphing avec gimp
Détourer avec gimp
Réduire le poids d'une image avec gimp
Caricature avec gimp
Humour
Ensemble
Divers