webshell-venom 3.3 :利用随机异或免杀任意php文件
1 前言
没想到这么快就800颗星了
这次算是一次比较重大的更新,具体情况请看下文。
2 webshell-venom 3.3 更新日志
-
代码结构优化,更清爽,方便自定义开发。
-
减小shell体积。
-
增加利用随机异或免杀任意php文件功能。
3 1. 结构优化
先上图吧
原来因为随手写的脚本,代码其实比较乱
这次整个重构了一遍,把随机的变量名随机字符串给标注了出来
shell结构一目了然,方便大家自己二次开发。
当然结构写的清爽也带来一些问题
比如说厂商写查杀正则的时候更方便了。。。
不过就像我一直强调的
重要的从来不是脚本,而是思路
只靠我一个人更新肯定是不行的
我在脚本里提供了很多公共函数,自己稍微修改一下就可以bypass。
4 2. 减小体积
这个自己生成一下就能看得到,不讲了。
|
|
5 3.对任意php文件免杀
这个是本文的重点,也是这次更新的重要部分,着重讲一下吧。
5.1 首先区分免杀跟加密的区别
-
加密就是让别人看不到源码
-
免杀是绕过waf的检测,使其无法识别为木马
-
单纯加密不一定可以免杀,但是免杀少不了加密
单纯加密的话百度搜一下php在线加密,一大堆网站
但是用过的都知道加密之后虽然谁都不认得了,但是D盾会报二级加密脚本
二级肯定不是咱们的目的,所以就要做0级的免杀。
5.2 任意文件免杀原理
首先大家要知道一点:
随便一个被D盾杀的妈都不认的shell,base64或者hex等编码后waf都不认得
所以思路就是:
先把原来的payload,给处理一遍
然后通过函数调用来解密并执行payload
5.3 如何调用
处理的话脚本中就是用的base64
那么如何调用呢
其实如果用eval的话很好写,随便改一下就免杀了
但是eval是一种语言结构不是函数,也就是不能像assert一样拆分就很难受
自己有点强迫症,shell中不能出现eval等关键字,不然会被最简单的字符串搜索查找到shell
所以就想到了assert
但是问题来了,assert不能执行多句
也就是说
|
|
最后只回显一个1,也就是只执行第一句话。
但是所要免杀的php文件肯定不止一句话
所以一般assert就要配合eval使用
也就是assert(eval(xxx;xxx;xxx;));
这种
还是有eval,那我还用个鸡儿的assert。。。
5.4 解决办法
研究了一下,发现利用array_map+assert+eval
加个数组处理就可以把eval给拆分掉了
|
|
上面的两个异或的字符串分别是assert跟eval
哈,然后放在类里调用一下就免杀了。
6 使用方法
|
|
7 免杀冰蝎
举个栗子,就免杀冰蝎吧。
8 更多玩法
还可以免杀我上次发的自己二次开发的大马
大马地址:
https://github.com/yzddmr6/BestShell
200kb好像有点大。。。
想减小体积的话自己加个gzin压缩吧
免杀后的demo已经放到大马项目里了
9 不足之处
python的base64函数有点傻逼,不会自己检测源文件的编码方式php是世界上最好的语言
我在脚本里用了 chardet 模块来探测可能的编码
但是用了一下发现不能做到百分百正确识别
utf8的没问题,遇到其他编码就容易乱码
如果gbk乱码的话就自己手工base64一遍替换payload吧