今天给大家介绍的是一款名叫 sRDI 的注入工具, 它可以基于 Shellcode 实现反射型 DLL 注入, 并能够将 DLL 转换成独立的 Shellcode.
工具介绍
sRDI 的所有功能基于以下两个组件:
1. 一个 C 语言项目, 可将 PE Loader 编译为 Shellcode;
2. 转换代码负责将 DLL,RDI 和用户数据进行绑定.
该项目由以下元素组成:
- ShellcodeRDI: 编译 Shellcode;
-NativeLoader: 在必要情况下将 DLL 转换为 Shellcode, 并将其注入至内存;
-DotNetLoader:NativeLoader 的 C# 实现;
-Python\ConvertToShellcode.py: 将 DLL 转换为 Shellcode;
-Python\EncodeBlobs.py: 对已编译的 sRDI 进行编码, 并实现动态嵌入;
-PowerShell\ConvertTo-Shellcode.ps1: 将 DLL 转换为 Shellcode;
-FunctionTest: 导入 sRDI 的 C 函数, 用于调试测试;
-TestDLL: 样本 Dll, 包含两个导出函数, 可用于后续的加载和调用;
使用样例
在使用该工具之前, 我建议大家先对反射型 DLL 注入有一个基本了解, 可以先阅读一下[ 这篇文章 https://disman.tl/2015/01/30/an-improved-reflective-dll-injection-technique.html ] .
使用 Python 将 DLL 转换为 Shellcode:
- from ShellcodeRDI import *
- dll =open("TestDLL_x86.dll", 'rb').read()
- shellcode= ConvertToShellcode(dll)
使用 C# 加载器将 DLL 加载进内存:
DotNetLoader.exe TestDLL_x64.dll
使用 Python 脚本转换 DLL, 并用 NativeLoader 完成加载:
- python ConvertToShellcode.py TestDLL_x64.dll
- NativeLoader.exe TestDLL_x64.bin
使用 PowerShell 转换 DLL, 并用 Invoke-Shellcode 完成加载:
- Import-Module.\Invoke-Shellcode.ps1
- Import-Module.\ConvertTo-Shellcode.ps1
- Invoke-Shellcode-Shellcode (ConvertTo-Shellcode -File TestDLL_x64.dll)
工具隐蔽性
目前社区有多种方法可检测内存注入, 加载功能实现了两种增强隐蔽性的方法:
1. 适当的权限: 在对内存空间进行定位时, 工具会根据内存区域的特征来设置内存权限;
2.PEHeader 清理 (可选): 目标 DLL 的 DOS Header 和 DOS Stub 会在加载完成之后被清空为 NULL 字节, 这一步可通过 C/C# 代码, 或命令行参数(Python 或 PowerShell) 来实现.
工具构建
本项目采用 Visual Studio 2015(V140)和 Windows SDK 8.1 构建, Python 脚本基于 Python 3 开发, Python 和 Powershell 脚本位于:
- Python\ConvertToShellcode.py
- PowerShell\ConvertTo-Shellcode.ps1
项目构建完成之后, 可在下列位置找到其他组件代码:
- bin\NativeLoader.exe
- bin\DotNetLoader.exe
- bin\TestDLL_.dll
- bin\ShellcodeRDI_.bin
使用到的其他项目
本项目用于将 C 代码编译为 Shellcode 时所采用的项目框架为 Mathew Graeber 的 PIC_BindShell:[ 传送门 http://www.exploit-monday.com/2013/08/writing-optimized-windows-shellcode-in-c.html ]
来源: http://www.tuicool.com/articles/ENfYVj