Durante un pentest, ho trovato una condivisione di rete con molti binari (.exe) disponibili con diritti RW. Lo scopo di questa condivisione è mettere a disposizione degli utenti strumenti generici. Tuttavia, qualsiasi utente autenticato può modificarli e aggiungere un payload in esso. Voglio fornire una dimostrazione per mostrare la fattibilità di questo.
In sostanza, ciò che ho ottenuto finora si riduce a:
1: create a new section in the sections table,
2: add empty bytes at the end of the file, at address and size according to those in the new section definition,
3: put a shellcode at the first byte of the empty section added,
4: change EntryPoint to point to this first byte of the shellcode.
Quando eseguo questo, il mio carico utile viene avviato.
Ora, vorrei reindirizzare il flusso di esecuzione al precedente EntryPoint, per eseguire il programma reale. Ho pensato che un semplice jmp
al EntryPoint originale sarebbe stato sufficiente. Infatti, il mio shellcode esegue, ma blocca l'esecuzione del processo (che è in effetti del tutto normale).
Ho pensato di avviare il mio shellcode in un thread separato. Ho bisogno che questo raggiunga l'indirizzo di funzioni come createThread. Non ho davvero idea di come farlo.
Inoltre, quando esco dalla mia sessione meterpreter, lo shellcode deve eseguire l'ultima istruzione jmp
per raggiungere la sezione .text
originale. Invece, termina semplicemente.
La mia conoscenza di ASM e shellcodeprogramming è piuttosto bassa: / Apprezzerei molto avere alcuni suggerimenti su doc che potrei aver perso l'esecuzione di questa demo. La furtività non sarà un problema in quanto il computer demo non avrà alcun AV. Molte grazie per l'aiuto!