![Web代码安全漏洞深度剖析](https://wfqqreader-1252317822.image.myqcloud.com/cover/20/40868020/b_40868020.jpg)
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所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-27.jpg?sign=1738888157-RGPv2XjeHuVUMDKhQpPeEyJg8VsgYSFy-0-5ca7a6223c7c709e59356231edb6ee7a)
图2-27 Java环境安装
Java环境安装好之后,还需要配置环境变量(注意:环境变量是追加进去的,而不是覆盖进去的)。在“系统属性→高级→环境变量→系统变量→Path”中,点击“确定”以后,就可以尝试编辑系统变量了,如图2-28所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-28.jpg?sign=1738888157-ggVsMY12a2uRFpVeRWKi509YCyBJlo13-0-0a7385d8da5280cead79d2231d936409)
图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(编码&解码)。下面分别介绍这几个模块。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-29.jpg?sign=1738888157-ADx2F9phxxw3GKXbmX9w4I5eXnAJUx4q-0-c09becbfbfecf40d81ac66569eb13ead)
图2-29 打开Burp Suite工具
2.3.2 Proxy模块
Proxy模块是Burp Suite以用户驱动测试流程功能的核心,通过代理模式,可以拦截、查看、修改在客户端和服务端之间传输的数据。
1.Options子选项卡
通过Options(选项)子选项卡可以设置或者添加拦截代理,如图2-30所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-30.jpg?sign=1738888157-8xoAxPpx9rzue1QaNXmDOfwdbmRQJK8F-0-6c8ff8c9f7a3f010072bc1da02f0bbcb)
图2-30 设置或添加拦截代理
浏览器需要设置代理(也可以使用一些浏览器插件,如谷歌的SwitchyOmega、360安全浏览器自带的代理设置),如果找不到谷歌的代理设置,可以在设置选项里的搜索框中搜索“代理”,可以看到有一个选项“打开代理设置”,双击进去就可以设置,如图2-31所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-31.jpg?sign=1738888157-wm5TdUJ05OeRDOy3GQte0immG7CekNRK-0-d8b1df8446309e7251a3818c33da0af2)
图2-31 浏览器的代理设置(谷歌或360安全浏览器)
2.Intercept子选项卡
进入Intercept(拦截)子选项卡,可以设置拦截状态。如要开启拦截状态,则选中Intercept is on,点击后该按钮显示为Intercept is off,在此状态下点击按钮可关闭拦截模式。用这个按钮可以轻松地开启和关闭代理,如图2-32所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-32.jpg?sign=1738888157-VxPCJJIZ5PaDUac2uhfho8VMdRdwOAOk-0-32c168f5238a87cf5acaf6f617e81135)
图2-32 代理的开启和关闭
打开浏览器输入要拦截的地址,如http://localhost/phpMyAdmin/index.php,Burp Proxy就可以把数据请求包拦截下来。如点击Forward按钮则让数据包继续走下去,如点击Drop按钮则抛弃该数据包。在拦截的同时,也可以随意修改数据包,如图2-33所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-33.jpg?sign=1738888157-hRMzr5t4fpP5IHmqIsTH9yCGC1uKDe9Z-0-e662b07aeb0f99daf1700ef7aff55767)
图2-33 数据包拦截
如果出现抓不到包的情况,可尝试用以下步骤查找问题:
1)其他程序同时占用了1个端口,发生冲突,修改浏览器代理和工具代理端口即可。
2)之前开启的Burp软件未能关闭,导致了端口冲突,关闭重复开启的软件即可。
3)网站程序是HTTPS的方式,将Burp证书导入后重启浏览器继续尝试即可。
4)如果使用了火狐浏览器,要在火狐浏览器设置选项里的代理模块中,将“不使用代理”选项卡的内容清空并保存,或保存后重启浏览器进行尝试。
5)安装了其他代理插件,该浏览器代理插件未关闭,在通信过程中出现端口不一致情况。
6)网站自身设置了对代理屏蔽的情况,这种情况不是很常见,可尝试换一个网站或使用WireShark抓包尝试。
7)代理设置没有打开,还在关闭状态下。
3.History子选项卡
在History(历史)子选项卡里可以看到Burp Proxy历史拦截数据包,HTTP和Web-Sockets只是通信方式不同,但功能一样,如图2-34所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-34.jpg?sign=1738888157-KRkAdsDVjrScjEmZW6KPngFDkxxtvwQZ-0-52673938757b3b242b4bc87000ca78ee)
图2-34 History子选项卡中记录的数据
2.3.3 Repeater模块
Repeater(数据重放)模块在代码漏洞分析中是必不可少的,可以根据拦截到的包任意修改发放,并且回显信息。这样就不用每次分析数据包时都要抓包一下(这很麻烦),可以针对某个特定请求修改协议中的参数,然后将其发送。在Intercept拦截到的数据包上点击鼠标右键,选择Send to Repeater或者使用快捷键Ctrl+R将数据包发送到Repeater模块里,如图2-35所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-35.jpg?sign=1738888157-pgbKTg58MUnLGiIaLGSVXMYRqstVuOAA-0-05529f65d747d574b4a69a072fde7afa)
图2-35 HTTP请求数据发送到Repeater模块
在Repeater选项卡中点击Go按钮,进行该拦截的请求包发放并显示返回的数据包,如图2-36所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-36.jpg?sign=1738888157-kUVYPXzQ1OdhMTjn2XqFnRQYg3xTW0yl-0-4e4e2cd22e3b2798f7edadc7e18dbcb8)
图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所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-37.jpg?sign=1738888157-hjDg4btlmhpaaGpGJZsFjHfbwNq8MbBu-0-2f2cb248db244eb82dd75df81cba6969)
图2-37 发送数据到Intruder模块
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-38.jpg?sign=1738888157-ZIOpmqu1N3OLdWMPMfqQkjfjp0E3Sx4i-0-f297563bdd69606f84bb4c7932016f92)
图2-38 Positions子选项卡修改设置
首先介绍一下右侧的四个按钮,常用的是Add$(选中)与Clear$(清除选中)。选中Add$后会出现$$,使用Intruder发包时可自定义替换该位置的Payload。
Attack type选项中可以定义测试模式,如图2-39所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-39.jpg?sign=1738888157-a4nzPji1bpFYU5WKLpupyRDgKR1nx0qt-0-8b9c2fc0ffe4a4267278a623b9afb97e)
图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所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-40.jpg?sign=1738888157-AZlVSfhoA0Nc1ph9LgANLrSRcAkDUrzI-0-f34b45666c4dc6c2faf40283e98ec65f)
图2-40 Payloads子选项卡的自定义设置
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-40x.jpg?sign=1738888157-qBolEqXNbBBKSSlAqi67nubG7iXjOCPR-0-fd2cd762dbfaf399f001c9d97ca0d86b)
图2-40 (续)
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-41.jpg?sign=1738888157-awKTwRbUs2xhhXIulL4KQvs9bBnbvjpC-0-4950f5d41845e0d66fd9582fd942c765)
图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所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-42.jpg?sign=1738888157-2K2qUqRCmungVrZLfu3B8vetgvUjzpsn-0-8821c5e1a56f4fefa351be4520dd0381)
图2-42 在Payloads子选项卡中加载本地字典文件
添加完成后,还能对导入的内容再进行添加和删除,如图2-43所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-43.jpg?sign=1738888157-U8aEMQfVaCvrMZ8vVGFiIkqrTClVTm90-0-a2c36e28a12218ef6d7252474a9d1604)
图2-43 对添加后的字典进行操作
当配置完成后点击导航栏的Intruder→Start attack,开始测试,如图2-44所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-44.jpg?sign=1738888157-mbPdRb9vzqVBmm3YjM3g8DZOAQvhP2Vi-0-d3b0933966a4033b08e915d3b23d77c4)
图2-44 开始测试模块
开始测试时会弹出一个Intruder attack窗口。综合以上设置,这里是对爆破一个后台登录密码的攻击行为进行测试。点击Start attack会弹出执行该任务所使用的任务框,该任务框中有Status状态码和Length数值信息,通常在测试人员的测试下,会观察Length下的返回数据大小的差异值来辅助判断爆破成功与否,如图2-45所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-45.jpg?sign=1738888157-oKQbkgAobb3rltCsux47XKd3f9c136JW-0-768ca788fc598425a629f8329483c254)
图2-45 查看发包后的长度、状态码判断
2.3.5 Decoder模块
Decoder模块是Burp Suite中的一款编码和解码工具,能将原始数据进行各种编码和散列的转换。从图2-46中可以看到,Decoder模块里左边是编辑框,右边是功能按钮。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-46.jpg?sign=1738888157-csfkJZVuOaBwIIP6wgs5gHYPzOqnZDBo-0-4ba291b5f6ec50df1f178474b32227d6)
图2-46 Decoder模块
单选按钮Text和Hex表示显示方式,Text主要以文本的方式进行显示,Hex主要以Hex编码格式进行显示,如图2-47所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-47.jpg?sign=1738888157-cZtrcufNK6jR3c5qbpKTQxGKF5l7p4Yd-0-1ffed56e898c1227ca00f48033b48f94)
图2-47 Decoder模块中的单选框
图2-47中的选项栏说明如下。
●Decode as:表示选择对应选项的解码类型进行解码。
●Encode as:表示选择对应选项的编码类型进行编码。
●Hash:散列。
例如将www.baidu.com进行URL编码,如图2-48所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-48.jpg?sign=1738888157-pombj835FyNUnYOFb89nQvrGllTQ9eBA-0-9c30250ae6f4eb807b213e3ba88fdd62)
图2-48 将地址进行URL编码
Smart decode为智能解码按钮,如图2-49所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-49.jpg?sign=1738888157-tlD0ZooFM2CxYR3adtLqqNEd6EVcMoQt-0-d3e7f94ffa52c32856f561a932f061af)
图2-49 智能解码按钮
Decoder模块还支持多次编码解码转换。例如将https%3a%2f%2fwww.baidu.com%2fs% 3fwd%3d1进行URL解码,再进行URL编码,如图2-50所示。
![](https://epubservercos.yuewen.com/AAB7B5/21233234301205006/epubprivate/OEBPS/Images/2-50.jpg?sign=1738888157-Dfpq67F741T7lDe9eg7KIHVi0jeVs446-0-cb96c9750ef113bca97d4c9485c2ffe4)
图2-50 将网址数据先解码再编码