小迪安全v2023学习笔记(一百四十五讲)—— Webshell篇魔改冰蝎打乱特征指纹新增加密协议过后门查杀过流量识别
文章目录
- 免杀对抗——第一百四十五天
- Webshell篇&魔改冰蝎&打乱特征指纹&新增加密协议&过后门查杀&过流量识别
- Webshell工具 - 冰蝎Behinder
- 简介
- 流量特征
- 冰蝎3.0
- 冰蝎4.0
- 魔改冰蝎 - JAR反编译打包构建
- 魔改冰蝎 - 防识别-打乱特征指纹
- 魔改冰蝎 - 防查杀-新增加密/传输协议
- 修改加密方式
- 修改传输方式
免杀对抗——第一百四十五天
Webshell篇&魔改冰蝎&打乱特征指纹&新增加密协议&过后门查杀&过流量识别
Webshell工具 - 冰蝎Behinder
简介
- 冰蝎是一款基于 Java 开发的动态加密通信型 Webshell 管理工具,它有如下特点:
- 通信加密:使用 AES 或 XOR 对称加密算法对通信数据进行加密,密钥协商阶段动态生成密钥,后续通信基于该密钥进行加解密
- 跨平台兼容:客户端基于 Java,支持 Windows、Linux、macOS 等主流操作系统
- 功能丰富:支持命令执行、虚拟终端、文件管理、SOCKS 代理、反弹 shell、数据库管理、自定义代码、Java 内存马注入等
- 我们在实战中主要用到冰蝎3.0和冰蝎4.0,它们两款的主要差别在于通信加密的密钥协商环节:
- 冰蝎3.0硬编码了密钥为rebeyond的MD5前16位,因此没有密钥协商阶段
- 冰蝎4.0默认密钥位rebeyond的MD5前16位,但是允许攻击者自定义算法、加解密逻辑,会存在密钥协商阶段
- 但不管是冰蝎的哪个版本,整体的流程都如下图所示,本地加密之后发送到目标主机,当通信的时候才解密进行通信,因此能够在一定程度上进行免杀:


