
Техника внедрения шелл-кода. Предоставляется в виде заголовочного файла C++, отдельной программы на Rust или библиотеки.
Это совершенно новая техника для инъекции шеллкода с целью обхода AV и EDR. Данная техника вдохновлена Module Stomping и имеет некоторые сходства. На данный момент (23-01-2022) также hollows-hunter её не обнаруживает.
Самое большое преимущество этой техники в том, что она не перезаписывает весь модуль или PE-файл, а лишь одну функцию, и целевой процесс может продолжать использовать любую другую функцию из целевого модуля.
Недостаток заключается в том, что она сработает не для каждой функции в дикой природе (но сработает для большинства из них). Подробное объяснение в моём блоге: The Good, The Bad And The Stomped Function.
ПРИМЕЧАНИЕ: Возможно, что AV среагирует на это; если сигнатура является сигнатурой msfvenom/metasploit — это нормально! Вам просто нужно изменить шеллкод или зашифровать его.
ОБНОВЛЕНИЕ: Оказывается, это не первый доступный PoC — RastaMouse написал пост в блоге с похожей реализацией на C#.
Вы можете либо включить заголовочный файл в свою программу следующим образом:
#include "functionstomping.hpp"
int main() {
// Просто получите PID любым способом и передайте его в функцию.
DWORD pid = 3110;
FunctionStomping(pid);
return 0;
}
Либо использовать программу на Rust:
cd functionstomping
cargo b
functionstomping.exe <pid>
После запуска этой программы вы ОБЯЗАНЫ вызвать функцию из удалённого процесса! (Если вы использовали функцию по умолчанию CreateFile, то должны вызвать её из удалённого процесса!).
В настоящее время шеллкод настроен на запуск калькулятора, но всё, что вам нужно сделать — заменить unsigned char shellcode[] на ваш шеллкод. Я использовал C++ 17 и VS2019 для компиляции программы с заголовочным файлом C++ и версию Rust 2021 для компиляции программы на Rust (зависимости можно посмотреть в Cargo.toml).
Я никоим образом не несу ответственности за любые повреждения вашего компьютера/программы, возникшие в результате использования этого проекта. Я с радостью принимаю вклад; создавайте pull request, и я его рассмотрю!