Skip to main content
提取器可用于从模块返回的响应中提取匹配项并在结果中显示。

类型

一个请求中可以指定多个提取器。目前我们支持五种类型的提取器。
  1. regex - 基于正则表达式从响应中提取数据。
  2. kval - 从响应头/Cookie中提取key: value/key=value格式的数据
  3. json - 使用类似JQ语法从基于JSON的响应中提取数据。
  4. xpath - 从HTML响应中提取基于xpath的数据
  5. 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'