N-PN White-Hat Project
[Python] Bruteforcer avec API Pexpect - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [Python] Bruteforcer avec API Pexpect (/showthread.php?tid=3503)



[Python] Bruteforcer avec API Pexpect - thxer - 24-11-2013

Hey salut à tous !

Je cherchais un moyen pour programmer un petit bruteforcer en python, le soucis c'était qu'il fallait gérer un stdin.

Le programme fait :
Citation :./Prog.c
----------------
Hello Dude !

Serial:
---------------

Il faut donc que notre script intercepte la sortie du prog et puisse entrer des données.

Pexpect

Pexpect est une API pour python géniale, elle gère super bien les entrées/sorties du programme.
C'est pour cela que je fais ce petit post car ses applications peuvent être nombreuses en dehors d'un simple script de BF.

http://pexpect.readthedocs.org/en/latest/overview.html
Mini Tutos :
Code PYTHON :

import pexpect

child = pexpect.spawn ('ftp http://ftp.openbsd.org') # Prog à lancer avec arguments
child.expect ('Name .*: ') # On attend de trouver ceci sur stdout
child.sendline ('anonymous') # On entre ceci via sdtin
print child.before   # On affiche le résultat de child
child.interact() # Pour récupérer la main de façon interactive
 


Voilà pour l'usage basique (cf documentation)

Le Bruteforce

Code PYTHON :

#!/bin/env python
# -*- coding: utf-8 -*-

#Bruteforce By Thxer

import pexpect, itertools

x = '0123456789'  #Les données qu'on va tester
for a, b, c, d, e, f in itertools.product(x, x, x, x, x, x):
    child = pexpect.spawn('/chemin/vers/Crackme')
    child.expect(' Serial :') # On attend Serial
    passwd = a + b + c + d + e + f
    child.sendline(passwd) # On entre la variable passwd
    try:
        i = child.expect(['try again !!!']) #Si il trouve 'try again' on continu
    except:
        print("= Succes =")            #Sinon on affiche le passwd  
        print("Passwd = "+passwd)
    # debug print passwd


 


Voilà, on peut imaginer plein de choses pour le coup etc ...
Simple, efficace. Big Grin


RE: [Python] Bruteforcer avec API Pexpect - Sh4dows - 24-11-2013

Merci du partage, je chercher un truc dans le genre il y a quelques semaines Smile


RE: [Python] Bruteforcer avec API Pexpect - gruik - 24-11-2013

(24-11-2013, 17h23)thxer a écrit :
Code PYTHON :
x = '0123456789'  #Les données qu'on va tester
for a, b, c, d, e, f in itertools.product(x, x, x, x, x, x):
    (...)
    passwd = a + b + c + d + e + f

note que tu peux avantageusement remplacer ton itertools.product() par un itertools.combinations_with_replacement() :

Code PYTHON :
liste = [''.join(i) for i in itertools.combinations_with_replacement('0123456789',6)]
for passwd in liste:
    (...)



RE: [Python] Bruteforcer avec API Pexpect - thxer - 24-11-2013

Merci !


RE: [Python] Bruteforcer avec API Pexpect - thxer - 25-11-2013

Comment savoir le nombre de combinaisons testées par seconde sans afficher la sortie ?


RE: [Python] Bruteforcer avec API Pexpect - 0pc0deFR - 25-11-2013

Une boucle avec une incrémentation et un affichage du nombre de password testé. Quelque chose qui peut te permettre d'avoir une moyenne du nombre de tests par seconde. Tu récupères la date/heure au démarrage du bruteforce et la date/heure à la fin du bruteforce, tu récupères la différence puis tu divises le nombre de password testé (que tu as récupéré via l'incrémentation dans ta boucle) par la différence de temps. Admettons 500 passwords en 15 secondes, ça te fait environ 33 passwords par seconde.


RE: [Python] Bruteforcer avec API Pexpect - thxer - 25-11-2013

Pas bête merci !