BurpSuite是一款十分好用的渗透测试工具,由Java语言开发,它的核心功能是在本地启动一个代理服务器,浏览器通过这个代理服务器和应用服务器通信时,BurpSuite能够拦截、记录、修改浏览器发出的HTTP请求,并很容易实现重放请求等功能。
BurpSuite不是开源软件,但提供了可以免费使用的社区版。社区版功能相对于专业版缺少Scanner等工具,其他功能也有限制,但代理、拦截的核心功能是一样的。
官网:https://portswigger.net/burp
除了BurpSuite外,我们还需要在浏览器中安装代理插件,如Firefox浏览器的FoxyProxy
插件,并配置HTTP和HTTPS代理,以使浏览器通过BurpSuite代理访问网络。这部分内容可以参考Firefox相关章节。
注:如果对非浏览器应用程序进行请求拦截,且软件内部也没提供代理配置,那么可以采用原理类似Proxifier的软件,它可以Hook操作系统的socket实现代理。
对于HTTPS协议代理,我们需要在浏览器中导入BurpSuite证书。这里我们需要使用Firefox浏览器,配置好代理后,访问http://burp/
,点击右上角CA Certificate
下载证书cacert.der
文件。
下载完成后,在Firefox设置中选择证书管理器->证书颁发机构
,并导入证书。
导入完成后,点击编辑信任
,并勾选如下图。
代理服务器(Proxy模块)拦截是BurpSuite的核心功能,在Proxy模块中我们可以拦截浏览器的Web请求和响应,修改请求和响应的数据。
BurpSuite支持应用层HTTP/HTTPS代理,我们可以在Proxy->Options
中对代理服务器进行配置。
默认情况下,代理服务器会监听8080
端口,拦截请求但不拦截响应(后者使用比较少)。
这个页面上的功能都比较直观,就不多赘述了。
在Proxy->Intercept
选项中,点选Intercept is on
按钮可以启动拦截,此时浏览器中发起请求,BurpSuite会拦截该请求并等待我们的下一步处理;如果不启动拦截,BurpSuite则只会记录请求历史,不过我们后续依然可以进行请求重放等操作。
页面中的请求信息我们可以任意修改,其中Raw
页面为原始HTTP请求信息,Params
页面为解析的请求参数,Headers
则是解析的请求头内容。
修改完成后,可以点击Forward
按钮,放行该请求。
在请求历史页面中,我们可以看到浏览器中的全部请求过程,这个其实和浏览器调试工具中的网络模块很像,但BurpSuite中集成了更多功能。
除了在历史记录中浏览整个请求交互过程,我们在历史记录上点击右键,可以看到很多菜单,其中几个Send to
功能是最常用的,它可以将该请求发到Comparer
、Repeater
、Intruder
等模块,供我们后续调试使用。
Comparer模块是BurpSuite中另一个非常好用的功能。它提供了方便我们对比两个请求响应内容的UI界面,使得我们调试时更加直观的看出两次请求和响应的区别,否则来回翻两个页面比较抓狂。
上下两面选择需要对比的数据,然后点击Compare... -> Words
按钮即可进行文本对比,Bytes
则是对比二进制数据,比较少用。
除了Proxy模块和Comparer模块,BurpSuite还集成了许多功能方便我们进行调试。
当然,很多人认为BurpSuite的这些周边功能用起来不太灵活,像Repeater模块、Intruder模块等,我们其实可以通过自己编写脚本实现,而且代码更具定制性和灵活性,这个就见仁见智了,我们可以根据自身需求进行选择。
重放模块可以重新编辑并发送一个HTTP请求,我们从历史记录中点击Send to Repeater
即可将请求添加到该模块。
在上面按钮中点击Go
即可执行该请求。
Intruder模块和Repeater模块类似,我们也可以从Proxy模块的历史记录中导入请求。但Intruder模块功能更加复杂,它能够自动化进行修改和请求尝试。
Target
页面中,可以编辑请求的地址和端口。
Positions
页面可以指定请求参数,我们知道HTTP是文本协议,这个页面中用§
标出的就是变量,可以进行自动替换。
Payloads
页面可以指定参数替换和请求的规则,配置好后,BurpSuite就可以基于我们定义的规则自动化的尝试各种参数请求。
其中,Payloads
可以选择各种类型,比如数字序列等,该功能最常见的用途就是字典密码爆破。