Attacco Dizionario a Server FTP

Per studi puramente accademici (giuro!), ho voluto testare le condizioni di sicurezza dei miei server FTP. Uno dei test più semplici è attaccare il server con “forza bruta” e/o altri attacchi simili. In questo articolo scriverò come realizzare un “attacco a dizionario” con una sola riga di comando, senza linguaggi di programmazione o tecnologie particolari.

serverfarmIniziamo ad analizzare il problema. Dobbiamo realizzare uno script che legga un file di testo contenente una serie di username e password che poi andremo a passare ad un comando di connessione FTP. Per risolvere questo passaggio per prima cosa ho preso in considerazione un piccolo linguaggio interpretato chiamato BPL del quale ho trovato anche il sorgente in C++. Pensavo che modificando opportunamente il sorgente del compilatore avrei potuto risolvere tutto in poche istruzioni. Mentre ci lavoravo sopra però mi sono reso conto che alla fine non sarebbe stata una soluzione alla portata di tutti, solo altri programmatori avrebbero potuto camprendere a fondo tale soluzione e così ho cercato meglio tra i comandi di Windows e ho trovato FOR.

Ammetto di aver sempre poco preso in considerazione la linea di comando di Windows e non conoscevo bene il funzionamento di questa utility. Tuttavia, con il solo utilizzo di FOR è possibile risolvere il problema sopra descritto:

C:\>for /f “tokens=1-2″ %%A in (dizionario.txt) do (c:\curl -u %%A:%%B -ftp ftp://111.222.333.444:21)

La illustro rapidamente. FOR è l’istruzione Windows per eseguire un certo compito in base al parametro indicato, in questo caso /f che indica la lettura di un file (parsing). Dopodichè è necessario indicare cosa ci troveremo nel file, due stringhe, quindi l’informazione “token=1-2″ specifica proprio cosa deve essere letto dal file (2 stringhe consecutive) per poi passarle alle variabili %%A e %%B. Il nome del file da leggere è “dizionario.txt”, che dovremo popolare con due stringhe separate da uno spazio per ogni riga, username e password, come l’esempio qui di seguito:

admin admin
admin password
user password
user user
user123 password
user123 user123
demo demo

eccetera eccetera ….

Altro passo necessario è trovare un’utility FTP che permetta la connessione al server con una sola riga di comando. In questo caso, per esempio, l’utility nativa di Windows non è utilizzabile poiché nella sua sintassi accetta username e password da file esterno oppure dopo la connessione al server. Per questo motivo ho cercato e trovato CURL che permette di connettersi specificando tutti i parametri sulla stessa riga di comando. Ecco quindi che possiamo comprendere anche l’ultima parte dello script. Con -u passiamo a curl lo username e la password lette dalle righe del file dizionario (variabili A e B) e con il comando -ftp gli passiamo l’indirizzo del server. La porta 21 che indica la porta di default dell’FTP può essere omessa oppure cambiata a seconda della necessità.

output_attaccoSi può fare di meglio

Come possiamo vedere, a differenza di alcuni anni fà, oggi è possibile affrontare operazioni che richiedevano una base di programmazione con semplici utility e comandi per batch file. E’ chiaro che il mio esempio è ridotto all’osso, si può fare di meglio, sempre comunque usando l’istruzione sopra indicata. Per esempio si potrebbe passare l’indirizzo IP dalla linea che richiama lo script all’interno del parametro -ftp di cURL. Per far questo possiamo usare il passaggio dell’IP come variabile al lancio del batch file:

C:\>attacco.bat 192.168.1.4

e poi leggere l’IP usando la variabile %1. Oppure ancora possiamo intercettare l’output dei tentativi di cURL reindirizzandolo in un file di testo e analizzandolo successivamente con calma.

Related Posts with Thumbnails
Be Sociable, Share!
Stampante PDF    Invia l'articolo in formato PDF   

4 thoughts on “Attacco Dizionario a Server FTP

  1. Hi. I saw your reference to BPL.

    Assume your dizionario.txt file contains:

    id1 pass1
    id2 pass2
    id3 pass3
    *

    You could use the following BPL program with something other than “echo” in the $cmd variable.

    # ftptest.bpl for http://www.guizzardi.net/?p=53

    fopen fil “dizionario.txt” “r”
    :looper
    finput a $fil
    if $a str_eq “*” goto endit

    # get the first word from $a as ID
    word id 1 $a

    # get the second word as password
    word pass 2 $a

    set cmd “echo Hello there ” $id ” ” $pass
    sys $cmd

    goto looper

    :endit
    fclose $fil

  2. piccola precisazione: curl esiste da molto tempo (è “nato” il 1997) e i comandi batch fin dal dos, le conclusioni tratte in “Si può fare di meglio” sono un pò azzardate (cit:”a differenza di alcuni anni fà, oggi è possibile affrontare operazioni che richiedevano una base di programmazione con semplici utility e comandi per batch file”)
    byez

  3. Non ho capito il senso del commento.

    Si può ovviamente fare di meglio usando linguaggi ad alto livello rispetto ai semplici comandi DOS, CURL è nato quando già c’era Windows, prima di Windows questo non si poteva fare se non scrivendo un programma apposito.

    La prossima volta firmati…

Leave a Reply