Burp Suite中Intruder模块的使用详解
- Intruder(入侵者)
-
- Target(目标)
-
- Attack Target
- Positions(位置)
-
- Payload Positions
- Payloads(有效载荷)
-
- Payload Sets(设置)
- Payload Options(Payload选项)
- Payload Processing(Payload处理)
- Payload Encoding
- Options
-
- Request Headers
- Request Engine
- Attack Results
- Grep – Match
- Grep – Extract
- Grep – Payloads
- Redirections(重定向)
Intruder(入侵者)
Intruder模块是一个定制的高度可配置的工具,对web应用程序进行自动化攻击,如:枚举标识符,收集有用的数据,以及使用fuzzing 技术探测常规漏洞。
Target(目标)
Attack Target
此选项卡用于为攻击配置目标服务器的详细信息。所需选项包括:
Host(主机):这是目标服务器的IP地址或主机名。
Port(端口):这是http/s服务的端口号。
Use HTTPS:这指定是否应使用ssl
配置这些详细信息的最简单方法是选择要在Burp Suite中攻击任何地方的请求,并在上下文菜单上选择“Send to Intruder”选项。这将把所选的请求发送到Intruder中的新选项卡,并自动填充目标和位置选项卡。
Positions(位置)
Payload Positions
此选项卡用于配置攻击的请求模板、有效负载标记和攻击类型(确定有效负载分配到有效负载位置的方式)。
Payload Positions(有效载荷标记)
每对标记 ‘ § ’ 指示一个Payload位置。一对标记可以选择性地将模板请求中的一些文本括在它们之间。当有效载荷位置被分配了Payload时,标记和任何包含的文本都将被Payload替换。当有效载荷位置没有指定的Payload时,标记将被移除,但所附文本保持不变。
为了简化配置,Intruder模块会自动突出显示每对有效负载标记以及它们之间的任何封闭文本。您可以手动或自动放置有效负载标记。当您从Burp Suite中的其他模块向Intruder模块发送请求时,会猜测您可能想要放置有效负载的位置,并相应地设置有效负载标记。您可以使用请求模板编辑器旁边的按钮修改默认负载标记:
按钮 | 解释 |
---|---|
Add § | 如果未选择文本,则在光标位置插入一个有效载荷标记。如果选择了某些文本,则会插入一对标记,将选定文本括起来。 |
Clear § | 这将从整个模板或模板的选定部分删除所有位置标记。 |
Auto § | 这使得猜测在哪里可能有助于定位有效载荷,并相应地放置有效载荷标记。这有助于快速标记适合模糊化的位置,但对于更为自定义的攻击,需要手动定位。如果您选择了一些文本,则标记仅放置在所选文本中;否则,标记将放置在整个请求模板中。标记的自动放置将有效负载放入各种类型的请求参数的值中,包括:URL查询字符串参数,Body parameters,Cookies,多部分参数属性(例如文件上载中的文件名),XML数据和元素属性,JSON参数。 |
Refresh | 这将刷新请求模板编辑器的语法着色(如果需要)。 |
Clear | 这将删除整个请求模板。 |
注意:您还可以使用Intruder模块的有效负载位置UI来为Burp Scanner的活动扫描配置自定义插入点。为此,在Intruder中以通常的方式配置请求模板和有效负载标记,然后从Intruder模块菜单中选择“活动扫描定义的插入点”。
Attack type(攻击类型):
Burp Intruder支持各种攻击类型,这些类型决定了Payload分配到有效载荷位置的方式。以下攻击类型可用:
类型 | 解释 |
---|---|
Sniper | 使用一组Payload。以每个位置为目标,依次将每个Payload放置到该位置。多标记依次进行。 |
Battering ram | 使用一组Payload。同时将相同的Payload放入所有被定义的位置。当攻击要求在请求中的多个位置插入相同的输入时(例如cookie中的用户名和body参数),此攻击类型非常有用。 |
Pitchfork | 使用多个Payload集。对于每个定义的位置有一个不同的Payload(最多为20个)。当攻击需要在请求中的多个位置插入不同但相关的输入时(例如,一个参数中的用户名和另一个参数中与该用户名对应的已知ID号),此攻击类型非常有用。 |
Cluster bomb | 使用多个Payload集。每个定义的位置有一个不同的有效负载集(最多为20)。攻击依次遍历每个Payload集,以便测试Payload组合的所有排列。当攻击要求在请求中的多个位置插入不同的、不相关的或未知的输入时(例如,猜测凭据时,一个参数中有用户名,另一个参数中有密码),此攻击类型非常有用。 |
Payloads(有效载荷)
Payload Sets(设置)
此选项卡用于配置一个或多个负载集。Payload集的数量取决于Positions(位置)选项卡中定义的Attack type(攻击类型)。对于许多常见的任务,例如模糊参数、强制猜测用户密码或循环访问页面标识符,只需要一个有效负载集。
Payload set : 指定需要配置的变量;
Payload type : Payload类型
类型 | 解释 |
---|---|
Simple list | 简单字典 |
Runtime file | 运行文件 |
Custom iterator | 自定义迭代器 |
Character substitution | 字符替换 |
Recursive grep | 递归查找 |
Illegal Unicode | 非法字典 |
Character blocks | 字符快 |
Numbers | 数组组合 |
Dates | 日期组合 |
Brute forcer | 暴力破解 |
Null payloads | 空Payload |
Username generator | 用户名生成 |
Copy other payload | 复制其他Payload |
Payload Options(Payload选项)
每种Payload类型都有不同的设置方法,这是最简单的Payload类型,允许您配置用作Payload的字符串的简单列表。
功能 | 解释 |
---|---|
Paste | 粘贴 |
Load | 加载 |
Remove | 删除 |
Clear | 清除 |
Add | 添加 |
Add from list | 从列表中添加 |
Payload Processing(Payload处理)
您可以定义规则,以便在使用每个负载之前对其执行各种处理任务。定义的规则是按顺序执行的,可以打开或关闭以帮助调试配置中的任何问题。Payload处理规则在许多情况下都很有用,在这些情况下,您需要生成不寻常的Payload,或者需要在使用之前将有效载荷包装在更广泛的结构或编码方案中。
功能 | 解释 |
---|---|
Add prefix | 在有效负载之前添加一个文本前缀。 |
Add suffix | 这将在负载之后添加一个文本后缀。 |
Match/replace | 这将用文本字符串替换与特定正则表达式匹配的有效负载的任何部分。 |
Substring | 从指定的偏移量(0索引)开始,直到指定的长度,提取Payload的子部分。 |
Reverse substring | 此函数与子字符串规则相同,但指定从有效负载的末尾向后计数结束偏移量,并从结束偏移量向后计数长度。 |
Modify case | 这将修改有效负载的大小写(如果适用)。与Case modification payload类型相同的选项也可用。 |
Encode | 这使用各种方案对负载进行编码:url、html、base64、ascii hex或为各种平台构建的字符串。 |
Decode | 这将使用各种方案解码负载:url、html、base64或ascii hex。 |
Hash | 对负载执行散列操作。 |
Add raw payload | 这将在当前处理值之前或之后添加原始有效负载值。例如,如果您需要以原始和哈希形式提交相同的负载,那么它可能很有用。 |
Skip if matches regex | 这检查当前处理的值是否与指定的正则表达式匹配,如果匹配,则跳过负载并移到下一个。这可能很有用,例如,如果您知道参数值必须具有最小长度,并且希望跳过列表中小于此长度的任何值。 |
Invoke burp extension | 这将调用一个burp扩展来处理有效负载。扩展必须注册了入侵者有效负载处理器。您可以从当前加载的扩展注册的可用处理器列表中选择所需的处理器。 |
Payload Encoding
您可以配置负载中的哪些字符应为url编码,以便在http请求中进行安全传输。在任何有效负载处理规则执行之后,最后应用任何配置的url编码。
建议将此设置用于最终url编码,而不是有效负载处理规则,因为在应用最终url编码之前,可以使用payload grep选项检查回显有效负载的响应。
Options
Request Headers
这些设置控制Intruder模块在攻击期间是否更新配置的请求头。
Update Content-Length header :此选项使Intruder模块在每个请求中添加或更新内容长度头,并使用该特定请求的http正文长度的正确值。对于将可变长度Payload插入模板http请求主体的攻击,此功能通常是必不可少的。如果未指定正确的值,则目标服务器可能返回错误,可能响应不完整的请求,或者可能无限期地等待在请求中接收到进一步的数据。
Set Sconnection: close :此选项使Intruder模块添加或更新值为“close”的连接头。在某些情况下(当服务器本身未返回有效的内容长度或传输编码头时),此选项可能允许更快地执行攻击。
Request Engine
这些设置控制用于在入侵者攻击中发出http请求的引擎。以下选项可用:
功能 | 解释 |
---|---|
Number of threads(线程数)[pro version] | 此选项控制攻击能够发出的并发请求数。 |
Number of retries on network failure(网络故障重试次数) | 如果发生连接错误或其他网络问题,Burp将在放弃并继续之前按指定次数重试请求。在测试时,间歇性网B络故障很常见,因此最好在出现故障时重试请求几次。 |
Pause before retry(重试前暂停) | 重试失败的请求时,Burp将在失败后的指定时间(以毫秒为单位)等待重试。如果服务器被流量淹没,或者出现间歇性问题,最好在重试之前等待一小段时间。 |
Throttle between requests(在请求之间进行限制) | 可以选择,burp可以在每个请求之前等待指定的延迟(以毫秒为单位)。此选项有助于避免应用程序过载,或者更隐蔽。或者,可以配置可变延迟(具有给定的起始值和增量)。此选项可用于测试应用程序强制的会话超时间隔。 |
Start time(开始时间) | 此选项允许您将攻击配置为立即开始,或在指定延迟后开始,或在暂停状态下开始。如果正在配置攻击,而该攻击将在将来某个时间执行或保存以备将来使用,则这些替代方案可能会很有用。 |
仔细使用这些选项可以微调攻击引擎,具体取决于对应用程序的性能影响以及您自己的处理能力和带宽。如果发现攻击运行缓慢,但应用程序运行良好,并且您自己的CPU利用率较低,则可以增加线程数以使攻击更快进行。如果发现正在发生连接错误、应用程序正在减速或您自己的计算机正在锁定,则应减少线程数,并可能增加网络故障时的重试次数和重试之间的暂停时间。
Attack Results
功能 | 解释 |
---|---|
Store requests / responses(存储请求/响应) | 这些选项确定攻击是否会保存单个请求和响应的内容。保存请求和响应会占用临时目录中的磁盘空间,但使您能够在攻击期间完整查看这些请求,必要时重复单个请求,并将它们发送到其他burp工具。 |
Make unmodified baseline request(发出未修改的基线请求) | 如果选择此选项,那么除了已配置的攻击请求外,burp将发出模板请求,并将所有有效负载位置设置为其基本值。此请求将在结果表中显示为项0。使用此选项有助于提供基本响应,以便比较攻击响应。 |
Use denial-of-service mode(使用拒绝服务模式) | 如果选择此选项,则攻击将正常发出请求,但不会等待处理从服务器收到的任何响应。一旦发出每个请求,TCP连接将被关闭。此功能可用于对易受攻击的应用程序执行应用程序层拒绝服务攻击,方法是重复发送在服务器上启动高工作负载任务的请求,同时通过保持套接字打开以等待服务器响应来避免锁定本地资源。 |
Store full payloads(存储全部有效载荷) | 如果选择此选项,burp将存储每个结果的全部有效载荷值。此选项会消耗额外的内存,但如果要在运行时执行某些操作(如修改有效负载grep设置或使用修改后的请求模板重新发出请求),则可能需要此选项。 |
Grep – Match
这些设置可用于标记响应中包含指定表达式的结果项。对于列表中配置的每个项,Burp将添加一个新的results列,其中包含一个复选框,指示是否在每个响应中找到了该项。然后,您可以对此列进行排序(通过单击列标题)以将匹配的结果组合在一起。
使用此选项可以非常强大地帮助分析大量结果集,并快速识别感兴趣的项。例如,在密码猜测攻击中,扫描“密码不正确”或“登录成功”等短语可以找到成功的登录;在测试SQL注入漏洞时,扫描包含“ODBC”、“错误”等的消息可以识别易受攻击的参数。
除了要匹配的表达式列表外,还提供以下选项:
功能 | 解释 |
---|---|
Match type(匹配类型) | 指定表达式是简单字符串还是正则表达式。 |
Case sensitive match(区分大小写匹配) | 这指定表达式的检查是否应区分大小写。 |
exclude http headers | 这指定是否应从检查中排除http响应头。 |
Grep – Extract
这些设置可用于将响应中的有用信息提取到攻击结果表中。对于列表中配置的每个项,burp将添加一个新的results列,其中包含为该项提取的文本。然后,您可以对此列进行排序(通过单击列标题)以对提取的数据进行排序。
此选项对于从应用程序中挖掘数据非常有用,并且可以支持范围广泛的攻击。例如,如果您正在循环查看一系列文档ID,则可以提取每个文档的页面标题以查找感兴趣的项。如果找到了返回其他应用程序用户详细信息的函数,则可以遍历用户ID并检索有关用户查找管理帐户甚至密码的相关字段。如果“忘记密码”函数以用户名为参数并返回用户配置的密码提示,则可以运行常见用户名列表并获取所有相关的密码提示,然后在列表中直观地扫描以查找容易猜测的密码。
如果连续多次添加同一匹配项,则将搜索每个服务器响应以查找该表达式的多个匹配项,并捕获紧跟在每个匹配项之后的文本。这可能很有用,例如,当HTML表包含有用的信息,但没有唯一的前缀可用于自动挑选每个项时。
Grep – Payloads
这些设置可用于标记包含已提交有效负载的反射的结果项。如果启用了该选项,Burp将添加一个新的results列,其中包含一个复选框,指示是否在每个响应中找到了当前负载的值。(如果使用了多个有效载荷集,则将为每个Payload集添加单独的列。)
此功能可用于检测跨站点脚本和其他响应注入漏洞,当用户输入动态插入到应用程序的响应中时,可能会出现这些漏洞。
功能 | 解释 |
---|---|
Case sensitive match(区分大小写匹配) | 这指定有效负载的检查是否应区分大小写。 |
exclude http headers | 这指定是否应从检查中排除http响应头。 |
Match against pre-URL-encoded payloads(与预url编码的Payload匹配) | 将入侵者配置为url编码请求中的有效载荷是正常的。然而,这些通常由应用程序解码并以其原始形式回显。您可以使用此选项以预编码形式对有效载荷进行burp check响应。 |
Redirections(重定向)
这些设置控制Burp Suite在执行攻击时如何处理重定向。为了达到攻击的目的,通常需要遵循重定向。例如,在密码猜测攻击中,每次尝试的结果可能仅通过遵循重定向来显示。模糊化时,相关反馈可能只出现在初始重定向响应后返回的错误消息中。
Follow redirections : 此设置控制跟随的重定向的目标。
类型 | 解释 |
---|---|
Never | 不会遵循任何重定向(关闭跟随重定向)。 |
On-site only(仅在站点上) | 只跟随重定向到同一个网站,即使用与原始请求中使用的相同主机、端口和协议的URL。 |
In-scope only(仅在范围内) | 只跟随重定向到套件范围目标范围内的URL。 |
Always(总是) | 跟随重定向到任何url。您应该谨慎使用此选项,Web应用程序会将重定向中的请求参数中继到第三方,并且通过遵循重定向,您可能会无意中攻击您不打算攻击的应用程序。 |
Process cookies in redirections(处理重定向中的Cookie) : 如果选择此选项,则在遵循重定向目标时,将重新提交重定向响应中设置的所有Cookie。例如,如果您试图强行执行登录质询,该质询始终返回指向指示登录结果的页面的重定向,并且针对每次登录尝试创建新会话,则可能需要此选项。
关于重定向,还有一些要点值得注意:
在某些情况下,可能需要在执行重定向时仅使用单线程攻击。当应用程序在会话中存储初始请求的结果,并在传递重定向响应时检索该结果时,就会出现这种情况。
自动跟随重定向有时可能会导致攻击问题,例如,如果应用程序通过重定向到注销页来响应某些恶意请求,则跟随重定向可能会导致会话在其他情况下不会终止。