Injection SQL : le chemin le plus rapide pour hacker un site web
Par netking,
dimanche 18 décembre 2005 à 00:59
::
Devzone
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...













Tutoriaux WI
