Yakit WebFuzzer序列实战:巧用数据提取器和Nuclei DSL函数,动态处理上传路径
Yakit WebFuzzer序列实战:动态路径处理与Nuclei DSL高阶应用
在渗透测试中,文件上传漏洞的验证往往需要处理服务器返回的动态路径。这些路径可能包含相对路径符号(如../upload/)、时间戳或随机字符串,直接使用这些路径进行后续测试会导致失败。本文将深入探讨如何利用Yakit WebFuzzer序列功能,结合数据提取器和Nuclei DSL函数,实现动态路径的智能处理。
1. 理解WebFuzzer序列的核心机制
WebFuzzer序列允许将多个请求节点串联起来,形成自动化测试流程。与传统单次请求不同,序列中的每个节点可以共享变量、cookie等上下文信息,这对于多步骤漏洞验证至关重要。
序列的核心特性包括:
- 变量继承:前序节点设置的变量可被后续节点直接调用
- 上下文保持:自动处理cookie、session等状态维持问题
- 条件控制:通过匹配器实现请求的智能过滤与分支控制
典型的上传漏洞验证序列通常包含两个关键节点:
- 文件上传请求节点
- 文件访问验证节点
2. 精准捕获动态路径:数据提取器配置技巧
服务器返回的上传路径往往不是固定值,而是包含动态元素。我们需要使用数据提取器从响应中准确抓取这些路径信息。
2.1 常见路径提取场景分析
| 场景类型 | 示例响应 | 提取策略 |
|---|---|---|
| 相对路径 | {"status":"success","path":"../uploads/2023/abc.jpg"} | 键值对提取+正则处理 |
| 时间戳路径 | File saved to: /temp/1689234567_rand.jpg | 正则捕获时间戳部分 |
| 随机字符串 | <a href="/files/XyZ123/file.exe">Download</a> | XPath定位+正则过滤 |
2.2 数据提取器高级配置
以下是一个典型的正则提取器配置示例,用于捕获包含相对路径的上传位置:
"path":"(\.\.\/.*?\.\w+)"关键配置参数:
- 提取类型:根据响应格式选择正则、键值对或XPath
- 匹配分组:正则表达式中的捕获组选择
- 提取器命名:为后续变量引用提供标识符
提示:在复杂JSON响应中,优先使用键值对提取器;在HTML响应中,XPath往往更可靠。
3. 动态路径处理:Nuclei DSL函数实战
提取的原始路径通常需要进一步处理才能用于验证。Nuclei DSL提供了丰富的字符串处理函数。
3.1 常用路径处理函数
trim_left/trim_right:去除特定前缀/后缀{{trim_left(raw_path, "../")}}replace:替换路径中的特定字符{{replace(raw_path, "temp/", "uploads/")}}concat:拼接基础URL与相对路径{{concat("https://target.com", cleaned_path)}}base64:对特殊路径进行编码处理{{base64("../../malicious.php")}}
3.2 变量处理流程示例
假设我们从第一个节点提取到路径变量raw_path值为../uploads/test.php,在序列第二个节点中可以这样处理:
去除相对路径符号:
{{clean_path = trim_left(raw_path, "../")}}拼接完整URL:
{{final_url = concat("https://target.com/", clean_path)}}在验证请求中使用处理后的URL:
GET {{final_url}} HTTP/1.1 Host: target.com
4. 序列配置的进阶技巧
4.1 条件化序列执行
通过匹配器实现智能流程控制:
- 步骤1: 上传文件 - 成功匹配: status_code == 200 AND contains(body, "success") - 失败处理: 停止序列并报警 - 步骤2: 验证上传 - 仅当步骤1成功时执行4.2 多路径处理策略
当服务器返回多个可能路径时,可以使用循环处理:
使用正则提取所有可能路径:
"possible_paths":\["(.*?)"\]通过Nuclei DSL的
repeat函数生成多个验证请求为每个路径创建独立的验证子序列
4.3 调试与错误处理
常见问题排查清单:
- 变量未正确继承?检查序列节点连接线
- 路径处理异常?使用
print_debug输出中间变量 - 编码问题?确保Content-Type与实际编码一致
注意:复杂的路径处理建议先在Yakit的"变量调试"面板中测试表达式,再应用到实际序列中。
5. 实战案例:云存储系统的上传验证
某云存储系统上传接口返回格式:
{ "code": 200, "data": { "location": "user_uploads/~temp~/a1b2c3/test.jpg" } }处理流程:
创建键值对提取器
upload_location,定位data.location值在序列第二个节点中处理路径:
{{clean_path = replace(upload_location, "~temp~/", "")}} {{access_url = concat("https://cdn.", host, "/", clean_path)}}配置验证请求:
GET {{access_url}} HTTP/1.1 Host: cdn.example.com添加成功匹配器:
- 状态码200
- 内容包含JFIF(图片特征)
通过这种动态路径处理方式,即使每次测试上传路径都不同,验证流程也能自动适应。在实际渗透测试项目中,这种自动化处理可以节省大量手动修改时间,特别适合批量测试场景。
