
Tecnica di iniezione di shellcode. Fornita come header C++, programma Rust autonomo o libreria.
Questa è una tecnica completamente nuova per l'iniezione di shellcode al fine di eludere AV ed EDR. Questa tecnica è ispirata da Module Stomping e presenta alcune somiglianze. Alla data odierna (23-01-2022) anche hollows-hunter non la rileva.
Il più grande vantaggio di questa tecnica è che non sovrascrive un intero modulo o PE, ma solo una singola funzione, e il processo target può ancora utilizzare qualsiasi altra funzione del modulo target.
Lo svantaggio è che non funzionerà per ogni funzione esistente (ma funzionerà per la maggior parte di esse); la spiegazione esatta è nel mio blog: The Good, The Bad And The Stomped Function.
NOTA: È possibile che l'AV lo segnali, se la firma è una firma di msfvenom/metasploit va bene! devi solo cambiare lo shellcode o crittografarlo.
AGGIORNAMENTO: Apparentemente questo non è il primo PoC disponibile e RastaMouse ha scritto un post sul blog che è una cosa simile in C#.
Puoi includere l'header nel tuo programma in questo modo:
#include "functionstomping.hpp"
int main() {
// Ottieni il pid in qualsiasi modo e passalo alla funzione.
DWORD pid = 3110;
FunctionStomping(pid);
return 0;
}
Oppure usa il programma Rust:
cd functionstomping
cargo b
functionstomping.exe <pid>
Dopo aver eseguito questo programma, DEVI chiamare la funzione dal processo remoto! (Se hai usato la funzione predefinita CreateFile, allora devi chiamarla dal processo remoto!).
Attualmente, lo shellcode da eseguire serve solo ad aprire una calcolatrice, ma tutto ciò che devi fare è sostituire unsigned char shellcode[] con il tuo shellcode. Ho usato C++ 17 e VS2019 per compilare il programma con l'header C++ e la versione 2021 di Rust per compilare il programma Rust (puoi vedere le dipendenze nel Cargo.toml).
Non sono responsabile in alcun modo per qualsiasi tipo di danno causato al tuo computer/programma a causa di questo progetto. Accetto volentieri contributi, fai una pull request e la revisionerò!