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

f1cebc9793750f9d6b0330e78173a4c2.png

 Part1 前言 

冰蝎是一款动态二进制加密网站管理客户端,其特点是流量AES加密,JSP文件很小,做红队或者攻防比赛的人,几乎人手一份。使用的人多了,必然被各种流量监控设备识别,所以需要手工对其魔改,去掉或者改掉一些流量特征。自己魔改冰蝎或者哥斯拉优势也明显,代码完全掌握在自己手里,可随时根据各种流量监控设备的规则,与时俱进地编写绕过代码。

这篇文章的核心内容主要基于我在2020年山东首届“明湖论剑”网络安全技术沙龙上分享的一个PPT,今天重新整理总结一下,感觉也不错。

 Part2 思考3个问题 

在进行冰蝎改造工作之前,首先思考3个问题,同时也借助这3个问题,分享几个迷惑管理员及蓝队分析人员的小技巧。

 1   在流量监控设备的记录里,或者在Web访问日志中,显示了一系列404响应码的/admin.jsp访问,这些是不是webshell攻击行为呢?

ea1de000c5e1a18e6164af4219a4abe7.png

这些都是webshell攻击行为!如下图所示,每条/admin.jsp访问记录的响应码都是404,但是webshell却是真实存在的,而且已经完成执行命令操作了。

087059d94286a9bac9fe096c7b45cf97.png

具体是怎么实现的呢?其实非常简单,我只是加了一行代码而已。因为response对象在我们控制之下,意味着返回的response的属性我们是可以控制和修改的!

8827e9f06e7818dbbd39d6d52f82a87d.png

 2   浏览器访问一个webshell地址,网页返回提示“HTTP ERROR 404”或者“找不到XXX的网页”,这个webshell就一定不存在吗?

ce2086b2c0cb4945041b28f64cb9aebd.png

其实这个webshell是存在的!404响应码也只是一个伪装而已。如下所示,我也只是加了一行代码而已,当使用GET方法去请求webshell时,返回404响应码。

a5188dd102f1c2730729cb63d7de13c0.png

 3   一个webshell删除.jsp文件及.class文件就真的就完全删除了吗?

答案是不一定。请看如下这个jsp型shell,只要攻击者浏览器访问一下,就可以向tomcat中间件注入一个内存马,即使把jsp文件删除也没用。

93f567fb8f151f4aa1f0cf35bbe072c0.png

 Part3 冰蝎逆向修改过程 

下面开始讲讲正式的冰蝎改造过程,我把详细的代码截图都贴出来了,大家到时候照着改就行。改造好的冰蝎就不放出来了,流传开了必然失效,因为始终敌不过流量监控设备的,这个道理就和免杀一样,一旦流传开免杀必然失效。

  • 两次秘钥交互过程去除

如下图所示,冰蝎2.0在秘钥交互过程中会发两次请求,这个两次请求的特征非常明显,很容易被识别,所以想办法去掉。至于秘钥,我们自己魔改的话,完全可以换成静态秘钥的,然后再把流量数据包修改一下即可,比如添加一些额外字符进行混淆等等。

d571865e3a713125cfd0d2b7056d99de.png

如下所示,这两次请求由Utils类控制,将url的相关代码注释掉即可。

0939d8f67872e60d7a4e40c4cf49bdb8.png

  • 更改为固定秘钥

在Utils类中的getRawKey方法的最后,向result对象写入秘钥。只要我们的秘钥不被知道,加密流量就解不开。

b7ce3fdb67021015dcb1063571011fb5.png

为了解耦合,方便随时更改秘钥,于是附带写了一个小工具,自动对冰蝎客户端的配置文件及附带的ASP、PHP、JSP马进行修改。

49531a686ee6c5292ad867c7fc916081.png

  • 客户端屏幕不居中

冰蝎客户端打开之后,界面不居中,我比较喜欢居中格式的。在Main.java类中,添加如下代码即可,通过setLocation方法使冰蝎界面屏幕居中。

9379f689cc9c103a33fa1a355d4d9a87.png

  • 添加设置超时时间功能

冰蝎2.0如果访问一个不存在的url时,由于默认超时时间过长,会造成界面长时间卡死。经过分析,它的发包基本上都是基于HttpURLConnection类实现的,所以可以直接设置各种超时时间解决这个问题。

15b280f0103d89546c868c937c30dae5.png

  • 文件管理功能无法排序

冰蝎2.0的“文件管理”功能无法排序。我们在获取webshell之后,经常需要按照时间、文件大小对文件进行排序,以便找到有价值的配置文件或者敏感文件。这里改动幅度大一些,我添加了一个按钮,然后在按钮事件中加入了一段排序代码。

8b2e94d068d47a384d826b51e34c6359.png

实现方法是,在MainShell类中添加一个按钮,并将排序功能代码写入按钮事件中。

6c8bb3398f70a98acb08223768e6dde2.png

排序功能代码如下:

6287b85e280be95e817341642f68cc06.png

  • 无socks5代理设置功能

这里我原本也想加入一个按钮去实现的,但是弄出来界面不美观,索性就添加一个“载入配置文件”的功能,在配置文件中实现设置socks5代理吧。

45b34f92bee31c772d20613fc560cf03.png

配置文件内容如下:

136e7ac734f37d39a659bf3b5ca97909.png

  • 请求数据包中Accept字段固定

这个好改,全局搜索setRequestProperty方法进行修改即可,修改成自己想要的http消息头:

61e1a97b492c2ec7e5afc867f6f53433.png

f01625ffe77c33269d79382724ab817b.png

  • Content-Type固定

这个好改,全局搜索setRequestProperty方法进行修改即可,修改成自己想要的http消息头:

19bbcb6b44cff30127dde21396372d18.png

和上述修改一样,全局搜索setRequestProperty方法进行修改即可:

67c07ecbb7b4f64c7cfe7772314ea54e.png

e823c1d8e74919a0e1794b4b9bbcdc89.png

  • User-Agent伪随机修正

这里需要强调一下,冰蝎2.0的User-Agent并不是完全随机的,点开webshell之前冰蝎客户端会随机选择一个user-agent,但是点开这个webshell之后,在当前的打开状态下,其User-Agent始终是这一个。

修正这个问题同样需要在Utils类中进行修改,然后把冰蝎中的User-Agent列表换成自己的,原版冰蝎中的User-Agent列表比较旧。

eac1c2ea0d23a5a80d1f7f2c997d4e01.png

  • 绕过OpenRASP

具体原理可以看以下这篇文章http://weishi.baidu.com/article/855

98e49a94c1b4f83204011eb310f282b4.png

如下图所示,将冰蝎的包名全部改掉,记得RunCMD方法名也需要改掉。当然冰蝎3.0的包名已经没有这些特征了。

64d5dc65eb7fee828f2bbc2bb8cfbcbf.png

改造后的冰蝎几乎无特征可寻

7361c8cfa80cce7a95ac96bf06f936ca.png

 Part4 总结 

1.  随着流量监控设备的不断升级,很多团队都研发了属于自己的Webshell管理平台,然后小范围流传,很多红队人员也都自己魔改了一个冰蝎或者哥斯拉webshell管理工具。

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

57b5d31d55c3e2cb71819d6388d4b8cb.png

专注于网络安全技术分享,包括红队、蓝队、日常渗透测试、安全体系建设等

每周一篇,99%原创,敬请关注

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希潭实验室

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值