webshell分析篇

中国菜刀

算是最早接触的一款webshell管理工具了,使用起来非常简单,只要用各类语言写出“一句话木马”,然后创建连接即可。但由于没有什么混淆,导致特征太明显,基本都被waf杀了。另菜刀传来传去的,很难保证有没有留下后门,可能我自己使用的就存在后门,所以菜刀已经渐渐退出江湖。

我在虚拟机里用phpstudy启动了环境,创建一个测试webshell

用菜刀新建一个连接,太久没用菜刀了,发现只能支持eval这种一句话木马…

同时测试时,发现在高版本的PHP中,一句话木马已经不起作用了,用菜刀连不上了,只能在PHP5等版本中使用。功能点不多但足够强大,包括文件上传下载,虚拟终端,对于后渗透上传提权EXP或后续上传大马、读取配置文件已经足够。

PHP7新特性使菜刀威力大减,在PHP7中assert()变成了一种语言结构,不再支持可变函数。

Dynamic calls for certain functions have been forbidden (in the form of $func() or array_map('extract', ...), etc). These functions either inspect or modify another scope, and present with them ambiguous and unreliable behavior. The functions are as follows:

assert() - with a string as the first argument

所以PHP7中的assert()默认只能执行phpinfo()eval($_POST['cmd'])这样的动态函数而不再像以往那样能执行assert($_POST['cmd']),捕获菜刀建立连接语法。因为菜刀使用了assert()进行管理,所以在PHP7中已不再适用。

使用wireshark查看一下菜刀发包,以查看文件为例–PHP5

使用了我们设置的密码cmd,然后把payload使用base64编码传输

感觉只要把body解码再特征匹配,遇到任何waf都会凉凉。

蚁剑

蚁剑在PHP7中能正常使用,而且感觉打开速度比菜刀要快上不少。不过使用了几回均发现UA头是直接有强特征,不知道是不是使用姿势不对

About介绍是说作为菜刀的改动版,作者是封装了一层加解密。另在GitHub下载的蚁剑中附带有几个webshell,分别对应着assertcreate_function()公私钥加密通信等。但PHP7上文已提及assert()已大改,同时还有preg_replace()取消/e模式,废弃了create_function()(存疑,查找资料更多是不推荐使用),所以先测试一下蚁剑的webshell在PHP7中的表现。

php_assert_script.php

不知道为什么,一直连不上,即使把PHP版本改成5也不行。继续wireshark查看返回数据包,在PHP5中没有报错也没有返回什么有价值的信息,在PHP7中则报错了,原因是PHP7中assert()不再支持类似eval()的语法。

php_create_function_script.php

PHP抛出了warning,但还是可以正常使用蚁剑连接,正常使用。

关于公私钥加密的webshell,感觉跟梯子加密传输没区别,之前打awd生成了一个公钥插入使用了,但现在找不到了…

冰蝎

自从用了以后,就没有再用过其它的webshell管理工具了,自带的shell带免杀混淆,页面简洁,功能强大,没理由不继续使用。

之前冰蝎2.0被分析出每次建立连接都会发送两次请求(红蓝对抗——加密Webshell“冰蝎” 流量 100%识别),如图

在使用冰蝎3.0时取消了这个动作,改成将密钥写死在文件中,下图为两个版本的shell文件对比。

变化
– Server解密用的$key不再动态生成,而是预先写死在文件内,所以没有开始时的两次请求
– 类实现函数由__construct改为__invoke,配合call_user_func()使用,以对象的形式调用类
– 最终调用从直接调用类改为使用call_user_func()调用,感觉特征更大了,但开发人员也挺喜欢用这个函数

如果能与webshell连接,个人体验冰蝎是最好的,自带的加解密传输能隐匿特征。对于新版冰蝎3.0个人还没深入研究,首先jar包整整大了一倍,不知道是不是加了许多“骚操作”,有待日后研究。对于webshell,感觉可以根据网上的手法再混淆一下webshell特征,使得上传webshell时不会被目录扫描脚本识别。由于eval()不能够像$a($b)这样被调用,也没有什么好办法隐匿,但其他特征都被我给混淆了,主要通过函数返回,字符替换等方式修改。

最新版的D盾

根据D盾匹配出的规则逐个修改后的webshell

丢到环境里,能正常运行。

总的来说,只是自己稍微修改了一下,不得不佩服大佬们能写出冰蝎这么nb的工具。

发表评论

电子邮件地址不会被公开。 必填项已用*标注