Skip to main content

概述

Nuclei引擎支持使用payloads模块对HTTP请求的任何值/组件进行暴力破解,该模块允许以多种格式运行各种类型的payloads。可以使用简单关键字定义占位符(或在需要变异函数时使用括号{{helper_function(variable)}}),并执行batteringrampitchforkclusterbomb攻击。 这些攻击的wordlist需要在请求定义下的payload字段中定义,名称与关键字匹配。Nuclei同时支持基于文件和模板内的wordlist,最后所有DSL功能都完全可用和支持,可用于操作最终值。
注意,如果您正在开发基于文件的payload并将其存储在Nuclei模板目录之外, 您必须使用-lfa(或-allow-local-file-access)标志运行Nuclei。 这是允许访问不在默认模板目录中的本地文件所必需的。
Payloads使用变量名定义,可以在请求中的{{ }}标记之间引用。

HTTP PayloadsHTTP Fuzzing之间的区别

虽然两者听起来相似,但FuzzingPayloads/BruteForce之间的主要区别在于Fuzzing是Payloads/BruteForce的超集,具有与发现未知漏洞相关的额外功能,而Payloads只是使用给定攻击类型和一组payloads对值进行简单的暴力破解。

示例

使用本地wordlist的payloads示例:
# 使用本地wordlist的HTTP Intruder fuzzing

payloads:
  paths: params.txt
  header: local.txt
使用模板内wordlist支持的payloads示例:
# 使用模板内wordlist的HTTP Intruder fuzzing

payloads:
  password:
    - admin
    - guest
    - password
注意: 选择攻击类型时要小心,因为意外的输入会破坏模板。 例如,如果您使用clusterbombpitchfork作为攻击类型,但在payload部分只定义了一个变量,模板将无法编译,因为clusterbombpitchfork期望在模板中使用多个变量。

攻击模式

Nuclei引擎支持多种攻击类型,包括默认类型batteringram(通常用于模糊测试单个参数)、clusterbombpitchfork(用于模糊测试多个参数,其工作方式与经典的burp intruder相同)。
类型batteringrampitchforkclusterbomb
支持

batteringram

batteringram攻击类型在所有位置放置相同的payload值。它只使用一个payload集。它遍历payload集并用payload值替换所有位置。

pitchfork

pitchfork攻击类型为每个位置使用一个payload集。它将第一个payload放在第一个位置,第二个payload放在第二个位置,依此类推。 然后,它同时遍历所有payload集。第一个请求使用每个payload集中的第一个payload,第二个请求使用每个payload集中的第二个payload,依此类推。

clusterbomb

clusterbomb攻击尝试payloads的所有不同组合。它仍然将第一个payload放在第一个位置,第二个payload放在第二个位置。但是当它遍历payload集时,它会尝试所有组合。 它同时遍历所有payload集。第一个请求使用每个payload集中的第一个payload,第二个请求使用每个payload集中的第二个payload,依此类推。 这种攻击类型对于暴力破解攻击很有用。在第一个payload集中加载常用用户名列表,在第二个payload集中加载常用密码列表。clusterbomb攻击将尝试所有组合。 更多详情在这里

攻击模式示例

使用clusterbomb攻击进行fuzzing的示例:
http:
  - raw:
      - |
        POST /?file={{path}} HTTP/1.1
        User-Agent: {{header}}
        Host: {{Hostname}}

    attack: clusterbomb # 定义HTTP fuzz攻击类型
    payloads:
      path: helpers/wordlists/prams.txt
      header: helpers/wordlists/header.txt