domenica 10 novembre 2013

Come Creare Un Bruteforce In Python - Parte 2

Nella prima parte abbiamo visto e analizzato il codice per generare tutte le possibili combinazioni di password data una lista di caratteri. Ecco la seconda parte della guida su come creare un bruteforce in Python.
Come Creare Un Bruteforce In Python

Ora non ci tocca che provare ad effettuare un accesso testando ogni singola combinazione di password. Modifichiamo la funzione testaPassword() che per ora stampa solo la stringa che gli passiamo come parametro.

Cosa dovrà fare la funzione testaPassword()? Ipotizziamo che vogliamo tentare l'accesso ad un server via FTP (ad esempio ftp.sitodiprova.it) conoscendo l'username di login (ad esempio admin). Ferma, ferma! Cos'è l'accesso via FTP? Non è altro che l'accesso ad un sito in modo che possiamo scaricare da esso le pagine del sito stesso (ed esempio vogliamo scaricare la pagina sitodiprova.it/registrazione.php), oppure possiamo aggiungere noi pagine al sito. Per accedere via FTP abbiamo bisogno di un username (spesso è admin) e una password (che andremo a scoprire). Per capire meglio il concetto di FTP consiglio di documentarsi su internet e scaricare programmi come FileZilla.

Il codice finale sarà il seguente: BruteForce.py - Esempio 02. Come si può notare viene tentato l'accesso provando ogni singola combinazione di password, se la password non è quella esatta allora il programma va avanti generando la prossima, se la password è esatta allora viene stampato un messaggio che avvisa l'utente che è stato trovata la password corretta, il programma terminata una volta che l'ha trovata.

