14.5 整合全部功能:Burp Intruder

JAttack由不到250行的简单代码构成,然而,当对一个向应用程序提出的请求进行模糊测试时,它在几秒钟内就能发现至少两个严重的安全漏洞。

尽管它的功能强大,但是,只要开始使用JAttack这样的工具实施自动化定制攻击,渗透测试员就立即可以发现其他更有用的功能。按现在的情况,需要在工具的源代码中配置每一个目标请求,然后重新编译它。但最好是从一个配置文件中读取这些信息,然后在运行时动态构建攻击。实际上,最好的办法是建立一个友好的用户界面,可通过它在几秒钟内配置上述攻击。

许多时候,渗透测试员还需要以更加灵活的方式生成有效载荷,并使用比我们创建的有效载荷源更高级的源。而且,通常还需要支持SSL、HTTP验证、多线程请求、自动跟随重定向,并对有效载荷内的不常见字符进行自动编码。有时,一次只修改一个参数可能觉得限制过大;攻击者可能希望同时在两个参数中注入不同的有效载荷来源。为便于参考,最好是保存应用程序的全部响应,这样就可以立即检查一个有用的响应,了解发生了什么状况,甚至手动调整对应的请求并重新提出这个请求。除了不断修改和提出同一个请求,有时需要处理多阶段进程、应用程序会话和预请求令牌。同样,最好是将这个工具与其他有用的工具(如代理服务器与爬虫)整合起来,避免来回剪切和粘贴信息。

Burp Intruder是唯一能够执行所有这些功能的工具。它专门为通过最少的配置实施各种自动化定制攻击而设计,并且在输出结果中提供大量细节,帮助迅速确定“触点”和其他反常现象。它还可与其他Burp Suite工具完全整合。例如,可以在代理服务器中拦截一个请求,将它提交给Intruder进行模糊测试,并在几秒钟内确定前面示例中描述的各种漏洞。

下面描述Burp Intruder的基本功能与配置,然后分析使用它执行自动化定制攻击的一些示例。

1.安置有效载荷

Burp Intruder使用一个类似于JAttack的概念型模型,在请求的特定位置安置有效载荷,并使用一个或几个有效载荷来源。然而,它的功能并不仅限于将有效载荷字符串插入到请求参数值中;有效载荷可安置在参数值的某个局部位置或参数名中,也可以安装在请求消息头或主体的任何位置。

确定以某个特殊请求作为攻击对象后,Burp Intruder使用一组标记定义每个有效载荷位置,指明插入有效载荷的起始点与结束点,如图14-1所示。

img458

图14-1 安置有效载荷

在某个位置插入有效载荷时,标记之间的任何文本将被有效载荷重写。如果没有插入有效载荷,就提交标记间的文本。为便于一次测试一个参数,同时将其他参数保持原样,这样做是必要的。这一做法与对应用程序进行模糊测试时完全相同。单击auto按钮将指示Intruder在所有URL、cookie和主体参数值中设定有效载荷位置,从而将在JAttack中需要手动操作的任务自动化。

sniper攻击类型是最常见的一种攻击类型,它的作用与JAttack的请求引擎相同:一次针对一个有效载荷位置,在那个位置提交所有有效载荷,然后转向下一个位置。其他攻击类型允许使用几个有效载荷,以不同的方式一次针对几个位置进行攻击。

2.选择有效载荷

准备攻击的下一个步骤是选择将要在指定位置插入的有效载荷。Intruder包含大量用于生成攻击有效载荷的内置功能。

img002 预先设置与可配置的数据列表。

img002 根据任何语法模式对有效载荷进行定制迭代。例如,如果应用程序使用ABC45D形式的用户名,那么可以使用定制迭代器遍历所有可能的用户名。

img002 字符与大小写替换。根据最初的有效载荷列表,Intruder可修改单个的字符及其大小写,以生成它们的变化形式。这项功能在对密码实施蛮力攻击时非常有用,例如,字符串password可修改为p4ssword、passw0rd、Password、PASSWORD等。

img002 数字可用于遍历文档ID、会话令牌等。数字可为十进制或十六进制、整数或分数、按顺序排列、逐步递增或完全随机。当知道一些有效值的大小,但无法确定推断这些值的任何可靠模式时,在一个指定的范围内生成随机数字可用于搜索“触点”。

img002 某些情况下,日期和数字有着相同的用途。例如,如果登录表单要求输入出生日期,那么就可以使用这项功能对指定范围内的所有有效值实施蛮力攻击。

img002 可使用非法Unicode编码,通过提交恶意字符的编码形式避开一些输入过滤。

img002 字符块可用于探查缓冲区溢出漏洞(请参阅第16章了解相关内容)。

img002 蛮力功能可用于生成一个特殊字符集在指定长度范围内的所有排列组合。许多时候,由于它能生成大量的请求,使用这种功能是我们能够依赖的最后一个办法。例如,对仅包含小写字母字符的6位数密码进行蛮力攻击,将生成300多万个排列组合;仅通过远程访问应用程序几乎不可能提交如此数目庞大的请求。

img002 “字符打乱”和“位翻转”功能,可用于系统化地操纵参数的现有值的各个部分,以探查应用程序如何处理各种难以察觉的修改(请参阅第7章)。

除有效载荷生成功能外,还可以配置一些规则,在使用有效载荷值之前对每个值进行任意处理。这包括字符串和大小写修改、各种编解码方案以及散列操作。这样做有助于在各种非常规情况下构建有用的有效载荷。

默认情况下,在请求中插入字面量字符会使请求失效,Burp Intruder会对这些字符进行URL编码。

3.配置响应分析

在实施攻击前,渗透测试员应当确定想要分析的服务器响应属性。例如,当枚举标识符时,可能需要在每个响应中搜索一个特殊的字符串;在模糊测试时,攻击者也许希望扫描大量常见的错误消息等。

默认情况下,Intruder会在它的结果表中记录HTTP状态码、响应长度、服务器设定的任何cookie以及收到响应的时间。和JAttack一样,还可以配置Burp Intruder对应用程序的响应进行其他一些自定义分析,以帮助确定表明存在漏洞或值得深入调查的数据。可以指定在响应中搜索的字符串或正则表达式;可以设定自定义字符串,控制从服务器的响应中提取数据;还可以指示Intruder检查每个响应是否包含攻击字符串本身,以帮助确定跨站点脚本和其他响应注入漏洞。

确定有效载荷位置、有效载荷来源以及需要对服务器响应进行哪些分析后,渗透测试员就可以实施攻击。下面简要说明如何使用Intruder实施一些常见的自动化定制攻击。

4.攻击1:枚举标识符

假设正以一个支持匿名用户自我注册的应用程序为攻击目标。创建一个账户,登录应用程序,访问最少量的功能。在这个阶段,应用程序的会话令牌是一个明显的攻击对象。连续进行几次登录,会得到以下令牌:

img459

按照第7章描述的步骤分析这些令牌后会发现:很明显,令牌中几乎有一半的内容没有发生变化;但是,令牌的第二部分实际上并未被应用程序处理。完全修改这个部分并不会使令牌失效。 而且,虽然这些令牌并不严格按顺序排列,但最后一部分明显以某种方式向上递增。根据这些信息,渗透测试员也许能够对应用程序实施会话劫持攻击。

要利用自动技巧实施这个攻击,需要找到一个可用于探查有效令牌的请求/响应对。通常,任何访问应用程序通过验证的页面的请求都可用于这种目的。假设以每名用户登录后显示的主页为攻击对象:

img460a

由于已经知道会话令牌的结构及应用程序如何处理令牌,因此,只需令牌的最后一个部分就可实施攻击。实际上,根据前面确定的令牌序列,最有效的初步攻击只需修改令牌最后的几位数字。因此,用Intruder配置唯一一个有效载荷位置,如图14-2所示。

img460b

图14-2 设定一个定制的有效载荷位置

有效载荷需要遍历最后三位的所有可能值。令牌使用的可能是十六进制字符集:0~9与a~f。因此,配置一个有效载荷来源生成0x000~0xfff之间的所有十六进制数字,如图14-3所示。

img461a

图14-3 配置数字式有效载荷

在枚举有效会话令牌的攻击中,通常可以直接确定“触点”。在当前的示例中已经确定:如果提交一个有效的令牌,应用程序会返回一个HTTP 200响应;否则就返回一个退回登录页面的HTTP 302重定向。因此,测试员不必为攻击配置任何定制的响应分析。

实施攻击后,Intruder将迅速循环提出所有请求。攻击结果在一个表格中显示,可以单击表的列标题,根据该列的内容对结果进行分类。按状态码分类可帮助轻松确定已经发现的有效令牌,如图14-4所示。

img461b

图14-4 分类攻击结果以迅速确定“触点”

攻击取得成功。现在渗透测试员可以选择任何返回HTTP 200响应的有效载荷,用这个有效载荷代替会话令牌最后的三个数字,从而劫持其他应用程序用户的会话。然而,对结果表进行仔细分析后会发现:由于应用程序向不同用户显示的主页几乎完全相同,因而大多数HTTP 200响应的长度也大致相同。然而,其中有两个响应要更长一些,表示应用程序向它们返回了一个不同的页面。

可以在Intruder中双击其中一个结果,以HTTP源代码或HTML格式完整显示服务器的响应。之后会发现,与主页相比,较长的主页中包含大量菜单选项。据此推测,这两个劫持的会话似乎属于更高权限的用户。