
Técnica de injeção de shellcode. Fornecido como cabeçalho C++, programa Rust independente ou biblioteca.
Esta é uma técnica totalmente nova para injeção de shellcode visando evadir AVs e EDRs. Esta técnica é inspirada no Module Stomping e possui algumas semelhanças. Até esta data (23-01-2022) também o hollows-hunter não a detecta.
A maior vantagem desta técnica é que ela não sobrescreve um módulo ou PE inteiro, apenas uma função, e o processo alvo ainda pode usar qualquer outra função do módulo alvo.
A desvantagem é que não funcionará para todas as funções existentes (mas funcionará para a maioria delas); a explicação exata está no meu blog: The Good, The Bad And The Stomped Function.
NOTA: É possível que o AV sinalize isso; se a assinatura for uma assinatura do msfvenom/metasploit, está tudo bem! Você só precisa alterar o shellcode ou criptografá-lo.
ATUALIZAÇÃO: Aparentemente esta não é a primeira PoC disponível e o RastaMouse escreveu uma postagem no blog que é uma coisa semelhante em C#.
Você pode incluir o cabeçalho no seu programa assim:
#include "functionstomping.hpp"
int main() {
// Obtenha o pid de qualquer forma e passe-o para a função.
DWORD pid = 3110;
FunctionStomping(pid);
return 0;
}
Ou use o programa em Rust:
cd functionstomping
cargo b
functionstomping.exe <pid>
Depois de executar este programa, você DEVE chamar a função a partir do processo remoto! (Se você usou a função padrão CreateFile, então deverá chamá-la a partir do processo remoto!).
Atualmente, o shellcode a ser executado é apenas para abrir uma calculadora, mas tudo que você precisa fazer é substituir o unsigned char shellcode[] pelo seu shellcode. Usei C++ 17 e VS2019 para compilar o programa com o cabeçalho C++ e a versão 2021 do Rust para compilar o programa Rust (você pode ver as dependências no Cargo.toml).

Não sou responsável de forma alguma por qualquer tipo de dano causado ao seu computador/programa como resultado deste projeto. Aceito contribuições com satisfação; faça um pull request e eu o revisarei!