漏洞扫描技巧之Web漏洞扫描器研究
字数 1597 2025-08-18 11:38:56

Web漏洞扫描器高级技巧研究

0x00 前言

本文深入探讨Web漏洞扫描器中的高级技术实现,包括编码/解码处理、PoC分类、IAST实现和限速机制等关键技术点。

0x01 编码/解码与协议处理

多协议支持架构

在扫描器设计中,处理多种数据格式和协议是一个关键挑战。传统方法存在以下问题:

  • 每增加一个新协议需要修改所有检测模块
  • 协议处理逻辑分散在各个检测模块中
  • 难以应对嵌套编码场景

改进方案:分层架构

# utils.py
def decode(data):
    if is_amf(data):
        data = decode_amf(data)
    if is_X(data):
        data = decode_X(data)
    # 递归decode处理嵌套编码
    for i in data:
        data[i] = decode(data[i])
    return data

关键设计原则

  1. 协议解析与封装独立:将编码/解码逻辑从检测模块中剥离
  2. 递归处理:支持嵌套编码场景(如multipart包含json,json字符串中包含另一个json)
  3. 网络操作抽象:统一请求发送接口,支持多种协议

实现优势

  • 新增协议只需在协议层添加支持,无需修改检测模块
  • 检测模块只需关注payload生成和注入
  • 支持任意复杂的协议和编码组合

0x02 PoC分类策略

AWVS的PoC分类体系

类型 描述 检测目标示例
PerServer Web Server级别漏洞 中间件、Web框架漏洞
PerFile 文件级别漏洞 文件备份、Bash RCE
PerFolder 目录级别漏洞 敏感信息泄漏、路径SQL注入
PerScheme 参数级别漏洞 SQL注入、XSS
PostCrawl 爬虫结束后检测 使用爬虫资源进行检测
PostScan 扫描结束后检测 二阶注入、存储XSS

工作流程

  1. 爬虫收集资产
  2. 资产格式化处理
  3. 根据资产类型分发到对应PoC检测模块
  4. 执行PostCrawl和PostScan检测

设计优势

  • 分类明确,覆盖完整检测生命周期
  • 避免为减少重复请求而记录中间状态
  • 各检测阶段分工明确

0x03 IAST实现技巧

AcuSensor的PHP实现

实现原理

  1. 通过auto_prepend_file加载acu_phpaspect.php
  2. 获取实际请求文件内容
  3. 检查缓存,有则直接执行缓存
  4. 使用token_get_all解析PHP代码
  5. 替换关键函数为自定义包装函数
  6. 缓存并执行修改后的代码

示例转换
原始代码:

$sql = "select * from user where user_id=".$_GET["id"];
mysqli_prepare($link, $sql);

转换后:

$sql = "select * from user where user_id=".$_GET[_AAS91("hello.php", 4, "\$_GET", "id")];
_AAS86("hello.php",6,"mysqli_prepare",Array($link, $sql));

技术优势

  • 纯PHP实现,无需扩展
  • 配置简单,兼容性强
  • 可扩展为完整RASP解决方案

0x04 限速机制

代理方案

实现方式

  • 所有扫描流量通过代理服务器
  • 由代理统一控制请求频率

优缺点

  • 优点:兼容现有扫描器,无需修改检测逻辑
  • 缺点:影响time-based检测,无法设置超时

双重队列方案

工作流程

  1. Worker从主队列获取目标任务
  2. 从目标专属队列获取具体检测任务
  3. 根据QPS设置控制执行频率(sleep或调整并发)

技术优势

  • 保持稳定连接
  • 不影响扫描功能
  • 精确控制请求速率

0x05 漏洞检测演进

发展阶段与策略

  1. 初期积累

    • 研究AWVS、SQLMap等实现
    • 学习动态页面检测、404识别等技巧
    • 理解设计背后的历史背景和原因
  2. 精准度提升

    • 收集和分析误报/漏报案例
    • 结合漏洞平台和渗透测试结果优化
    • 开源项目需建立用户反馈循环
  3. 高级阶段

    • 多源资产收集(HIDS、流量分析、日志)
    • 结合RASP等运行时防护技术
    • 分析access log、数据库log等辅助数据

非技术要素

  • 完善的漏洞描述和解决方案文档
  • 可量化的指标数据汇报
  • 清晰的权责划分机制

