0%

win下的免杀后门探究(二)

学习编写劫持程序流的后门程序

实验环境

监听机 kali linux 64位

测试机win7 sp1 32位

测试模板:putty

测试杀软:火绒安全4.0.76.9

360安全卫士11.4.0.1002

在线测试网站:www.virustotal.com

静态分析:IDA PRO

动态分析:OLLYDBG

上一篇主要讲了一些现成payload生产后门的利用,但这些后门除了回弹给攻击者一个shell以外是没有其他功能的。当被害人点开伪装成正常软件的后门后,发现什么都没有发生,是不是会起疑呢?

作为一个小白,我首先想到的是将正常的软件和后门捆绑打包成一个可执行文件,这样既会执行正常软件又会启动后门。

于是百度一番,找到了一个exe捆绑软件 :exe捆绑机

简单捆绑了一下后门程序和putty

Putty and payload2.exe的检测结果

这结果也是醉了,看看到底什么情况。
用IDA打开正常的putty

可以看到代码段和数据段,且权限区分很明显(只有代码段拥有执行权限)
在比较一下捆绑过后的

还真是简单粗暴啊,直接分别把两个程序写到upx0和upx1段里了,而且每个段都有执行权限,这不报毒都不可能啊。

由此我们想到了一种新姿势,即把恶意代码嵌入正常程序中,以劫持程序流的形式让用户主动触发恶意代码造成后门回连。这样的后门较为隐蔽,即用户必须触发某个程序动作后才会导致后门的回连。
当用户双击恶意可执行文件时,进程创建,但后门并未连接,也没有异常的流量产生,只用当用户触发某个程序动作时才会回连,这样可以绕过部分AV在程序运行时的检测。

下面依旧使用putty作为演示对象

1.在代码段虚地址为0x0041CB6E的位置找到字符串login as的字样,用过Putty的同学都知道选择ip后点击open就会跳转到login as的登录界面,因此选择在这儿劫持程序流。

2.寻找code cave,需要在程序中找到一个合适的空间来嵌入shellcode。利用Cminer或者Cave_miner工具来找代码洞(其实手工也行)

可能是我64位下的pe32装载的问题,Cminer没有找到起始地址,无奈试下Cave_miner

在data段发现两个代码洞,但是在OD里没有看到所示的虚地址…(后来找出是段标志位的原因,导致od和cave_miner对data段的解析不同)
只能手动在data段尾找到没有分配的空间,就从虚地址0x0047A478开始作为shellcode内嵌的起始地址。

把之前找到的程序起点改为JMP 0047A478,即跳转到我们要填充的shellcode的首地址

3.利用msfvenom生成shellcode并以hex形式输出,把shellcode复制到选定的代码洞中

4.现在的后门是无法运行的,因为shellcode所在的data段是没有x权限的,最后再用lordpe改下data段的权限。

5.运行程序,点击open后,后门回连

6.在shellcode执行完后我们希望可以返回主程序流
即在shellcode后加入下列指令的机器码
Popfd
Popad
Push offset 00467c7c
Jmp 0041cb73
nop

*选用上一章节免杀效果较好的payload生成的shellcode,实战价值很高。

参考资料:《程序员的自我修养链接装载与库》
嘶吼:免杀的艺术