Brute-force, Vulnérabilité des pages de connexions
[SIZE="4"]Script Auto login with Urllib & Urllib2[/SIZE]
Dans cet article, je vais mettre en avant l'utilisation
des librairies urllib & urllib2 en Python, afin d'automatiser les tentatives de connexion à une page web non sécurisée.
Dans quel but ? et bien comme vous vous en doutez, s'il est possible d'automatiser des connexions,
il est possible de tester plusieurs mots de passe en boucle, l'usurpation d'identité devient alors facile à mettre en pratique sur un site mal sécurisé, cet article à donc pour intérêt de donner un aperçu des risques encourus par un web-master ne limitant pas le nombre de connexion à son site .
Dans cet exemple, je vais utiliser la page de démonstration d'un formulaire de connexion en php sur le siteduzero.
http://www.siteduzero.com/uploads/fr/ftp...ulaire.php
On récupère le code source de la page :
Comme on le voit, le formulaire envoie les informations à la page => http://www.siteduzero.com/uploads/fr/ftp...ulaire.php
On va également noter les noms des informations qui vont transiter entre les pages:
Le nom de la valeur contenant la saisie de l'utilisateur est mot_de_passe.
Dans le code source en php sur le SDZ, ils nous expliquent que le mot de passe est "kangourou" (vous pouvez essayer)
Alors, passons à la partie programmation:
une fois ce script exécuté, si le mot de passe est bon, le programme enregistre le contenu de la page html privée dans le fichier "fichier.html"
Comme vous vous en doutez, un petit malin voulant par exemple usurper une identité, peut tout à fait utiliser une boucle
testant des identifiants différents sans arrêt, en remplaçant la valeur de mot_de_passe par une variable qui change à chaque tour de la boucle.
[COLOR="DeepSkyBlue"]
Conclusion, si vous possedez un site web, pensez à limiter le nombre de tentative de connexion par ip, cookie,
ou autres, afin d'éviter ce genre d'exploitations, ainsi que d'éventuelles tentatives de Denial Of Service,
ça ne vous rendra pas intouchable, mais ça écartera un GROS risque,
car une page web acceptant toutes les tentatives de connexions du genre,
ne mettra pas longtemps à se faire bypass.[/COLOR]
Références :
http://www.voidspace.org.uk/
http://www.python.org
Dans cet article, je vais mettre en avant l'utilisation
des librairies urllib & urllib2 en Python, afin d'automatiser les tentatives de connexion à une page web non sécurisée.
Dans quel but ? et bien comme vous vous en doutez, s'il est possible d'automatiser des connexions,
il est possible de tester plusieurs mots de passe en boucle, l'usurpation d'identité devient alors facile à mettre en pratique sur un site mal sécurisé, cet article à donc pour intérêt de donner un aperçu des risques encourus par un web-master ne limitant pas le nombre de connexion à son site .
Dans cet exemple, je vais utiliser la page de démonstration d'un formulaire de connexion en php sur le siteduzero.
http://www.siteduzero.com/uploads/fr/ftp...ulaire.php
On récupère le code source de la page :
Code PHP :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Page protégée par mot de passe</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<p>Veuillez entrer le mot de passe pour obtenir les codes d'accès au serveur central de la NASA :</p>
<form action="secret.php" method="post">
<p>
<input type="password" name="mot_de_passe" />
<input type="submit" value="Valider" />
</p>
</form>
<p>Cette page est réservée au personnel de la NASA. Si vous ne travaillez pas à la NASA, inutile d'insister vous ne trouverez jamais le mot de passe ! ;-)</p>
</body>
</html>
Comme on le voit, le formulaire envoie les informations à la page => http://www.siteduzero.com/uploads/fr/ftp...ulaire.php
Citation :<form action="secret.php" method="post">
On va également noter les noms des informations qui vont transiter entre les pages:
Citation :<input type="password" name="mot_de_passe" />
Le nom de la valeur contenant la saisie de l'utilisateur est mot_de_passe.
Dans le code source en php sur le SDZ, ils nous expliquent que le mot de passe est "kangourou" (vous pouvez essayer)
Alors, passons à la partie programmation:
Code PHP :
# -*- coding: iso-8859-1 -*-
# Author : fr0g
# Mail : : fr0g.security@gmail.com
import urllib
import urllib2
the_url = 'http://www.siteduzero.com/uploads/fr/ftp/mateo21/php/page_mdp/secret.php' # Declaration de l'url sur laquelle travailler.
values = {'mot_de_passe' : 'kangourou'} # Declaration du nom de la valeur et de son contenu
data = urllib.urlencode(values) # Encodage des valeurs
req = urllib2.Request(the_url, data) # Creation de la requete
handle = urllib2.urlopen(req)
the_page = handle.read() # lecture de la page a laquelle on nous redirige après la connexion
fichier = open("fichier.html", "w") # Ouvre le fichier.
fichier.write(the_page) # Ecris le contenu de la page a laquelle nous avons eut acces.
fichier.close() # Fermeture du fichier
# le fichier "fichier.html" dans le meme repertoire que le script python, contient le contenu de la page à laquel nous avons eut acces
# grace à ce script.
une fois ce script exécuté, si le mot de passe est bon, le programme enregistre le contenu de la page html privée dans le fichier "fichier.html"
Comme vous vous en doutez, un petit malin voulant par exemple usurper une identité, peut tout à fait utiliser une boucle
testant des identifiants différents sans arrêt, en remplaçant la valeur de mot_de_passe par une variable qui change à chaque tour de la boucle.
[COLOR="DeepSkyBlue"]
Conclusion, si vous possedez un site web, pensez à limiter le nombre de tentative de connexion par ip, cookie,
ou autres, afin d'éviter ce genre d'exploitations, ainsi que d'éventuelles tentatives de Denial Of Service,
ça ne vous rendra pas intouchable, mais ça écartera un GROS risque,
car une page web acceptant toutes les tentatives de connexions du genre,
ne mettra pas longtemps à se faire bypass.[/COLOR]
Références :
http://www.voidspace.org.uk/
http://www.python.org
Padboy
Bon membre Messages : 745 Sujets : 19 Points: 5 Inscription : Oct 2005 |
Vulnérabilité des pages de connexions
Ton tutoriel est très bien fait, et c'est un très bon exemple de brute forcing.
Je voulais juste ajouter un point. Il est bon d'expliquer pourquoi la limitation est au niveau de l'ip et non au niveau du username. La pratique de la limitation de connexion par username est une pratique un peu paradoxale par rapport aux attaques DOS. En effet, en bloquant par exemple pendant m minutes tous les comptes pour lesquels un attaquant a essayé n fois de s'infiltrer, en pratique c'est justement un déni de service. Ceci étant dit, mieux vaut bloquer l'adresse ip de l'attaquant pour éviter dans les deux cas, un DOS (je parle des cas mentionnés). |
itcef
Membre actif Messages : 77 Sujets : 4 Points: 2 Inscription : Oct 2011 |
Vulnérabilité des pages de connexions
Merci pour ton tutoriel, on en trouve pas de ce genre partout
Mieux vaut être faux que vrai.
|