40 commenti:

  1. Complimenti anche per questo articolo

    RispondiElimina
  2. Mi è sorta una domanda , ovvero per trovare la password di un meccanismo elettronico che libreria si deve utilizzare ?

    RispondiElimina
    Risposte
    1. Dipende dal meccanismo in question. In questo articolo è stato preso in considerazione l'esempio del login FTP ed è stata utilizzata una libreria apposita.

      Elimina
  3. Per trovare la password di un wifi che libreria devo utilizzare ?

    RispondiElimina
    Risposte
    1. Se stai utilizzando Linux dai un'occhiata su questo sito: http://pythonwifi.wikispot.org/
      Se invece utilizzi Windows allora puoi usare il comando netsh, se mastichi un po' di inglese leggi qui: http://stackoverflow.com/questions/14077835/associating-my-windows-computer-to-a-wifi-ap-with-python

      Spero di esserti stato di aiuto.

      Elimina
    2. Grazie per la risposta, però non ho capito come dovrei utilizzare il comando "netsh"

      Elimina
    3. Da codice Python devi avviare il comando "netsh" del cmd di Windows.

      Elimina
  4. Se volessi fare un programma con Python che trova la password di 3 caratteri da "a" a "z" collegandosi ad un sito dove dovrei modificare la funzione?
    p.s bellissimo articolo

    RispondiElimina
    Risposte
    1. Ti ringrazio per il commento. Per quanto riguarda provare il bruteforce di una password su un sito web la questione è un po' complicata, cercherò di fare un articolo a riguardo.

      Elimina
    2. import urllib.request
      def risultato(userID,passwd):
      passwd=str(passwd)
      uri="http://www.dis.uniroma1.it/~santucci/PY/sfida_1.php?param="
      sock = urllib.request.urlopen(uri+passwd+"&name="+userID)
      htmlSource = str(sock.read())
      sock.close()
      return "Giusto!" in htmlSource
      #esempio di chiamata print(risultato("1000","aaa")) #La vostra soluzione:

      Io so l'ID e devo trovare una password di tre lettere "a" a "z" non si può utilizzare il tuo metodo ?
      Se si, come richiamo la prima funzione?

      Elimina
    3. Studia invece di chiedere la soluzione del tuo esercizio, ecco perchè i nuovi ingegneri in informatica e automatica della Sapienza sono dei fessacchiotti che non sanno far nulla quando li convochiamo ai colloqui aziendali. Vergognati profondamente!

      Elimina
    4. Sto studiando , infatti ho trovato poco fa la password , era solo per avere delle informazioni visto che avevo già visto quest'articolo tempo fa, e comunque l'ho risolto diversamente , non avevo intenzione di fare il furbetto ;)

      Elimina
    5. Anonimo il metodo mostrato in questa serie di post può essere anche utilizzato per il problema da te descritto.

      Comunque mi fa piacere che già hai risolto il problema. In fondo, l'hacking è questo: trovare soluzioni a problemi che apparentemente sembrano insormontabili.

      Leonardo da Vinci era un hacker, voleva volare ed ha progettato la prima macchina volante teoricamente funzionante.

      Elimina
  5. sto cercando un sito dove scaricare un phppennyaction di buona qualità .. sapete dove??

    RispondiElimina
  6. Dove posso trovare una libreria python HTTP ?

    RispondiElimina
    Risposte
    1. La libreria HTTP è già presente quando scarichi l'interprete Python, eccone la documentazione ufficiale: http://docs.python.org/2/library/httplib.html

      Elimina
  7. ma questo metedo puo essere usato anche per mail o facebook?

    RispondiElimina
    Risposte
    1. Sì, il metodo sì. Solo che in queste guida viene utilizzato il bruteforce per un login FTP.

      Elimina
  8. potresti spiegarmi come si fa per esempio per hotmail?

    RispondiElimina
  9. driverfury hai una mail sul quale posso contattatrti?

    RispondiElimina
  10. Complimenti!! Il tuo è un sito fantastico e ricco di guide. Come vedi sto fino a notte inoltrata a leggere ahah Se puoi e se vuoi, potresti mettere una guida dettagliata sulla steganografia? Ne ho lette alcune in alcuni siti, ma i metodi descritti, a parte 2 o 3, sono troppo semplici da scoprire.. Ti sarei profondamente grato per una tua guida a riguardo. Grazie.

    RispondiElimina
  11. Ciao, bell'articolo, ma questo metodo funziona solo per entrare come amministratore in un sito o, per esempio, anche per un login Facebook di cui si sa la email?

    RispondiElimina
  12. il problema è che bisogna conoscere sia l'id del proprietario del sito sia la lunghezza della password, non sono proprio due informazioni facili da trovare in giro, quali altri metodi si possono provare che non hanno bisogno delle due nozioni appena citate? grazie in anticipo

    RispondiElimina
  13. Se volessi accedere con user e password ad un sito su http mi basterebbe fare la stessa cosa cambiando le istruzioni ftp in quelle per libreria http o dovrei cambiare anche la sintassi (www.sitodiprova.it,"admin",password)

    RispondiElimina
    Risposte
    1. Le istruzione http sono diverse da quelle ftp ed anche il modo di procedere è diverso perchè devi operare sui form e sulla risposta html della pagina di login.

      Elimina
  14. come faccio ad avviare il bruteforce? cioè lo avvio, però non mi cerca nessuna password e non so come fare ad impostare quale password deve trovare.

    RispondiElimina
    Risposte
    1. Ciao Giacomo, innanzitutto mi scuso per il ritardo della risposta, sono molto impegnato ultimamente.

      Prima di capire come funziona il bruteforce descritto in questa guida ti consiglio di studiare il protocollo FTP e la relativa libreria Python cioè ftplib. Tuttavia, questa serie di articoli hanno come scopo principale quello di illustrare la tecnica di bruteforcing ma in questo articolo specifico viene trattato l'attacco bruteforce su protocollo FTP, quindi se vuoi comprenderlo appieno devi prima sapere cosa sia tale protocollo.

      Elimina
  15. Ma non bisognerebbe le parentesi tonde quando si vuole stampare qualcosa....
    comunque bella guida

    RispondiElimina
    Risposte
    1. In Python 2.7.x è possibile anche non inserire le parentesi tonde. Comunque, grazie per il commento, sono contento del fatto che la guida stia piacendo.

      Elimina
  16. È possibile creare un bruteforce in una versione android di python che ho trovato nell'app store? Se si si potrebbe fare un articolo a riguardo? Bell'articolo comunque ;)

    RispondiElimina
  17. ma se il nome utente per accedere non fosse admin e noi mettiamo lo stesso admin come utente.... la password potrebbe cambiare e quindi essere giusta o sbagliata a seconda del nome dell'utente?

    RispondiElimina
  18. Mi da errore a exit() dice inconsistent use of tabs and spaces in identation... come si può risolvere?

    RispondiElimina
  19. Risposte
    1. Scrivi il codice manualmente con l'editor di Python. Non copincollare il codice.

      Elimina
  20. Ciao a tutti, riscontro un problema quando il programma arriva all'istruzione exit() . Il programma, quando viene eseguito da IDLE si ferma. Ma appena lo faccio partire dal terminale "ignora" l'istruzione e prosegue. Come posso risolvere?

    RispondiElimina
  21. Lamer,hai mai sentito parlare di multi-threading???

    RispondiElimina
    Risposte
    1. Io sì, ma la maggior parte degli utenti che leggono queste guide basilari non sono esperti programmatori e quindi devo scrivere articoli che riescano ad essere compresi anche a chi si è appena avvicinato alla programmazione e all'hacking.

      Credi che nell'articolo sul bruteforce HTTP avrei usato quel codice o avrei sfruttato 12 Thread che inviano richieste in contemporanea?

      In ogni caso, arriveranno anche guide più "avanzate".

      Elimina