Innanzitutto bisogna importare il modulo (o libreria) urllib:
import urllibPoi settiamo la variabile username che è l'username di cui si vuole scovare la password (ad esempio admin). Oltre all'username settiamo anche la variabile paginaLogin che è l'url della pagina di action (nel caso nostro è http://www.miosito.it/login.php, leggi la parte 3 di questa serie di articoli se ancora non l'hai letta).
username = "admin"Creiamo anche un'altra variabile (messaggioDiAvvenutoLogin) che conterrà il messaggio di avvenuto login che nel nostro caso è "Login effettuato!".
paginaLogin = "http://www.miosito.it/login.php"
messaggioDiAvvenutoLogin = "Login effettuato!"Il codice che testa la password è essenzialmente il seguente:
parametriDaTestare = { "username" : username, "password" : password, "submit" : "1" }Nei parametri da testare l'username è fisso e l'abbiamo settato all'inizio, è uguale a "admin" nel nostro caso. La password da testare cambia ogni volta, ovvero viene testata ogni combinazione di caratteri. Il parametro submit sarà sempre uguale a "1". Con la seconda istruzione vengono codificati i parametri (non ci soffermeremo su questa istruzione). La terza istruzione invia il form alla pagina di login (http://www.miosito.it/login.php) con i parametri da testare. Con la quarta riga viene memorizzato il risultato in una variabile apposita, ovvero viene memorizzato ciò che la pagina ha restituito. Con il blocco if si controlla se il messaggio di avvenuto login è contenuto nel risultato, ovvero se i parametri sono corretti e di conseguenza il risultato contiene il messaggio di avvenuto login. Se esso lo contiene allora significa che la password è corretta (e che quindi è stata trovata) e il programma si chiude altrimenti continuerebbe a testare password inutilmente. Se esso non lo contiene allora si prosegue con l'esecuzione del bruteforce testando la prossima combinazione di caratteri.
p= urllib.urlencode(parametriDaTestare)
paginaDiAction = urllib.urlopen(paginaLogin, p)
risultato = paginaDiAction.read()
if messaggioDiAvvenutoLogin in risultato:
print "Password trovata: ", password
exit()
else:
return
Il codice finale che ne risulterà sarà: BruteForce.py - HTTP.
ciao
RispondiEliminaquando lo eseguo mi dice :
AttribureError: 'module' object has not attribute 'urlencode'
di piu preciso dice:
EliminaTestando la password: AAAA
Traceback (most recent call last):
File "C:\Users\Marius\Desktop\bruteforce.py", line 47, in
testaPassword(psw)
File "C:\Users\Marius\Desktop\bruteforce.py", line 23, in testaPassword
p= urllib.urlencode(parametriDaTestare)
AttributeError: 'module' object has no attribute 'urlencode'
La prima riga di codice deve essere "import urllib" ovvero devi importare il modulo urllib.
Eliminal'ho fatto
Eliminaho esattamente come te
Forse stai utilizzando la versione 3.3 di Python, per una questione di compatibilità ti consiglio di usare una versione 2.7.
EliminaGrazie mille
EliminaAdesso funziona!!!
Fate un video tutorial, sarebbe molto più comodo e facile da comprendere. Così magari anche le persone un po' meno esperte e con meno conoscenze potranno capire le vostre guide. Comunque Complimenti!
RispondiEliminaCerto, grazie dell'idea che mi hai dato.
EliminaFa una guida su come rubare wifi la tua guida NON FA :( Per favore
RispondiEliminaSì, purtroppo la guida sul WiFi non funziona più ma non ti preoccupare, ne arriverà una nuova che funzionerà.
Eliminaimport urllib va' digitato nell' IDLE? (non so se mi sono spiegato)
RispondiEliminaNon devi inserirlo nella Shell ma in un nuovo file vuoto su cui devi iniziare a scrivere il codice. Spero di essermi spiegato.
Eliminama se non si conosce l'username come si fa?
RispondiEliminaHo seguito le istruzioni e il programma parte, quindi per vedere se funzionava realmente ho provato a entrare in un mio account con il bruteforce ma quando arriva alla mia password la supera senza dirmi che ha loggato. Puoi dirmi come mai? grazie
RispondiEliminastesso problema
Eliminastesso problema, soluzioni??
EliminaCaptcha! Ci sono siti, su cui probabilmente state provando questa tecnica con uno script molto ma molto BASILARE, che dopo un numero di login falliti chiede il captcha. Proprio per evitare che dei bot possano provare delle tecniche di Bruteforce.
EliminaRipeto: questo script è basilare. Provarlo in locale con un semplice login creato da sè è ottimo e funziona. Provarlo su Gmail è l'orrore e rischiate anche di beccarvi una bella denuncia.
Ho aperto la shell di python ho messo il codice,ho cliccato debug ma ci sono solo campi vuotii e non so come avviare il programma
RispondiEliminaQuando vado a provarlo la passwor viene formata da a e poi alla fine tutti i caratteri
RispondiEliminaCiao complimenti per l'articolo, ho provato ad usare lo script su un vecchio account facebook ma ottengo solo questo errore:
RispondiEliminaSyntaxError: Non-ASCII character '\xe2' in file /Users/Lorenzo/Downloads/bruteforce.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
se puoi aiutarmi..
Grazie comunque
L'errore sta nella codifica dei caratteri.
EliminaProva a non copia-incollare il codice ma a riscriverlo.
Se il problema persiste non esitare a commentare o a contattarmi ed insieme risolviamo il problema.
Inoltre, dimmi qual è il codice della linea 5.
Ciao grazie per la risposta, alla fine grazie al tuo suggerimento sono riuscito a risolvere, almeno in parte.. adesso diciamo che gira ma ad un cero punto esce, e dice cosi':
Eliminaraceback (most recent call last):
File "/Users/me/PycharmProjects/Brute_01/Brute_01", line 55, in
testaPassword(psw)
File "/Users/me/PycharmProjects/Brute_01/Brute_01", line 18, in testaPassword
paginaDiAction = urllib.urlopen(paginaLogin, p)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 89, in urlopen
return opener.open(url, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 215, in open
return getattr(self, name)(url, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 357, in open_http
'got a bad status line', None)
IOError: ('http protocol error', 0, 'got a bad status line', None)
Process finished with exit code 1
ciao, posso usare il tuo script per recuperare la pasword di facebook? avevo trovato questo http://lgogua.blogspot.com/2013/11/how-to-brute-force-hacking-facebook-in.html
RispondiEliminama funziona con una lista di password mentre visto che sono abbastanza sicuro di ricordarmi come la mia password e' composta ma non mi ricordo i dettagli (spazzi maiuscole e numeri al posto delle lettere) vorrei tipo dare allo script dei suggerimenti, delle parole chiave su cui girare inorno per ritrovare la password... E' possibile fare questo?
spero di essere stato abbastanza chiaro :)
grazie
Certo che è possibile, ma non è semplice.
EliminaSe ho capito bene vuoi un algoritmo che ottimizzi la ricerca delle password in una lista, attraverso dei suggerimenti, in modo da velocizzare il processo di ritrovamento della password.
Putroppo, lo script del link non supporta questa funzionalità.
Per recuperare la password di Facebook puoi semplicemente cliccare su "Password dimenticata" e ricevere una nuova password via mail o rispondere alle domande di sicurezza.
Ciao, ho provato a farlo girare su un mio account facebook e adesso da casa mia non riesco piu' ad accedere a nessun account facebook perche dice che il mio dal mio ip ci sono stati comportamenti scorretti.. che succede? che devo fare? era un mio account qual'e' il problema?
RispondiEliminaSono finito per caso su questo blog mentre cercavo qualche esempio per loggare un sito con python. Apro una parentesi il bruteforce dovrebbe essere l'ultima spiaggia chiudo la parentesi. Io non sono un programmatore, ma solo uno che lo fa per obby, la mia non vuole essere un'offesa però per quanto sia funzionante quei12 for annidati sono davvero inguardabili. Oltre i tre cicli secondo me è meglio abbandonare la strada dell'iterazione e ricorrere alla ricorsione. Io mi ripeto sempre ma perchè devo inventare l'acqua calda quando questa esiste già?
RispondiEliminaDovresti dare un'occhiata agli Iteratori ed ai Generatori sono delle autentiche chicche, poi c'è un modulo chiamato itertools con diverse funzioni tra cui una che si chiama product:
import string
import itertools
def main():
pw_list = []
for pw in itertools.product(string.ascii_lowercase, repeat=2):
pw_list.append(''.join(pw))
print('Number password generate:{0}'.format(len(pw_list)))
print(pw_list[:10])
if __name__ == '__main__':
main()
E l'output è
Number password generate:676
['aa', 'ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ah', 'ai', 'aj']
Con un unico ciclo solo generi tutte le combinazioni che vuoi. Poi bisognerebbe implementare un bel socket tor ....
Innanzitutto ti ringrazio per il commento.
EliminaPerché tutti quei cicli "for" annidati? Per il semplice motivo che il lettore medio di questo blog non è un programmatore esperto ma un appassionato, alle prime armi, che sta cercando di migliorare. Iteratori e Generatori da te consigliati, quindi, sono fuori discussione. Ho, purtroppo, scelto la strada dei "for" annidati ma almeno si capisce il concetto, il senso della guida.
Per quanto riguarda il "come loggare un sito con Python" dai un'occhiata alla libreria mechanize oppure selenium ma per il tuo scopo ti consiglio la prima.
Grazie ancora del commento.
Davvero fantastico complimenti però in questo modo all'inizio fa
RispondiEliminatestando password: AAAA
testando password: AAAAA
testando password: AAAAAA
e così via fino ad arrivare a 12 caratteri però poi continua con dodici caratteri esempio:
testando password: AAAAAAAAAAAB
testando password: AAAAAAAAAAAC
testando password: AAAAAAAAAAAD
quindi se la password: è per esempio di 8 caratteri non può trovarla perche all'inizio fino a dodici fa solo con carattere A...
c'è un modo che non sia cambiare manualmente la lunghezza dei caratteri massimi ogni volta?
Se la password è di 8 caratteri può trovarla (i cicli for sono "annidati", questo è il termine tecnico). Se la password è: AAAAAAAB (8 caratteri) allora devi aspettare prima che completa tutte le combinazioni con le A come primi caratteri quindi come scrivevi tu deve provare prima:
Eliminatestando password: AAAAAAAAAAAB
testando password: AAAAAAAAAAAC
testando password: AAAAAAAAAAAD
Quando arriva ad AAAAAAAAAAAz (supponendo che z sia l'ultimo carattere della lista dei caratteri) allora passa alle combinazioni successive cioè:
AAAB
AAAAB
AAAAAB
AAAAAAB
AAAAAAAB (la tua password)
Spero di essere stato chiaro. Ovviamente tutti quei cicli for annidati sono orripilanti dal punto di vista dell'efficienza e della leggibilità del codice ma questo è soltanto una guida basilare ed elementare.
Questo commento è stato eliminato dall'autore.
RispondiEliminaMa il problema dei Captcha come può essere superato?
RispondiEliminaÈ un po' complicato bypassare i captcha soprattutto se sono "moderni" (tipo caratteri ruotati e e non facilmente leggibili anche dagli umani, oppure i captcha che fanno i test del tipo "Clicca sulle immagini che contengono un cane").
EliminaSe il captcha è un po' datato, può essere bypassato senza troppa difficoltà con un buon OCR (Optical Character Recognizer). Ad esempio, Tesseract OCR.
Ehi ciao, vorrei innanzitutto chiederti se è possibile contattarti via mail perchè mi piacerebbe farti diverse domande.
RispondiEliminaMa il motivo principale per cui ti scrivo è che ho provato a mettere una password basilare al mio account facebook, per far prima, ho segnato come pagina di login la mia pagina profilo, e ho avviato il bruteforce, ma va avanti anche se sorpassa la password che avevo segnato. Come mai non si ferma?
diventarehackerblog@gmail.com
Eliminaciao, volevo sapere una cosa...il programma è chiaro così come le sue parti ma non riesco a capire una volta che io ho il mio bel codice sul pc come lanciarlo sul sito che voglio hackerare...me lo spieghi per favore?
RispondiEliminagrazie mille e continua così!
Ciao, ti chiarisco un po' le idee:
EliminaIl programma devi lanciarlo sul tuo PC. Il sito che vuoi attaccare lo dichiari quando imposti la variabile:
paginaLogin = "http://www.miosito.it/login.php"
Nell'esempio, la pagina di login del sito da attaccare è http://www.miosito.it/login.php, tu puoi impostare il sito da attaccare.
Attenzione: Tutto il materiale su questo blog è a solo scopo informativo, quindi la tecnica Bruteforce va testa su un server locale o un sito di tua proprietà. Attaccare altri siti è illegale.
Ciao!!! E se si aggiungesse una lista proxy al codice in modo che il pc ad ogni tentativo si connetta con un proxy diverso? Dovrebbe essere bypassato il problema del captcha in questo modo no?
RispondiEliminaQuesto è un modo artificioso (anche se creativo, anche io lo testai in passato) per bypassare un problema creandone un altro.
EliminaQuello che dici tu è fattibile e funziona anche (testato) ma immagina quanto tempo ci vuole per:
1. Connetterti ad un proxy
2. Inviare la richiesta dal proxy
Moltiplica questo tempo per tutte le richieste che dovrai fare per trovare una password.
Dire che dovrai aspettare 10-11 reincarnazioni per poter trovare la password non è esagerato (e dico sul serio, facendo un calcolo spannometrico).
Ciao
RispondiEliminaSono nuovo a questo tipo di cose, pero ho letto tutte le tue pagine fino a questa, che mi ha interessato particolarmente, il punto è che non sono in grado di risolverla, anche se continuassi a rileggere le pagine precedenti, vorrei riuscire a parlarti un po piu direttamente per poter capire un po meglio alcune cose...magari in qualche chat privata o robe simili...
comunque complimenti per tutte le operazioni sono davvero interessanti e a volte complesse immagino tutto lo studio che c'è dietro��
Ciao, puoi contattarmi tramite email all'indirizzo diventarehackerblog@gmail.com.
EliminaCiao, innanzitutto complimenti per la guida :) Potresti spiegare come inserire un socket tor? Vorrei testare il mio sito, ma non vorrei che mi bannassero l'IP... oppure se hai altre soluzioni per avere l'anonimato oltre a tor sono tutto orecchi :)
RispondiEliminaCiao, nonostante esegua il brute force sud un sito senza captcha, quando il programma arriva alla password corretta non si ferma.
RispondiEliminaallora io sono il classico lettore totalmente ignorante e inesperto ed ho seguito tutte le tue istruzioni alla fine pero non ho capito delle cose e cioe parli di shell che non ho idea di cosa sia tutto cio che ho letto lo ricopiato su idle di python ma purtroppo non funziona cosa sbaglio capisco di essere ignorante in materia ma vorrei davvero imparare qualcosa e di perse il brute force non mi interessa un gran che mi serve soltanto provarci e cominciare a capire qualcosa
RispondiEliminafunziona anche con i siti https?
RispondiEliminaComplimenti per la guida
RispondiEliminaA me esce fuori questo messaggio "Traceback (most recent call last):
File "C:/Users/liveq/Desktop/Bruteforce 2.py", line 47, in
testaPassword(psw)
File "C:/Users/liveq/Desktop/Bruteforce 2.py", line 23, in testaPassword
p= urllib.urlencode(parametriDaTestare)
AttributeError: module 'urllib' has no attribute 'urlencode'
Puoi aiutarmi?