domenica 12 ottobre 2014

Come Creare Un Bruteforce In Python - Parte 3

Come richiesto da un utente, in questa guida spiego come creare un bruteforce per un qualsiasi sito web. Negli scorsi articoli abbiamo preso in esame la tecnica bruteforce per quanto riguarda il login FTP. Ora, invece, vedremo come usare questa tecnica per un login di un sito web (quindi non più FTP bensì HTTP). Ricordo e sottolineo che i contenuti di questa guida sono a solo scopo informativo e non sono di incoraggiamento a compiere reati informatici quali il bruteforcing.

Premetto, che il metodo utilizzato in questo articolo potrebbe non funzionare su siti di massima protezione.

Occorre, innanzitutto, precisare che verrà utilizzata la libreria python urllib che serve per leggere il codice di una pagina web.

Descriviamo le operazioni che andranno compiute per creare un bruteforce utilizzando la urllib:

1. Aprire la pagina di action del form (con la funzione urlopen) che è settata dall'attributo action del form, la chiameremo quindi pagina di action. Per comprendere meglio consiglio di studiare un po' di HTML. Se già lo masticate, meglio ancora. La pagina di action, dunque, verrà aperta ma con i campi già compilati, il campo username (o email, dipende dal form), ad esempio, già sappiamo che sarà compilato con l'username (o email) della vittima, ovvero l'username di cui vogliamo scoprire la password. Il campo password sarà compilato dalla password da testare. Ad ogni combinazione di password, dunque, viene tentato il login fin quando non sarà effettuato l'accesso e quindi la password sarà trovata.

Ecco un esempio di form:
<form method="post" action="login.php">
    Username:
    <input type="text" name="username" /><br />
    Password:
    <input type="password" name="password" /><br />
    <input type="submit" name="submit" value="Accedi">
</form>

Analizziamo il form. La pagina di action è login.php. Per ottenere l'url completo della pagina di action la dobbiamo far precedere dall'indirizzo su cui ci troviamo, se ci trovassimo, ad esempio, su http://www.miosito.it l'url completo della pagina di action sarà http://www.miosito.it/login.php. Il primo input è il campo username, il secondo è il campo password e l'ultimo input è il pulsante di accesso. A volte, possono esistere più input, ma dobbiamo considerare solo questi 3 input fondamentali. Segniamoci i parametri name degli input, ovvero, username, password e submit. Possiamo ora passare al secondo passaggio.

2. Memorizzare il messaggio di avvenuto login inserendo username e password corretti. Consiglio di farlo con la funzione urlopen da linea di comando Python (dalla Shell Python) per velocizzare il tutto. Scriveremo dunque:
>>> import urllib
>>> parametriCorretti = { "username" : "mioUsername", "password" : "mia Password", "submit" : "1" }
>>> p = urllib.urlencode(parametriCorretti)
>>> paginaDiAction = urllib.urlopen("http://www.miosito.it/login.php", p)
>>> paginaDiAction.read()

Ovviamente, invece di mioUsername e miaPassword inseriremo username e password corretti. Submit lo rimarremo impostato a 1. Con la riga paginaDiAction.read() apparirà il codice HTML restituito dalla pagina da cui prenderemo e ci segneremo il messaggio di avvenuto login (ad esempio "Login effettuato!").

Nella prossima parte vedremo come eseguire l'attacco bruteforce vero e proprio utilizzando parte del codice degli articoli precedenti e scrivendo una nuova parte di codice che sarà il controllo HTTP della pagina di avvenuto login nel caso il programma abbia trovato la password corretta.

