冰蝎Behinder_v4.0
Posted 迷途羔羊pro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冰蝎Behinder_v4.0相关的知识,希望对你有一定的参考价值。
目录
一、冰蝎4.0☕️
冰蝎是一款基于Java开发
的动态加密通信流量的新型Webshell客户端,由于通信流量被加密,传统的WAF、IDS 设备难以检测,给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密,且加密密钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测
同时冰蝎v4.0相对于3.0版本,更新了较多内容,其中包括了开放了传输协议的自定义功能
下载地址:https://github.com/rebeyond/Behinder/releases
二、流量特征问题☕️
在流量层,冰蝎的aes特征一直是厂商查杀的重点,在主机层,aes相关的API也是一个强特征。既然是特征,那就一定存在一个一成不变的常量,那我们就把这个特征泛化一下,让他成为变量。为了一劳永逸解决这个问题,v4.0版本提供了传输协议自定义
功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。v4.0版本不再有连接密码的概念,你的自定义传输协议的算法就是连接密码
三、工作流程☕️
看一下冰蝎Payload流转的流程图:
1、本地对Payload进行加密,然后通过POST请求发送给远程服务端;
2、服务端收到Payload密文后,利用解密算法进行解密;
3、服务端执行解密后的Payload,并获取执行结果;
4、服务端对Payload执行结果进行加密,然后返回给本地客户端;
5、客户端收到响应密文后,利用解密算法解密,得到响应内容明文。
由上述流程可知,一个完整的传输协议由两部分组成,本地协议和远程协议
。由于客户端使用Java开发,因此本地协议的加解密算法需要用Java实现。远程协议根据服务端语言类型,可能为Java、php、C#、ASP。无论用哪种语言,同一个名称的传输协议,本地和远程的加解密逻辑应该是一致的,这样才能实现本地加密后,远程可以成功解密,远程加密后,本地同样也可以解密(因此如果修改默认的aes协议的key,则需要同时修改本地和远程的加密函数和加密函数中的key)
一个传输协议必须包含一对本地加解密函数,至少包含一对远程加解密函数(Java、PHP、C#、ASP中的一个或者多个)
如下是传输协议中的本地加解密
函数与远程加解密
函数:
传输协议的加解密函数名称分别为Encrypt
和Decrypt
,且都只有一个入参,参数类型为二进制字节流。在函加密数体内可以对字节流做任何加密,比如aes、rsa或者各种封装、拼接、自定义算法等等,最终将加密结果返回。在解密函数中利用对称算法将加密函数的结果进行解密,并将解密结果返回
四、演示过程☕️
可以注意到,冰蝎v4.0版本没有再附带server端代码,因为加解密函数是不固定的,因此服务端也是动态生成的
命令行环境运行冰蝎
java -jar Behinder.jar
打开如下的GUI界面
生成木马,点击左上角的传输协议,然后选择default_aes协议
,点击生成服务端,即可创建server服务端文件,同时生成木马文件
为了方便加解密一致性校验,冰蝎提供了即时加解密验证功能,输入加解密函数以后,可直接在窗口下方进行验证
生成server服务端文件里面的木马
将生成的PHP木马文件
上传到PHP环境的网站,然后在工具页面,鼠标右击新增shell,确定木马文件上传的URL、上传的脚本类型、生成脚本的协议,保存即可
成功连接则显示已连接
这里新增的功能,认为也是比较好的,平行空间
,同时也有一些扩展功能
五、流量检测☕️
1、Accept字段
流量特征
Accept: application/json, text/javascript, */*; q=0.01
检测思路:
浏览器可接受任何文件,但最倾向application/json 和 text/javascript
2、Content-Type
流量特征
Content-type: Application/x-www-form-urlencoded
检测思路:
可以把这个字段作为一个弱特征,辅助其他特征来检测
3、User-agent 字段
流量特征
冰蝎设置了10种User-Agent,每次连接shell时会随机选择一个进行使用
检测思路:
在较短较简单的content字段后加上fast_pattern关键字则会优先匹配这个content,避免浪费太长时间在匹配user-agent上
snort编写可以用content:“User-Agent”;content:“浏览器版本”,来匹配相应的十个浏览器
4、端口
流量特征
冰蝎与webshell建立连接的同时,javaw也与目的主机建立tcp连接,每次连接使用本地端口在49700左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加
检测思路:
可以对符合该范围内的端口告警
5、PHP webshell 中存在固定代码
流量特征
$post=Decrypt(file_get_contents("php://input"));
eval($post);
检测思路:
content字段中,将eval($post)作为流量特征纳入
6、长连接
流量特征
冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection
Connection: Keep-Alive
检测思路:
可以作为辅助的流量特征
7、连接密码
流量特征:
默认时,所有冰蝎4.0 webshell都有e45e329feb5d925b
一串密钥,该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
8、webshell特征
JSP webshell代码特征
PHP webshell代码特征
9、请求和响应
流量特征
☕️参考文章:
1、冰蝎v4.0传输协议详解
2、冰蝎4.0特征分析及流量检测思路
红队大杀器 Behinder_v4.0(冰蝎4.0)
Behinder_v4.0
GitHub : https://github.com/rebeyond/Behinder/releases/tag/Behinder_v4.0
修复
1.修复了在zimbra环境下的兼容性问题;
2.修复了在exchange环境下的兼容性问题;
3.修复了Linux环境下打开文件失败的问题;
4.修复了命令执行中输入反斜杠导致后续无法输入新命令的问题;
5.修复了列目录时目录跳动的问题;
6.修复JDK18+执行命令乱码的问题;
7.修复内网穿透模块的几个影响隧道稳定性的几个问题;
8.修复了代码编辑框的复制粘贴问题;
9.其他一些优化;
新增:
1.新增支持多线程超大文件上传、下载;
2.新增文件打包压缩;
3.新增数据库连接配置可保存;
4.取消硬编码通信协议,传输协议完全自定义,并支持即时在线校验测试。
5.新增平行世界模块,可对目标内网资产进行管理;
6.新增主机扫描、端口扫描、服务识别模块;
7.新增支持Java9~java15+版本Agent内存马一键注入;
8.新增支持Java Agent无文件落地注入内存马;
9.新增多层网络子Shell穿透模块,实现多层”蝎中蝎”;
10.新增离线模式,自动缓存数据,如shell丢失,可离线查看已缓存内容;
11.开放插件开发模块,可开发自定义插件,内置多款插件;
12.支持二进制服务端,服务端不再依赖web。
生成4.0木马
新马会生成在当前目录下的serve下
修改连接密码
冰蝎4.0连接自定义密码木马需要修改传输协议函数
注意本地和远程的加解密函数都要修改key(自定义马)
连接木马
新增功能
内网资产扫描
工具利用插件,支持自定义
以上是关于冰蝎Behinder_v4.0的主要内容,如果未能解决你的问题,请参考以下文章
Shell管理工具流量分析-下(冰蝎 3.0哥斯拉 4.0 流量分析)
Shell管理工具流量分析-下(冰蝎 3.0哥斯拉 4.0 流量分析)
[Java随笔]冰蝎2.0-jsp马交互部分源码解读及其特征检测