安全矩阵

 找回密码
 立即注册
搜索
查看: 878|回复: 0

第25篇:冰蝎2.x过流量检测改造的全过程

[复制链接]

252

主题

252

帖子

1307

积分

金牌会员

Rank: 6Rank: 6

积分
1307
发表于 2022-10-14 22:57:54 | 显示全部楼层 |阅读模式
原文链接:第25篇:冰蝎2.x过流量检测改造的全过程


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. 上述魔改过程,只是给大家开阔一下思路,有什么好的建议,欢迎公众号后台给我留言,一起讨论。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 16:05 , Processed in 0.014606 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表