
Técnica de inyección de shellcode. Proporcionado como encabezado de C++, programa independiente de Rust o biblioteca.
Esta es una técnica completamente nueva para inyección de shellcode con el fin de evadir AVs y EDRs. Esta técnica está inspirada en Module Stomping y tiene algunas similitudes. Hasta la fecha (23-01-2022), hollows-hunter tampoco lo detecta.
La mayor ventaja de esta técnica es que no sobrescribe un módulo o PE completo, solo una función, y el proceso objetivo aún puede usar cualquier otra función del módulo objetivo.
La desventaja es que no funcionará con todas las funciones existentes (pero funcionará con la mayoría); la explicación exacta está en mi blog: The Good, The Bad And The Stomped Function.
NOTA: Es posible que el AV marque esto; si la firma es una firma de msfvenom/metasploit, ¡está bien! solo necesitas cambiar el shellcode o encriptarlo.
ACTUALIZACIÓN: Aparentemente este no es el primer PoC disponible y RastaMouse escribió una entrada de blog que es algo similar en C#.
Puedes incluir el encabezado en tu programa de la siguiente manera:
#include "functionstomping.hpp"
int main() {
// Just get the pid in any way and pass it to the function.
DWORD pid = 3110;
FunctionStomping(pid);
return 0;
}
O usa el programa en rust:
cd functionstomping
cargo b
functionstomping.exe <pid>
Después de ejecutar este programa DEBES llamar a la función desde el proceso remoto. (Si usaste la función predeterminada CreateFile, ¡debes llamarla desde el proceso remoto!).
Actualmente, el shellcode a ejecutar solo muestra una calculadora, pero todo lo que necesitas hacer es reemplazar unsigned char shellcode[] con tu shellcode. Usé C++ 17 y VS2019 para compilar el programa con el encabezado C++ y la versión 2021 de rust para compilar el programa en rust (puedes ver las dependencias en el Cargo.toml).
No soy responsable de ninguna manera por ningún tipo de daño causado a tu computadora/programa como resultado de este proyecto. Acepto con gusto contribuciones, ¡haz un pull request y lo revisaré!