Shhhloader 是一个仍在开发中的 Shellcode 加载器。它接收原始 Shellcode 作为输入,并编译一个 C++ 存根,该存根会执行一系列不同的操作以尝试绕过 AV/EDR。附带的 Python 构建器可以在任何安装了 Mingw-w64 的 Linux 系统上运行。
2024年1月25日编辑:Shhhloader 现已支持 PoolParty 变体 7!还添加了一个选项,可将 PoolParty 与模块占用(Module Stomping)相结合,以防止执行的 Shellcode 驻留在未备份内存中。以下视频演示了这种针对 Defender ATP 的新注入方法:
┳┻|
┻┳|
┳┻|
┻┳|
┳┻| _
┻┳| •.•) - 嘘,AV 可能听到我们了!
┳┻|⊂ノ
┻┳|
用法: Shhhloader.py [-h] [-p explorer.exe] [-m QueueUserAPC] [-u] [-w] [-nr] [-ns] [-l] [-v] [-sc GetSyscallStub] [-d] [-dp apphelp.dll] [-s domain]
[-sa testlab.local] [-o a.exe] [-pp explorer.exe] [-ppv] [-np] [-cp] [-td ntdll.dll] [-ef NtClose]
file
ICYGUIDER 的自定义系统调用 Shellcode 加载器
位置参数:
file 包含原始 Shellcode 的文件
选项:
-h, --help 显示此帮助信息并退出
-p explorer.exe, --process explorer.exe
要注入的进程(默认: explorer.exe)
-m QueueUserAPC, --method QueueUserAPC
Shellcode 执行方法(选项: PoolPartyModuleStomping, PoolParty, ThreadlessInject, ModuleStomping, QueueUserAPC,
ProcessHollow, EnumDisplayMonitors, RemoteThreadContext, RemoteThreadSuspended, CurrentThread)(默认: QueueUserAPC)
-u, --unhook 在当前进程中取消挂钩 NTDLL
-w, --word-encode 将 Shellcode 以英文单词数组形式保存在存根中
-nr, --no-randomize 禁用系统调用名称随机化
-ns, --no-sandbox 禁用沙箱检测
-l, --llvm-obfuscator 使用 Obfuscator-LLVM 编译存根
-v, --verbose 启用执行时的调试消息
-sc GetSyscallStub, --syscall GetSyscallStub
系统调用执行方法(选项: SysWhispers2, SysWhispers3, GetSyscallStub, None)(默认: GetSyscallStub)
-d, --dll 生成 DLL 而不是 EXE
-dp apphelp.dll, --dll-proxy apphelp.dll
使用提供的合法 DLL 创建代理 DLL(文件必须存在于当前目录)
-s domain, --sandbox domain
沙箱逃避技术(选项: sleep, domain, hostname, username, dll)(默认: sleep)
-sa testlab.local, --sandbox-arg testlab.local
沙箱逃避技术的参数(例如: WIN10CO-DESKTOP, testlab.local)
-o a.exe, --outfile a.exe
编译文件的名称
PPID 欺骗:
-pp explorer.exe, --ppid explorer.exe
用于 PPID 欺骗的父进程(默认: explorer.exe)
-ppv, --ppid-priv 启用对特权父进程的欺骗(默认禁用)
-np, --no-ppid-spoof 禁用 PPID 欺骗
ThreadlessInject:
-cp, --create-process 创建进程而不是注入到现有进程
-td ntdll.dll, --target-dll ntdll.dll
包含要覆盖的导出函数的目标 DLL
-ef NtClose, --export-function NtClose
要覆盖的导出函数
特性:
以下是使用 ThreadlessInject 方法将 Havoc beacon 注入 IE 而不产生任何警报及最小事件记录(针对 Microsoft Defender for Endpoint (MDE) EDR)的 PoC 视频(录制于 2023年4月3日):
以下视频演示了通过 DLL 代理执行的模块占用(Module Stomping)注入技术(录制于 2022年8月9日):
Shhhloader 也已通过 @jakobfriedl 的模块集成到 Havoc C2 框架 中。以下视频演示了该模块:
已知问题/说明:
-p 标志提供你已知或怀疑已在目标系统上运行的进程名称。-cp 选项,此操作将自动完成。希望很快能找到使其与挂起进程一起工作的方法。计划更新:
可选: 要使用 Obfuscator-LLVM 标志,你必须在系统上安装它以及 wclang。这可能会有些麻烦,但只要有毅力应该可以完成。以下是我在 Kali Linux 系统上安装 OLLVM llvm-13.x 分支所使用的步骤:
# 克隆并运行 CMake
git clone -b llvm-13.x https://github.com/heroims/obfuscator.git
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF ../obfuscator/llvm/
# 配置 CMake 并编译 OLLVM
export clang_build_dir=$(cd ../; pwd)/obfuscator/clang
sed -i 's/LLVM_TOOL_CLANG_BUILD:BOOL=OFF/LLVM_TOOL_CLANG_BUILD:BOOL=ON/g' CMakeCache.txt
sed -i "s|LLVM_EXTERNAL_CLANG_SOURCE_DIR:PATH=|LLVM_EXTERNAL_CLANG_SOURCE_DIR:PATH=$clang_build_dir|g" CMakeCache.txt
make -j7
# 编译完成后,备份原始 clang 二进制文件
mv /usr/bin/clang /usr/bin/clang13.0.1
mv /usr/bin/clang++ /usr/bin/clang++13.0.1
# 然后在 OLLVM build/bin 目录中,复制新构建的 clang 二进制文件
cp bin/clang /usr/bin/clang
cp bin/clang++ /usr/bin/clang++
# 然后安装 wclang
cd ..
git clone https://github.com/tpoechtrager/wclang.git
cd wclang/
cmake -DCMAKE_INSTALL_PREFIX=_prefix_ .
make
make install
export wclang_path=$(pwd)/_prefix_/bin
echo "export PATH=$wclang_path:$PATH" >> ~/.bashrc
export PATH=$wclang_path:$PATH
# 然后备份原始 lib 文件
cp -R /lib/llvm-13/lib/clang/13.0.1/include/ /lib/llvm-13/lib/clang/13.0.1/include_backup/
# 最后在 OLLVM build/bin/lib/clang/13.0.1/ 目录中,复制 include 文件夹
cd ../build/lib/clang/13.0.1/
cp -R include/ /lib/llvm-13/lib/clang/13.0.1/
可能有更好的方法,但这对我是有效的。如果遇到问题,请继续尝试,并确保可以运行 x86_64-w64-mingw32-clang++ -v,且输出中包含 "Obfuscator-LLVM" 或 "heroims"。遗憾的是,我没有时间协助需要更多帮助的个人,但你可以阅读我在 Nimcrypt2 仓库中的 这个 issue,那里有一些用户设法在他们的系统上实现了这一点。
致敬与致谢: