Calendrier

décembre 2005 »
lunmarmerjeuvensamdim
1234
567891011
12131415161718
19202122232425
262728293031

l'actualité du web, des technologies et aussi quelques bons tutoriaux ;-)

Injection SQL : le chemin le plus rapide pour hacker un site web

Quand un serveur web n'a que le port 80 d'ouvert (ce qui est généralement le cas sur tout site "sérieux"), vous n'obtiendrez rien de vos logiciels de recherche de failles. De plus, vous pouvez être sûr que l'admin patche correctement son système : les mises à jour sont automatisées de nos jours. Pour obtenir des informations, il ne reste alors plus que le web-hacking. L'injection SQL est une forme de web-hacking qui ne nécessite que le port 80 et peut marcher dans quasiment tous les cas en cherchant bien. Ces attaques concernent la base de données et le language applicatif (PHP, ASP, CGI...), pas le système ou le serveur web. Leur objet est le plus souvent de récupérer des données (mots de passe, emails) ou de modifier celles-ci (rendre le site inutilisable).

L'injection SQL consiste à envoyer des commandes non-autorisées au serveur par le biais de d'entrées utilisateur dans les pages web (formulaires). De nombreuses pages demandent des informations à l'utilisateur et exécutent des requêtes dans la base de données. Par exemple, quand vous entrez votre login et votre mot de passe pour accéder à un forum, le résultat de la publication du formulaire de saisie est d'interroger la base de donnée pour vérifier la validité de vos identifiants. Avec l'injection SQL, vous pouvez utiliser ces champs pour envoyer des commandes spécifiques à la base pour obtenir un résultat que vous avez choisi (afficher la liste des mots de passe par exemple).

Pour réaliser des injections SQL, vous n'avez besoin que d'un seul logiciel : un navigateur web. Cependant, attention à l'endroit d'où vous effectuez ces essais : ceux-ci seront loggés par le serveur, et l'utilisation d'un proxy est fortement recommandée.

Essayez de cherche des pages qui vous permettent de soumettre des données (page de login, page de recherche, formulaire de contact, etc.). Parfois, les pages HTML (statiques) utilisent la commande POST pour envoyer des paramètres à une page dynamique (PHP). Vous ne verrez pas de paramètres dans l'url, mais vous pouvez regarder le code source et chercher le tag "FORM ". Vous risquez de trouver ce type de code :

<FORM action=Recherche/recherche.php method=post>
<input type=hidden name=A value=C>
</FORM>


Tout ce qui se trouve entre les balises <FORM> et </FORM> recèle des paramètres qui sont potentiellement exploitables.

Si vous ne trouvez pas de page qui font appel à des entrées utilisateurs, essayez les pages qui passent des paramètres comme :

http://www.webinterdit.com/index.asp?id=7
(pas la peine d'essayer chez nous, nous avons des protections en place...)



Pour tester une éventuelle vulnérabilité, commencez par essayer le guillemet simple.

Entrez quelque chose comme :

hi' or 1=1--

dans la case login, ou password, ou même dans l'URL. Par exemple :
 Login : hi' or 1=1--
 Mot de passe : hi' or 1=1--
 http://www.webinterdit.com/index.asp?id=hi' or 1=1--


Si vous devez impérativement utiliser un champ avec le paramètre HIDDEN, téléchargez le source HTML puis modifiez l'URL et le champ masqué. Par exemple :

<FORM action=http://www.webinterdit.com/recherche/recherche.php method=post>
<input type=hidden name=A value="hi' or 1=1--">
</FORM>


Si vous avez de la chance (et que le webmaster est suicidaire), vous entrerez sans login ni mot de passe.

Pour ceux qui connaissent SQL, il est évident que ce type de commandes est la porte ouverte à la base de données : si on peut exécuter 1=1, on peut tout demander. La puissance du langage SQL n'est plus à démontrer.

Pour éviter l'injection SQL, il suffit de filtrer les caractères utilisés par le langage SQL (slash, guillemets simples et doubles, pipeline, etc.) dès qu'il s'agit :
 - D'entrées utilisateurs
 - De paramètres d'URL
 - Valeur d'un cookie

Cette introduction à l'injection SQL est une approche simplifiée. La somme des techniques utilisables est immense, vous trouverez de nombreuses infos à ce sujet sur le web. Mais si vous testez un peu, vous verrez que de nombreux sites (même les plus grands) sont susceptibles d'être hackés. Personne n'est à l'abri d'un stagiaire qui oublie de protéger ses champs...


Web Developer : l'extension indispensable

L'extension Web Developer pour Firefox est une barre d'outils un peu spéciale qui vous donne accès à de nombreux réglages utiles dans le cadre d'un développement web ou pour découvrir les trucs des sites webs que vous fréquentez.

Les grandes fonctions de Web Developer sont :

La possibilité de désactiver sur demande la plupart des fonctions de Firefox (cache, javascript, css, etc.) La désactivation du cache est très pratique dans le cacdre d'un développement, en évitant le vidage manuel du cache entre deux tests.

Des fonctions CSS puissantes : voir directement dans la page les css concernées quand on sélectionne un objet, modifier en live la css (très pratique, évite les tests avec upload de css modifiées), remplacer la css, etc...

Des fonctions liées aux formulaires très pratiques également pour des tests. On peut également "forcer" certains formulaires à accepter des données hors limites, ce qui peut mettre en danger certains sites qui ne fixent les limites de leur formulaires que dans la page web, sans vérification ultérieure sur le serveur.

Des fonctions liées aux images qui apportent des infos utiles (liens, poids des fichiers), mais permettent aussi de débugger en mettant en exergue certains paramètres (images sans attribut Alt par exemple).

Un bouton informations permet de visualiser en un clic des informations aussi importantes que les cookies utilisés ou les en têtes HTTP.

Le bouton suivant propose des fonctions génériques du navigateur en accès direct : vider le cache, supprimer les cookies de la page ou du domaine, zoomer... Plus besoin de passer par les options, un gain de temps considérable.

Les fonctions d'outline (mise en relief) permettent de voir un un coup d'oeil la structure d'une page CSS2 (Outline block elements) ou HTML classique (Outline tables et Outline table cells).

Les options d'affichage permettent de visualiser une page en simulant un écran d'une taille donnée. Par défaut, vous trouverez 800x600, mais vous pouvez également spécifier vos propres tailles d'écran.

Enfin, dernier lot de fonctions, le bouton Tools vous permet de soumettre une page à différents validateurs (W3C, CSS) ou de valider les liens de votre page.

Voilà, ne reste plus que le bouton "View source" qui vous permet d'accéder à la source de la page en un clic.

Vous l'aurez compris, cette extension est un "must have" pour toute personne développant sur le web ou simplement curieuse d'en savoir plus sur les sites visités. Cette extension est gratuite et peut se télécharger ici.