总结

本文详细剖析了Web漏洞扫描器中的关键技术实现,包括:

  1. 通过分层架构实现多协议支持
  2. 借鉴AWVS的PoC分类体系
  3. 创新的PHP IAST实现方案
  4. 两种实用的限速机制
  5. 漏洞检测能力演进路径

这些技术点共同构成了现代Web漏洞扫描器的核心能力,为安全工程师设计和实现扫描器提供了重要参考。

Web漏洞扫描器高级技巧研究 0x00 前言 本文深入探讨Web漏洞扫描器中的高级技术实现,包括编码/解码处理、PoC分类、IAST实现和限速机制等关键技术点。 0x01 编码/解码与协议处理 多协议支持架构 在扫描器设计中,处理多种数据格式和协议是一个关键挑战。传统方法存在以下问题: 每增加一个新协议需要修改所有检测模块 协议处理逻辑分散在各个检测模块中 难以应对嵌套编码场景 改进方案:分层架构 关键设计原则 协议解析与封装独立 :将编码/解码逻辑从检测模块中剥离 递归处理 :支持嵌套编码场景(如multipart包含json,json字符串中包含另一个json) 网络操作抽象 :统一请求发送接口,支持多种协议 实现优势 新增协议只需在协议层添加支持,无需修改检测模块 检测模块只需关注payload生成和注入 支持任意复杂的协议和编码组合 0x02 PoC分类策略 AWVS的PoC分类体系 | 类型 | 描述 | 检测目标示例 | |------|------|------------| | PerServer | Web Server级别漏洞 | 中间件、Web框架漏洞 | | PerFile | 文件级别漏洞 | 文件备份、Bash RCE | | PerFolder | 目录级别漏洞 | 敏感信息泄漏、路径SQL注入 | | PerScheme | 参数级别漏洞 | SQL注入、XSS | | PostCrawl | 爬虫结束后检测 | 使用爬虫资源进行检测 | | PostScan | 扫描结束后检测 | 二阶注入、存储XSS | 工作流程 爬虫收集资产 资产格式化处理 根据资产类型分发到对应PoC检测模块 执行PostCrawl和PostScan检测 设计优势 分类明确,覆盖完整检测生命周期 避免为减少重复请求而记录中间状态 各检测阶段分工明确 0x03 IAST实现技巧 AcuSensor的PHP实现 实现原理 : 通过 auto_prepend_file 加载acu_ phpaspect.php 获取实际请求文件内容 检查缓存,有则直接执行缓存 使用 token_get_all 解析PHP代码 替换关键函数为自定义包装函数 缓存并执行修改后的代码 示例转换 : 原始代码: 转换后: 技术优势 : 纯PHP实现,无需扩展 配置简单,兼容性强 可扩展为完整RASP解决方案 0x04 限速机制 代理方案 实现方式 : 所有扫描流量通过代理服务器 由代理统一控制请求频率 优缺点 : 优点:兼容现有扫描器,无需修改检测逻辑 缺点:影响time-based检测,无法设置超时 双重队列方案 工作流程 : Worker从主队列获取目标任务 从目标专属队列获取具体检测任务 根据QPS设置控制执行频率(sleep或调整并发) 技术优势 : 保持稳定连接 不影响扫描功能 精确控制请求速率 0x05 漏洞检测演进 发展阶段与策略 初期积累 : 研究AWVS、SQLMap等实现 学习动态页面检测、404识别等技巧 理解设计背后的历史背景和原因 精准度提升 : 收集和分析误报/漏报案例 结合漏洞平台和渗透测试结果优化 开源项目需建立用户反馈循环 高级阶段 : 多源资产收集(HIDS、流量分析、日志) 结合RASP等运行时防护技术 分析access log、数据库log等辅助数据 非技术要素 完善的漏洞描述和解决方案文档 可量化的指标数据汇报 清晰的权责划分机制 总结 本文详细剖析了Web漏洞扫描器中的关键技术实现,包括: 通过分层架构实现多协议支持 借鉴AWVS的PoC分类体系 创新的PHP IAST实现方案 两种实用的限速机制 漏洞检测能力演进路径 这些技术点共同构成了现代Web漏洞扫描器的核心能力,为安全工程师设计和实现扫描器提供了重要参考。