Translate

martedì 28 agosto 2012

TraiDoor v1: C FUD reverse backdoor

Salve a tutti!
Oggi per me si sono conclusi i rilassanti giorni di villeggiatura. Durante questo periodo di mare e relax ho comunque proseguito nello studio del C e delle tecniche di exploiting.
Ecco quindi che oggi, come avevo precedentemente annunciato, sono pronto a rilasciare una prima versione di TraiDoor. Il nome è una parola composta da "Traitor" e "Door".

TraiDoor v1

Si tratta di una backdoor interattiva scritta in C compatibile sia con sistemi Unix che con sistemi Windows. Il progetto è nato da un altro mio progetto, in python, chiamato AnankeShell.
A differenza del progetto di origine è decisamente più compatta, siamo passati da 4 MB a 27 KB. E' anche più performante e semplice da compilare. Si compone di due programmi: il Server, ossia la backdoor vera e propria; e il Client, utilizzato per controllare da remoto il sistema infettato dal Server.

Funzioni:
  • Esecuzione di comandi direttamente nella shell di sistema
  • DNS Spoofer, per dirottare la navigazione del sistema infettato
  • DNS Cleaner, per ripristinare la cache DNS
  • Elencatore di processi attivi
  • Terminatore di processi attivi
  • Utilizzo di connessione reverse per bypassare eventuali firewalls e routers
Nelle prossime versioni aggiungerò una funzione Keylogger e la possibilità di inviare i dati catturati ad un indirizzo email desiderato. Altro aspetto che mi piacerebbe migliorare è la possibilità di criptare le comunicazioni in rete della backdoor.

Requisiti per la compilazione:
  • Un compilatore (consiglio l'uso di GCC disponibile sia su Unix che su Win)
  • Se si compila su sistemi Windows utilizzando GCC bisogna utilizzare il parametro -lws2_32

Server:

Client:


Le informazioni divulgate sono da ritenersi a scopo puramente informativo. L'autore non si assume nessuna responsabilità riguardante l'uso improprio-illegale delle stesse.

10 commenti:

PROPPETTO ha detto...

Cosa devo compilare?

Ananke ha detto...

Devi compilare sia il Client che il Server.
Se li compili su una macchina Linux i programmi risultanti, funzioneranno su macchine Linux, se li compili su macchine Win i programmi funzioneranno su macchine Win.

Come sempre il "Server" è la backdoor e il "Client" serve per governarla.

tani20022 ha detto...

Ciao.
Ho letto e ho voluto provarlo il tuo codice.
Per quanto riguarda il client tutto ok, compilato e provato.
Invece il server non riesco a farlo funzionare il compilatore gcc mi da un errore in function main
file_server.c:132:3:warning:passing argument 1 of 'ShowWindow' makes pointer from integer without a cast [enabled by default] c:mingw\bin \eccetra/ include winuser.h:4091:24: note: expected 'HWND' but argument is of type 'int'

Ananke ha detto...

Ciao tani,
il codice è corretto. Ho provato a verificare anche io.
Ho notato che, dopo averlo provato a compilare in una cartella e avendo ricevuto i medesimi errori, ho risolto così:
Ho eliminato al cartelal ed il sorgente, ho creato una nuova cartella e vi ho salvato nuovamente il sorgente. Ho compilato con questo comando: gcc server.c -o server.exe -lws2_32

A questo punto non so eprhcè ma gli errori sono scomparsi. E' rimasto il "warning" ma lo puoi ignorare (non compromette la funzionalità del programma) stessa cosa per il "In file included..." che si riferisce allo stesso warning.

Fammi sapere se hai risolto o meno, così che possa eventualmente aiutarti.

P.S. Questa è una prima versione, quindi molto acerba, da testare, correggere e migliorare.

tani20022 ha detto...

Ciao Ananke,
non metto in dubio che il server funziona, tra l'altro ho fatto diverse prove coi tuoi shell scritti in python, ed non ho avuto problemi.
Ho provato ancora come mi hai sugerito ma purtroppo è la stessa situazione. Ho provato anche a lanciarlo ignorando il warning ma non va. Io chiaramente ho modificato la porta e l'ip nel server prima di compilarli. Io a posto dell ip ho messo il no-ip.
Il client invece non presenta problemi, e visto che acceta tutte le connessioni, l'ho provato con un mio piccolo server ed ha accetato la connessione. Provero ancora..
P.S sarebbe bello creare un tutorial o ancor meglio un video con le varie spiegazioni. ;)

Ananke ha detto...

Mi fa piacere che con le shell in Python ti sia trovato bene :)
Mi sembra di aver capito che il problema sia il tuo utilizzo del no-ip.
In quelle in python lo utilizzavi?
Se vuoi usare un dominio no-ip devi utilizzare questa funzione per ottenere l'IP: gethostbyname(name)
Dove name è l'indirizzo.
Ad esempio scrivi:
char IP[20];
IP = gethostbyname("www.ciao.it")

Poi sostituisci IP all'indirizzo che dvei normalmente impostare (togli le virgolette quando metti IP)

Fammi sapere

tani20022 ha detto...

Ciao Ananke,
si il problema era proprio quello,perche ho compilato il tuo codice mettendo l'ip e andava.
Ho provato a inserire la stringa che mi hai sugerito ma purtroppo non va.
Probabile non sono capace nel formularla.
Potresti implementarla questa funzione se ti va e magari chiamarla TraiDoor v1.1 con il suo Changelog.
Che ne pensi?

Ananke ha detto...

Riciao Tani,
mi sembra una buona idea ma voglio evitare di pubblicare troppe versioni con poche modifiche per non intasare il blog.
Se però ti può essere utile, cercherò questa sera o domani di modificare direttamente il sorgente presente in questo articolo.
Dopo di che aggiungerò la nuova possibilità all'elenco delle funzioni.

Però prima devo assicurarmi che il programma funzioni ma non ho un dominio NO-IP su cui testarlo. Potresti aiutarmi tu?
E' sufficiente che tu prova questo codice sorgente e mi dica se funzioni.
Grazie: http://pastebin.com/3ppgaGgM

Ti ringrazio per il tuo aiuto,
a presto

P.S. Probabilmente inserirò le righe nel sorgente commentate e spiegherò come attivarle e disattivare quelle per l'IP normale all'inizio del sorgente nei commenti. Quindi bisognerà leggerlo per poterlo compilare.

tani20022 ha detto...

Ciao Ananke,
prima di tutto chiedo scusa per non averti risposto imediatamente ma purtroppo impegni di lavoro mi hanno tenuto lontano dal pc. :( Questo capita a volte, non spesso fortunatamente.
Ho provato il tuo codice che mi hai indicato con il link,
e non ha funzionato. Credo di averlo compilato bene stavolta. Se vuoi ti passo una copia, in modo che li dai un occhiata per vedere se trovi errori.
P.s. Se ti serve testare quello che fai, non esitare a chiedere il mio aiuto, ne sarei felice. Ho aprezzato molto la nuova serie di lezioni, spieghi molto bene e mi piace perche parti sempre dalle basi, radici, e quindi senza mettere giu codici alla cieca (come il sottoscritto :( )

Ananke ha detto...

Mio caro Tani,
no hai niente di cui preoccuparti. Spesso i doveri ci allontanano dai nostro voleri.
Domani studierò meglio quella funzione e cercherò di rimediare. Se hai voglia di aiutarmi, e non ti dispiace darmi la tua email così che possiamo comunicare più rapidamente e comodamente, puoi scrivermi mediante questa pagina: http://ananke-shield.blogspot.it/p/contattami.html indicando nell'apposito campo la tua email. Così potrò risponderti e comunicarti la mia email e a quel punto, utilizzando la posta elettronica, potremo consultarci più velocemente.

Ti ringrazio per i complimenti e spero di mantenere un buon livello espositivo.
A presto Ananke

Posta un commento