29 commenti:

  1. Fai una guida su Come farlo PER WIFI TI PREGO

    RispondiElimina
    Risposte
    1. Per il wifi è un po' più complicato. A dire il vero, non so se esiste una libreria in Python che permetta di farlo, di conseguenza potrei provare a fare una guida su come creare un bruteforce in C o C++ qualora in Python non si avesse la possibilità di creare tale tipologia di Bruteforce. In ogni caso mi hai dato l'idea per un nuovo articolo.

      Elimina
  2. Non ho capito cosa bisogna mettere al posto di mio username ....come si fa a mettere il username e la password se non la conosco
    mi da errore di sintassi

    RispondiElimina
    Risposte
    1. L'username è quello di cui si vuole scovare la password.
      La password invece è quella che si vuole testare.

      Elimina
    2. Ma come si fa a testare,ci devi provare un migliardo di volte

      Elimina
  3. mi da errore di sintassi.....mi dice che non ho definito "parametriCorretti".......aiutami ti prego.....

    RispondiElimina
    Risposte
    1. Probabilmente hai commesso qualche errore nella seconda linea di codice (parametriCorretti = { "username" : "mioUsername", "password" : "mia Password", "submit" : "1" }), prova a riscriverla anziché copiarla.

      Elimina
  4. DRIVER MA IL FORM è LO STESSO PER VISUAL BASIC?

    RispondiElimina
  5. Ciao Driverfury
    Sto studiando il Python
    Ho scelto il libro "Python:pensare da informatico" e sono arrivato al 15 capitolo ma non riesco ad impararlo
    É perché l'hacking non fa per me o devo impegnarmi di più?

    RispondiElimina
    Risposte
    1. Una domanda: hai passione (ovvero ti piace l'hacking)? Se sì, allora continua a studiare, magari cambia libro, segui dei videotutorial su youtube. Se la risposta è no, allora l'hacking non fa per te.

      Elimina
    2. Ho cambiato libro e adesso ho capito meglio. Modifico gli esempi e creo semplici programmi...
      Quando arriveranno nuove guide hacking?
      Che blog ci sono come questo (in italiano)?

      Elimina
    3. Altre guide arriveranno presto. Intanto, ti consiglio la mia guida "Come Diventare Hacker: La Guida Base": http://diventarehacker.blogspot.it/p/come-diventare-hacker.htm

      Non so se ci sono blog italiani come questo, la maggior parte sono inglesi e tedeschi.

      Elimina
  6. Ciao,

    Driverfury potresti contattarmi tramite email? (rocco @ hackerstribe.com)
    per una proposta inerente il blog, grazie.

    ;)

    Roc

    RispondiElimina
    Risposte
    1. Ciao Roc, contattami su all'indirizzo diventarehackerblog@gmail.com

      Elimina
  7. forse la domanda è stupida(molto stupida)..come si fa ad arpire il form?
    quando inserisco il "login.php." mi dice che la pagina non esiste

    RispondiElimina
    Risposte
    1. Devi scrivere l'indirizzo completo, ad esempio: "http://www.nomesito.it/login.php"

      Elimina
    2. Ciao, mi potresti dire un link dove ci sono tutte le funzioni di Python?( per esempio urlencode , urlopen...)

      Elimina
    3. http://docs.python.org/2/library/

      Elimina
  8. probabilmente è la domanda più stupida che si possa fare: come si apre la urllib? cosa devo fare?

    RispondiElimina
    Risposte
    1. Non devi aprirla ma semplicemente importarla con il codice:
      import urllib

      Elimina
  9. una volta fatto partire il paginaDiAction.read() esce fuori una stringa immensa dal quale è umanamente impossibile trovare tale messaggio di avvenuto login (pagina= facebook.com, sto facendo le prove con il mio account). Dove posso trovare tale messaggio?

    RispondiElimina
  10. io non capisco, ma questi comandi form li dobbiamo mettere sul programma che testa le password?

    RispondiElimina
    Risposte
    1. I comandi form non esistono.

      Il form fa parte dell'HTML che ti consiglio di studiare per bene (sia HTML che PHP) per capire questo corso.

      Se ti riferisci al codice HTML, allora non va inserito da nessuna parte, è solo un esempio di form.

      Se, invece, ti riferisci al codice Python allora va scritto ed eseguito nella Shell Python (oppure scrivere uno script Pyton e avviarlo, tanto è uguale).

      Elimina
  11. Mi dai un link dove scaricare le urllib che io non le trovo

    RispondiElimina
    Risposte
    1. La libreria urllib è già presente di default con l'interprete Python. Non c'è bisogno di scaricarla.

      Elimina
  12. mi dice "attributeError: attribute "urllib" has no attribute "urlencode" ", quando scrivo urllib.urlencode( parametriCorretti)...

    RispondiElimina
    Risposte
    1. Che versione Python hai? Quella usata in questa guida è la 2.7

      Elimina
  13. È possibile fare un programma in python che mette tutte le pass generate in un file di testo e poi farle provare tutte con un programma apposito per brute-force hacking?
    Se si mi potresti passare il codice sulla mia mail?

    RispondiElimina
    Risposte
    1. P.s. la mia mail è dottormrrocky@Gmail.com

      Elimina