流量特征
- 当然,由于冰蝎比较出名,所以它默认版本的流量特征基本都被研究透了,所以我们要对他进行魔改,以此来绕过检测
- 冰蝎的强弱特征如下:
冰蝎3.0
- 强特征:
- 固定密钥:默认连接密码 rebeyond → MD5 前 16 位
e45e329feb5d925b,写入 shell 且全程不变;拿到即可解密全部历史流量 - JSP shell 首次请求的 Content-Type 几乎必定是
application/octet-stream,正常上传/表单不会使用该值 - UA 高速轮换:内置 10+ 个 User-Agent,同一 IP 在相邻请求里来回切换,正常浏览器不会 3-5 秒换 UA
- 固定密钥:默认连接密码 rebeyond → MD5 前 16 位
- 弱特征:
- Accept 头倾向
text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2(Java HttpURLConnection 默认),合法但少见 - 命令执行类包体长度常落在 5720/5740 字节附近,且 Content-Length 偏大、无随机填充
- 全程长连接
Connection: keep-alive,只能算辅助行为
- Accept 头倾向
冰蝎4.0
- 强特征:
- 本地 TCP 源端口从 49700 左右顺序递增,每次新会话 +1,可做时序关联
- 请求/响应体带固定字节头(现版本硬编码):
请求dFAXQV1LORcHRQtLRlwMAhwFTAg/M
响应TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
不管选什么加密算法都会出现 - 默认 shell 仍保留 3.0 同款密钥
e45e329feb5d925b
- 弱特征:
- Accept:
application/json, text/javascript, */*; q=0.01 - Content-Type:
application/x-www-form-urlencoded与 3.0 相同,合法但偏少见 - User-Agent同样 10 选一、长连接、大 Content-Length
- Accept:
魔改冰蝎 - JAR反编译打包构建
-
我们本节课主要是针对冰蝎进行魔改操作,那么需要拿到它的源码,它是由Java开发的,那我们就反编译拿到源码
-
这里可以用自带的反编译工具,也可以使用网上的项目或者在线网站:
java-decompiler.jar:Java自带反编译工具crf:https://github.com/leibnitz27/cfr/releasesprocyon:https://github.com/mstrobel/procyon/releases- 在线反编译网站:https://www.decompiler.com/
-
我们就用在线网站就好了,直接上传冰蝎4.0的jar包上去,然后等待他反编译成功下载下来:

-
打开IDEA创建新项目,选择Intellij构建系统,并将JDK版本改为1.8,因为大多数工具都是Java8开发的:

-
我们将反编译之后的文件夹放进去,然后新建一个lib目录,放入原版的冰蝎jar包:

-
然后利用该jar包构建项目模块:

-
选择工件,点击加号添加主类:


-
配置完成之后,接下来我们就可以魔改冰蝎了,找到需要修改的代码,比如这里我们修改UI界面的显示名称为我们自己
-
先搜索特征,比如“t00ls、By rebeyond”,尽量搜英文,因为这个编译可能中文会被Unicode编码,这里我们在这个文件中找到了上面的关键字:

-
然后我们尝试修改,比如将这个作者改为我们自己,我们先将这个文件夹复制到src目录,在src目录中修改代码:

-
修改完成之后,我们可以把无关的其他文件删除,当然也可以保留(如果有报错,只要不是我们修改的文件就把报错的文件删掉),然后点击构建:

-
构建完成之后就会在out目录放一个jar包,运行这个jar包就是我们魔改的冰蝎:

-
可以看到我们确实修改成功了,这里如果运行失败的,将原本的
data.db文件复制到同一目录下即可:

魔改冰蝎 - 防识别-打乱特征指纹
-
上面讲到冰蝎的弱特征包括它请求头里的Accept、UA、Content-Type字段,而这些基本都被流量检测设备标记了,所以我们需要更改上面的内容,来绕过检测

-
我们根据这些关键词去找对应的代码,那还是找到上面的这个文件这里:

-
能够看到正好是我们说的弱特征的两个点,10个UA头,固定的Accept字段,那我们就可以尝试修改为其他的UA头和Accept字段:

-
然后构建打包,重新连接看看我们的UA和Accept字段是否修改:

-
当然,冰蝎其实也提供了自定义请求头的功能,可以在添加时自定义修改:


-
所以这个只是更改默认的这些字段,我们魔改更多的还是为了下面的加密协议
魔改冰蝎 - 防查杀-新增加密/传输协议
- 参考文章:冰蝎4.0流量分析及魔改-先知社区
修改加密方式
-
传输协议可以理解为流量的加密方式,冰蝎内置了部分传输协议,但是这些可能基本都被流量检测设备给标记了:

-
比如我们随便选一个传输协议,然后通过这个发送数据包可以看到流量就变了:


-
可以看到这里流量就变成了我们选择的加密方式进行传输,但是这些可能早就被标记了,所以我们需要新的算法去进行传输
-
当然,这里就只是演示简单的看个修改的过程和效果即可,比如我们添加rot13、unicode等编码方式去绕过
-
有两种添加方式,一种是直接图形化添加,一种是魔改源码,我们也是两个都看一下,第一种直接点击传输协议,然后新建即可:

-
比如这里我添加rot13,然后我们先在本地用Java代码实现加解密,直接让AI生成一份即可,然后点击保存,如果没有提示”一致性校验未通过“就说明我们的加解密是通的:

-
然后选择远程,可以添加其他语言的加解密代码,比如php、asp等,然后再用这些木马去进行连接,就会发现流量已经完全变了:

-
当然如果这是这样添加,可能也没什么用,因为它生成的一句话木马本身还是无法实现免杀,所以最好的方式是修改源码
-
我们根据特征找到
“net.rebeyond.behinder.resource”包,下面的server目录存放的是木马模板,而transprotocol目录存放的就是传输协议配置:

-
我们做免杀基本就从这两个地方入手,比如我们对shell.php做一个简单的免杀(目前代码都可以用AI生成):

-
然后构建项目打包,然后随便生成一个木马看看效果:

-
可以看到卡巴斯基并没有报毒,并且也能成功上线:

修改传输方式
-
除了上面更改加密的方式,我们也可以更改传输的格式,比如用JSON、XML、multipart等格式进行传输
-
当然它内置了JSON,所以我们可以新加一个XML格式传输:

-
然后抓包看看效果:

