Web代码安全漏洞深度剖析
上QQ阅读APP看书,第一时间看更新

2.3 抓包工具Burp Suite

在代码审计过程中,经常会用到一款抓包分析工具——Burp Suite(简称Burp)。这款工具的使用率很高,成了各大Web安全工程师手中的“神器”,它的优势是对于HTTP请求的处理做得很细致,这款工具更专注Web大体系里的HTTP安全。但是很多漏洞不是通过抓包就可以看出来的,还需要你运用所储备的技术思路、测试手法与手段等。

2.3.1 Burp Suite简介与安装

Burp Suite是一款信息安全从业人员必备的集成型渗透测试工具,采用自动测试和半自动测试的方式。该工具包含了多个功能模块,如Proxy、Spider、Scanner、Intruder、Repeater、Sequencer、Decoder、Comparer等。

Burp Suite通过拦截HTTP/HTTPS的Web数据包,充当浏览器和相关应用程序的中间人,进行拦截、修改、重放数据包进行测试,是Web安全人员必备的“瑞士军刀”。

使用Burp Suite需要Java环境,因为它是用Java编程语言开发的。安装Java环境如图2-27所示。

图2-27 Java环境安装

Java环境安装好之后,还需要配置环境变量(注意:环境变量是追加进去的,而不是覆盖进去的)。在“系统属性→高级→环境变量→系统变量→Path”中,点击“确定”以后,就可以尝试编辑系统变量了,如图2-28所示。

图2-28 环境变量和编辑系统变量

环境变量和系统变量设置好后,就可以正常使用Burp Suite了。如果遇到以下几种异常情况,请做相应的处理:

1)双击打开软件的时候无法运行。请尝试使用命令行模式运行,Linux下为控制台模式,Windows下为DOS窗口模式,在当前路径下尝试命令:java-jar工具名.jar。

2)未配置好Java系统环境变量,导致操作系统无法识别。也许之前添加系统变量的时候把原来的变量删除了,导致所有命令都无法识别。添加变量时需要小心,禁止在添加或修改变量的时候删除或覆盖系统原有的变量值,添加好以后,请先尝试运行一个简单的Java程序。

3)运行软件一旦出现其他错误,请尝试更换JDK其他版本,如JDK1.6、JDK1.7、JDK1.8等版本,因为Burp Suite可能对Java的环境版本有一定的要求。也可以阅读官方资料进行参考。

Burp Suite的版本很多,选一款可以使用的即可。如果只是用来做代码审计,版本的区别不是很大。这里笔者使用的是1.7.30版本,如图2-29所示。

这里需要用到的常用模块有Proxy(代理)、Repeater(数据重放)、Intruder(批量请求)、Decoder(编码&解码)。下面分别介绍这几个模块。

图2-29 打开Burp Suite工具

2.3.2 Proxy模块

Proxy模块是Burp Suite以用户驱动测试流程功能的核心,通过代理模式,可以拦截、查看、修改在客户端和服务端之间传输的数据。

1.Options子选项卡

通过Options(选项)子选项卡可以设置或者添加拦截代理,如图2-30所示。

图2-30 设置或添加拦截代理

浏览器需要设置代理(也可以使用一些浏览器插件,如谷歌的SwitchyOmega、360安全浏览器自带的代理设置),如果找不到谷歌的代理设置,可以在设置选项里的搜索框中搜索“代理”,可以看到有一个选项“打开代理设置”,双击进去就可以设置,如图2-31所示。

图2-31 浏览器的代理设置(谷歌或360安全浏览器)

2.Intercept子选项卡

进入Intercept(拦截)子选项卡,可以设置拦截状态。如要开启拦截状态,则选中Intercept is on,点击后该按钮显示为Intercept is off,在此状态下点击按钮可关闭拦截模式。用这个按钮可以轻松地开启和关闭代理,如图2-32所示。

图2-32 代理的开启和关闭

打开浏览器输入要拦截的地址,如http://localhost/phpMyAdmin/index.php,Burp Proxy就可以把数据请求包拦截下来。如点击Forward按钮则让数据包继续走下去,如点击Drop按钮则抛弃该数据包。在拦截的同时,也可以随意修改数据包,如图2-33所示。

图2-33 数据包拦截

如果出现抓不到包的情况,可尝试用以下步骤查找问题:

1)其他程序同时占用了1个端口,发生冲突,修改浏览器代理和工具代理端口即可。

2)之前开启的Burp软件未能关闭,导致了端口冲突,关闭重复开启的软件即可。

3)网站程序是HTTPS的方式,将Burp证书导入后重启浏览器继续尝试即可。

4)如果使用了火狐浏览器,要在火狐浏览器设置选项里的代理模块中,将“不使用代理”选项卡的内容清空并保存,或保存后重启浏览器进行尝试。

5)安装了其他代理插件,该浏览器代理插件未关闭,在通信过程中出现端口不一致情况。

6)网站自身设置了对代理屏蔽的情况,这种情况不是很常见,可尝试换一个网站或使用WireShark抓包尝试。

7)代理设置没有打开,还在关闭状态下。

3.History子选项卡

在History(历史)子选项卡里可以看到Burp Proxy历史拦截数据包,HTTP和Web-Sockets只是通信方式不同,但功能一样,如图2-34所示。

