Documentation Index
Fetch the complete documentation index at: https://projectdiscovery.sec-lab.cn/llms.txt
Use this file to discover all available pages before exploring further.
提取器可用于从模块返回的响应中提取匹配项并在结果中显示。
一个请求中可以指定多个提取器。目前我们支持五种类型的提取器。
- regex - 基于正则表达式从响应中提取数据。
- kval - 从响应头/Cookie中提取
key: value/key=value格式的数据
- json - 使用类似JQ语法从基于JSON的响应中提取数据。
- xpath - 从HTML响应中提取基于xpath的数据
- dsl - 基于DSL表达式从响应中提取数据。
Regex 提取器
使用regex提取HTTP响应体的示例 -
extractors:
- type: regex # 提取器类型
part: body # 响应的部分(header,body,all)
regex:
- "(A3T[A-Z0-9]|AKIA|AGPA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}" # 用于提取的正则表达式
Kval 提取器
从HTTP响应中提取content-type头的kval提取器示例。
extractors:
- type: kval # 提取器类型
kval:
- content_type # 从响应中提取的header/cookie值
注意content-type已被替换为content_type,因为kval提取器不接受破折号(-)作为输入,必须用下划线(_)替代。
JSON 提取器
从JSON块中提取id对象值的json提取器示例。
- type: json # 提取器类型
part: body
name: user
json:
- '.[] | .id' # 类似JQ的提取语法
有关JQ的更多详情 - https://github.com/stedolan/jq
Xpath 提取器
从HTML响应中提取href属性值的xpath提取器示例。
extractors:
- type: xpath # 提取器类型
attribute: href # 要提取的属性值(可选)
xpath:
- '/html/body/div/p[2]/a' # 用于提取的xpath值
通过在浏览器中简单的复制粘贴,我们可以从任何网页内容中获取xpath值。
DSL 提取器
通过len辅助函数从HTTP响应中提取有效body长度的dsl提取器示例。
extractors:
- type: dsl # 提取器类型
dsl:
- len(body) # 从响应中提取的dsl表达式值
动态提取器
在编写多请求模板时,提取器可用于在运行时捕获动态值。CSRF令牌、会话头等可以被提取并在请求中使用。此功能仅在RAW请求格式中可用。
定义名为api的动态提取器的示例,该提取器将从请求中捕获基于正则表达式的模式。
extractors:
- type: regex
name: api
part: body
internal: true # 使用动态变量需要
regex:
- "(?m)[0-9]{3,10}\\.[0-9]+"
提取的值存储在变量api中,可以在后续请求的任何部分中使用。
如果您想将提取器用作动态变量,必须使用internal: true来避免在终端中打印提取的值。
对于更复杂的匹配,还可以为正则表达式指定可选的match-group。
extractors:
- type: regex # 提取器类型
name: csrf_token # 定义变量名
part: body # 要查找的响应部分
# group定义使用的匹配组
# 在GO中,"match"是所有匹配和子匹配的完整数组
# match[0]是完整匹配
# match[n]是子匹配。通常我们需要match[1],如下所示
group: 1
regex:
- '<input\sname="csrf_token"\stype="hidden"\svalue="([[:alnum:]]{16})"\s/>'
上面名为csrf_token的提取器将保存由([[:alnum:]]{16})提取的值,如abcdefgh12345678。
如果没有提供此正则表达式的group选项,上面名为csrf_token的提取器将保存完整匹配(通过<input name="csrf_token"\stype="hidden"\svalue="([[:alnum:]]{16})" />),如<input name="csrf_token" type="hidden" value="abcdefgh12345678" />。
可重用动态提取器
从Nuclei v3.1.4开始,您现在可以在下一个提取器中立即重用动态提取的值(例如上例中的csrf_token),默认情况下这些值在后续请求中可用。
示例:
id: basic-raw-example
info:
name: Test RAW Template
author: pdteam
severity: info
http:
- raw:
- |
GET / HTTP/1.1
Host: {{Hostname}}
extractors:
- type: regex
name: title
group: 1
regex:
- '<title>(.*)<\/title>'
internal: true
- type: dsl
dsl:
- '"Title is " + title'