Part1 前言
冰蝎是一款动态二进制加密网站管理客户端,其特点是流量AES加密,JSP文件很小,做红队或者攻防比赛的人,几乎人手一份。使用的人多了,必然被各种流量监控设备识别,所以需要手工对其魔改,去掉或者改掉一些流量特征。自己魔改冰蝎或者哥斯拉优势也明显,代码完全掌握在自己手里,可随时根据各种流量监控设备的规则,与时俱进地编写绕过代码。
这篇文章的核心内容主要基于我在2020年山东首届“明湖论剑”网络安全技术沙龙上分享的一个PPT,今天重新整理总结一下,感觉也不错。
Part2 思考3个问题
在进行冰蝎改造工作之前,首先思考3个问题,同时也借助这3个问题,分享几个迷惑管理员及蓝队分析人员的小技巧。
1 在流量监控设备的记录里,或者在Web访问日志中,显示了一系列404响应码的/admin.jsp访问,这些是不是webshell攻击行为呢?
这些都是webshell攻击行为!如下图所示,每条/admin.jsp访问记录的响应码都是404,但是webshell却是真实存在的,而且已经完成执行命令操作了。
具体是怎么实现的呢?其实非常简单,我只是加了一行代码而已。因为response对象在我们控制之下,意味着返回的response的属性我们是可以控制和修改的!
2 浏览器访问一个webshell地址,网页返回提示“HTTP ERROR 404”或者“找不到XXX的网页”,这个webshell就一定不存在吗?
其实这个webshell是存在的!404响应码也只是一个伪装而已。如下所示,我也只是加了一行代码而已,当使用GET方法去请求webshell时,返回404响应码。
3 一个webshell删除.jsp文件及.class文件就真的就完全删除了吗?
答案是不一定。请看如下这个jsp型shell,只要攻击者浏览器访问一下,就可以向tomcat中间件注入一个内存马,即使把jsp文件删除也没用。
Part3 冰蝎逆向修改过程
下面开始讲讲正式的冰蝎改造过程,我把详细的代码截图都贴出来了,大家到时候照着改就行。改造好的冰蝎就不放出来了,流传开了必然失效,因为始终敌不过流量监控设备的,这个道理就和免杀一样,一旦流传开免杀必然失效。
-
两次秘钥交互过程去除
如下图所示,冰蝎2.0在秘钥交互过程中会发两次请求,这个两次请求的特征非常明显,很容易被识别,所以想办法去掉。至于秘钥,我们自己魔改的话,完全可以换成静态秘钥的,然后再把流量数据包修改一下即可,比如添加一些额外字符进行混淆等等。
如下所示,这两次请求由Utils类控制,将url的相关代码注释掉即可。
-
更改为固定秘钥
在Utils类中的getRawKey方法的最后,向result对象写入秘钥。只要我们的秘钥不被知道,加密流量就解不开。
为了解耦合,方便随时更改秘钥,于是附带写了一个小工具,自动对冰蝎客户端的配置文件及附带的ASP、PHP、JSP马进行修改。
-
客户端屏幕不居中
冰蝎客户端打开之后,界面不居中,我比较喜欢居中格式的。在Main.java类中,添加如下代码即可,通过setLocation方法使冰蝎界面屏幕居中。
-
添加设置超时时间功能
冰蝎2.0如果访问一个不存在的url时,由于默认超时时间过长,会造成界面长时间卡死。经过分析,它的发包基本上都是基于HttpURLConnection类实现的,所以可以直接设置各种超时时间解决这个问题。
-
文件管理功能无法排序
冰蝎2.0的“文件管理”功能无法排序。我们在获取webshell之后,经常需要按照时间、文件大小对文件进行排序,以便找到有价值的配置文件或者敏感文件。这里改动幅度大一些,我添加了一个按钮,然后在按钮事件中加入了一段排序代码。
实现方法是,在MainShell类中添加一个按钮,并将排序功能代码写入按钮事件中。
排序功能代码如下:
-
无socks5代理设置功能
这里我原本也想加入一个按钮去实现的,但是弄出来界面不美观,索性就添加一个“载入配置文件”的功能,在配置文件中实现设置socks5代理吧。
配置文件内容如下:
-
请求数据包中Accept字段固定
这个好改,全局搜索setRequestProperty方法进行修改即可,修改成自己想要的http消息头:
-
Content-Type固定
这个好改,全局搜索setRequestProperty方法进行修改即可,修改成自己想要的http消息头:
和上述修改一样,全局搜索setRequestProperty方法进行修改即可:
-
User-Agent伪随机修正
这里需要强调一下,冰蝎2.0的User-Agent并不是完全随机的,点开webshell之前冰蝎客户端会随机选择一个user-agent,但是点开这个webshell之后,在当前的打开状态下,其User-Agent始终是这一个。
修正这个问题同样需要在Utils类中进行修改,然后把冰蝎中的User-Agent列表换成自己的,原版冰蝎中的User-Agent列表比较旧。
-
绕过OpenRASP
具体原理可以看以下这篇文章http://weishi.baidu.com/article/855
如下图所示,将冰蝎的包名全部改掉,记得RunCMD方法名也需要改掉。当然冰蝎3.0的包名已经没有这些特征了。
改造后的冰蝎几乎无特征可寻
Part4 总结
1. 随着流量监控设备的不断升级,很多团队都研发了属于自己的Webshell管理平台,然后小范围流传,很多红队人员也都自己魔改了一个冰蝎或者哥斯拉webshell管理工具。
2. 上述魔改过程,只是给大家开阔一下思路,有什么好的建议,欢迎公众号后台给我留言,一起讨论。
专注于网络安全技术分享,包括红队、蓝队、日常渗透测试、安全体系建设等
每周一篇,99%原创,敬请关注