图2-34 History子选项卡中记录的数据

2.3.3 Repeater模块

Repeater(数据重放)模块在代码漏洞分析中是必不可少的,可以根据拦截到的包任意修改发放,并且回显信息。这样就不用每次分析数据包时都要抓包一下(这很麻烦),可以针对某个特定请求修改协议中的参数,然后将其发送。在Intercept拦截到的数据包上点击鼠标右键,选择Send to Repeater或者使用快捷键Ctrl+R将数据包发送到Repeater模块里,如图2-35所示。

图2-35 HTTP请求数据发送到Repeater模块

在Repeater选项卡中点击Go按钮,进行该拦截的请求包发放并显示返回的数据包,如图2-36所示。

图2-36 在Repeater模块下进行HTTP数据包发送

2.3.4 Intruder模块

Intruder(批量请求)模块是在原始请求下,通过自定义各种参数进行批量请求,以获取对应的返回信息。它支持一个或多个Payload在不同的位置进行攻击,并返回数据包。如系统需要大量不同请求、URL参数时,可以尝试使用该模块帮助完成一定量的需求测试。

在Proxy模块成功拦截数据包后右击,选中Send to Intruder,或者使用Ctrl+I快捷键将数据包发送至Intruder模块上,如图2-37所示。

1.修改设置Positions子选项卡

进入Intruder选项卡的Positions子选项卡中,可以看到发送来的原始数据,并且可以在这里设置需要批量修改或添加的参数以及Payload的位置,如图2-38所示。

图2-37 发送数据到Intruder模块

图2-38 Positions子选项卡修改设置

首先介绍一下右侧的四个按钮,常用的是Add$(选中)与Clear$(清除选中)。选中Add$后会出现$$,使用Intruder发包时可自定义替换该位置的Payload。

Attack type选项中可以定义测试模式,如图2-39所示。

图2-39 Positions子选项卡中测试模式的选择

有如下几个测试模式。

●Sniper:这个模式是使用单一的Payload组,针对每个position中的$$位置设置Payload,适合单独请求参数进行测试。

●Battering ram:这个模式是使用单一的Payload组,重复Payload并且一次把所有相同的Payload放入指定的位置中,适合批量选中多个位置进行测试。

●Pitchfork:使用多个Payload组。对于定义的位置可以使用不同的Payload组,可以同步迭代所有的Payload组,把Payload放入每个对应的位置中进行测试。

●Cluster bomb:使用多个Payload组。每个定义的位置中有不同的Payload组,可以迭代每个Payload组,每种Payload组合都会被测试一遍。该模式又称为“混合模式”。

2.自定义Payloads子选项卡

在Payloads子选项卡中,可以根据Positions设置的自定义位置修改数据包和测试模式,设置该对应填充的Payload(字典/测试参数)。Payloads子选项卡是用来自定义修改的内容模块,如图2-40和图2-41所示。

图2-40 Payloads子选项卡的自定义设置

图2-40 (续)

图2-41 在Payloads子选项卡中设置其他内容

图2-40中的主要选项说明如下。

●Payload set:在Positions里选中的对应位置,在什么位置使用什么自定义。

●Payload type:包含了18种Payload类型。本书使用到两种类型—Simple list和Numbers。

■Simple list:自定义内容,可传文件内容,并且可添加和删除。

■Numbers:纯数字测试,多用于数字参数测试。

对该功能感兴趣的朋友,可在网上进一步了解。

设置好选中的Simple list类型后,可以在Payload Options中添加Payload(字典),如图2-42所示。

图2-42 在Payloads子选项卡中加载本地字典文件

添加完成后,还能对导入的内容再进行添加和删除,如图2-43所示。

图2-43 对添加后的字典进行操作

当配置完成后点击导航栏的Intruder→Start attack,开始测试,如图2-44所示。

图2-44 开始测试模块

开始测试时会弹出一个Intruder attack窗口。综合以上设置,这里是对爆破一个后台登录密码的攻击行为进行测试。点击Start attack会弹出执行该任务所使用的任务框,该任务框中有Status状态码和Length数值信息,通常在测试人员的测试下,会观察Length下的返回数据大小的差异值来辅助判断爆破成功与否,如图2-45所示。

图2-45 查看发包后的长度、状态码判断

2.3.5 Decoder模块

Decoder模块是Burp Suite中的一款编码和解码工具,能将原始数据进行各种编码和散列的转换。从图2-46中可以看到,Decoder模块里左边是编辑框,右边是功能按钮。

图2-46 Decoder模块

单选按钮Text和Hex表示显示方式,Text主要以文本的方式进行显示,Hex主要以Hex编码格式进行显示,如图2-47所示。

图2-47 Decoder模块中的单选框

图2-47中的选项栏说明如下。

●Decode as:表示选择对应选项的解码类型进行解码。

●Encode as:表示选择对应选项的编码类型进行编码。

●Hash:散列。

例如将www.baidu.com进行URL编码,如图2-48所示。

图2-48 将地址进行URL编码

Smart decode为智能解码按钮,如图2-49所示。

图2-49 智能解码按钮

Decoder模块还支持多次编码解码转换。例如将https%3a%2f%2fwww.baidu.com%2fs% 3fwd%3d1进行URL解码,再进行URL编码,如图2-50所示。

图2-50 将网址数据先解码再编码