Trtyr's Blog

BurpSuite超详细的基本使用指南

字数统计: 12.4k阅读时长: 44 min
2023/12/27

BurpSuite超详细的基本使用指南

BurpSuite介绍

基本介绍

Burp Suite是一款常用于Web应用程序安全测试和渗透测试的工具套件。它由PortSwigger公司开发,提供了一系列功能强大的工具,用于发现Web应用程序中的安全漏洞和脆弱性。

基本功能

Burp Suite的主要组件包括以下几个部分:

  • 代理服务器 (Proxy): 充当Web应用程序和浏览器之间的中间人,可以截获和修改HTTP/HTTPS请求和响应。这使得测试人员可以观察和修改应用程序的通信,并检测潜在的安全问题。
  • 脆弱性扫描器 (Scanner): 自动扫描Web应用程序以发现常见的安全漏洞和脆弱性,例如跨站脚本(XSS)、SQL注入、路径遍历等。它提供了漏洞报告,帮助测试人员识别和修复这些问题。
  • 重放器 (Repeater): 允许测试人员捕获请求并重放它们,以便修改参数和观察不同的响应。这对于测试和验证特定的漏洞场景非常有用。
  • 编码器和解码器 (Encoder/Decoder): 提供了多种编码和解码技术,用于处理在Web应用程序中常见的数据编码方案,如URL编码、Base64编码等。
  • 爬虫 (Spider): 通过自动浏览网站并跟踪链接,以帮助测试人员构建网站地图,并发现隐藏的目录、文件和功能。

除了以上功能外,Burp Suite还提供了许多其他有用的工具和插件,可帮助测试人员进行更深入的渗透测试和定制化的安全测试。它广泛应用于安全测试人员、渗透测试人员和开发人员之间进行Web应用程序安全评估和漏洞修复工作。

BurpSuite的主要功能就是通过代理服务器功能,使得BurpSuite对网页的HTTP/HTTPS请求进行拦截和修改

大体就是这样

安装

安装教程: burpsuite pro 2022.12.4 破解版下载 cracked - 🔰雨苁ℒ🔰 (ddosi.org)

代理服务器 (Proxy)

下面会讲一下代理服务器 (Proxy)模块的使用教程

设置代理

既然是要拦截HTTP/HTTPS的请求,那么我们就要在浏览器里设置代理。

这一步挺简单的,主要就是这几步

BurpSuite设置代理

我们在代理 (Proxy)下的设置 (Option)中可以看到,这里有一个默认设置好的端口,8080。

这个意味着,BurpSuite占用了机器的8080端口,即浏览器可以代理到8080端口,从而把请求发到BurpSuite

当然,如果你的8080被占用,可以进行修改,就像这样。

设置好后,点击下面的ok就行了,这样端口就被更改了。

当然,如果你不想使用回环地址,你也可以添加其他的代理地址。点击旁边的添加 (add)

这里你就可以看到,他有三个选项,一个是设置回环地址,也就是127.0.0.1;一个是所有可用网络接口,一个是特定地址。

回环地址刚才已经整过了;这个特定地址也好理解,就是把地址代理到特定的地址上;不过这个所有的网络接口,我们后面会举例解释。

从上往下依次是回环127.0.0.1;所有网络接口(其实这里就能看出来是啥意思了);特定地址10.10.10.1:8083

这就是代理设置的基本使用。

浏览器代理设置

Burp代理设置好了,我们下一步就是让浏览器代理到Burp上。

我们这里推荐用火狐浏览器,因为他有一个插件特方便。

就是这个插件,一键换代理,及其好用,但是只在火狐上有。如果有在谷歌或者Edge上有更好,更方便的代理工具可以在下方留言。

当然,你也可以在浏览器设置里设置代理,不过不推荐,麻烦还一堆问题。

我们点击插件中的选项。

直接添加一个就行,上面我们Burp设置了三个地址,我们这里设置三个代理来看看。

回环地址代理

首先是回环地址,即127.0.0.1:8081

然后在左面设置一个名字,之后点击保存

保存好后可以直接替换

我们选择这里做一个测试,用它来抓我的DVWA靶场

我们选择好代理后,刷新一下界面,就能抓包了。

可以看到,我们浏览器使用的是 “Burp回环测试” 这个代理,然后在Burp可以看到抓包历史。

这里有一个新的功能,就是 “HTTP History”,这个模块在Proxy下,他会显示所有Burp抓到的包。

这样我们的代理就成功了。

特定地址代理

我们来试一试特定地址代理。

我们这里就用这个10.10.10.1:8083这个地址

然后浏览器的设置

我们现在使用的是特定地址的代理,而且我们回环地址没勾上,也就是说代理到回环是不行的。我们先来试试

在Burp是特定地址代理的情况下,浏览器使用回环代理,看看啥结果

可以看到,直接废掉。

我们再切到特定地址代理

可以看到,浏览器正常,Burp上出现了两个一样的HTTP包,第一个是回环代理的记录,第二个就是特定代理的记录

不过有的时候,历史太多了,我们可以进行删除

我们对着一条历史右击 (不要右击空白,没用),可以看到一堆东西,找到 Delete item(删除该项) 和 Clear history(清除所有历史)。根据字面意思进行操作就行了。

任意网络接口 - 手机抓包

这个有点特殊。我们先选上

这个主要是针对抓手机包用的。

现在我的手机和电脑在同一个局域网下

  • 手机IP: 192.168.153.149
  • 电脑IP: 192.168.153.192

现在我们要在手机上设置代理,我的是IOS,就用IOS举例了

然后我们手机访问一个4399

可以看到,抓包成功。不过很多主流APP内置防护,禁止burp抓包,所以可能存在抓不到包的情况。

系统代理

我们也可以设置成系统代理

可以看到,我们系统代理成了回环地址,然后浏览器也默认的系统代理

既然是系统代理,那么也就意味着,其他的只要是系统代理的浏览器都可以走Burp

我们拿Edge试试

可以看到成了。

再看看火狐

也成功了。

网页抓包

证书问题

为了方便,我们之后的所有演示,如果没有特殊要求的话,都用的是回环代理

我们设置为回环代理后,我们访问一下百度

可以看到出现问题了,这里说百度是一个安全的连接加密网站,也就是说,他是一个HTTPS网站。

在HTTPS中,有两种加密方式,一种就是单向认证,也就是说网站有证书就行了;另一种种是双向认证,还需要咱们也有证书。

单向认证可以通过一些手段把它退回HTTP,不过双向认证就需要CA认证了。

Burp提供了证书的下载,我们在被代理的浏览器里访问

  • http:///代理设置的IP:代理设置的端口
  • http://burp

这两个哪个都可以,一个不好使就去用另一个

点击右上角的那个CA,就可以下载证书了

然后在设置中搜素证书,导入证书

之后两个全部信任

然后点击确认即可

现在就可以抓百度等HTTPS的包了

这里展示的是PC浏览器的证书导入,之后还有PE浏览器的证书导入。

Intercept拦截

在proxy下有一个拦截功能

我们拿DVWA登录界面跑一下拦截。

我们在登录界面随便输入账号密码

然后先不要点击login,分析一下,我们点击login后,会向服务器发送一个请求,由于这是一个表单数据,所以发的是一个POST请求,也就是这样

把拦截点开,在点击login

可以看到,拦截了一POST请求。我们这时就i可以进行更改了

可以看到,下面的POST参数是这样的

username=1&password=1&Login=Login&user_token=f1980bd55bb40ef7149ebbfbcea5f0bf

我们把username改成admin

这里介绍一下这个界面的具体功能

Forward是放行,我们现在不是拦截了嘛,我们可以点击这个,把目前我们修改的包给发给服务器

我们也可以点击Drop (丢弃),顾名思义,就是把这个包给丢弃掉。

然后是Action,就是对这个包做一些操作,也就是右键。

我们这里把username修改后,放行

放行后,发现卡在这儿了,没啥明显的提示,再放行

可以看到,login Failed,登录失败。(不用框里的数据,那是浏览器的自动填充)

我们来到HTTP History,可以看到之前的数据

我们再试一次,这次将账号密码通过拦截修改,修改成正确的账号密码,从而登录进去

放行一下看看

可以看见成功登录进去了。去历史记录那里看看

当然,细心的同学会发现这个东西

这两玩意没啥,Raw就是原始数据,Hex就是16进制数据

手机抓包

手机抓包就有点麻烦了,主要就是证书的导入,IOS导入证书有点麻烦,所以我这里就用安卓模拟器来做安卓手机抓包了。

这里用的是夜神模拟器,代理方式用的是特定地址代理

我们在模拟器上设置一个代理

点击保存,然后访问burp来下载证书,方式和上面一样

下载证书,下载的证书会默认保存在Download下,不过是der后缀的,我们需要把der改成cer

然后就安装证书了

之后会让你输入pin码,没有就让你设置一个,然后就好了。

我们访问一下靶场

成功!

其他

Action (右键操作)

右键操作挺多的,我这里简单翻译一下

这里东西挺多,之后会慢慢讲,先讲一下这个

这个的功能就是返回当前请求的响应,啥意思呢,画个图就懂了

上图是正常的放行,当我们点击response to request后,再点击放行就是这样

可选项配置Options

Intercept Client Requests (客户端请求拦截)

当上面的intercept request based on the follow rules被勾上时,这个才生效。在下面被勾选的都会被拦截或者不拦截

我们先来看中间的那些

  • Enable: 设置是否启用
  • Opertor: 表示当前的规则与其他规则是的方式 (And) 还是的方式 (Or) 来共存;
  • Match type: 表示匹配类型,此处匹配类型可以基于域名、IP、地址、协议、请求方法、URL、文件类型、参数、cookies、头部或者内容、状态码、MIME类型、HTML页面的title等
  • Relationship: 表示此条规则是匹配还是不匹配
  • Condition: 代表输入的关键字

比如我们看第一条

这个意思就是,启用这条规则,规则内容是匹配所有File extension (文件扩展名),关键字是(^gif$|^jpg$|^png$|^css$|^js$|^ico$|^svg$|^eot$|^woff$|^woff2$|^ttf$),然后不匹配。

也就是说不拦截gif、jpg、png、css、js、ico、svg、eot、woff、woff2、ttf这些后缀的文件。也就是过滤静态文件

那我们勾选两个是啥意思呢?就比如下图这样

这里要注意,他这个是有上下级顺序的,从上往下依次过滤。这里首先是拦截除静态文件外的请求,然后检查请求里是否有参数,有就拦截,不过由于是or关系,没有就相当于这条规则作废。所以这张图的实际效果就是拦截除静态文件外的请求

那么我这么改一下,or改成and

首先拦截除静态文件外的文件,然后检查请求中是否有参数,有的话才拦截。所以这张图意思是拦截除静态文件外且带有参数的请求

利用这种规则,我们可以实现一些功能,比如抓取指定网址的请求。

我们添加一个规则

点击ok

这样就有一个效果,拦截除静态文件外的请求,同时只拦截域名www.baidu.com的请求

当然,你也可以添加其他的规则。

可以看到这里有一堆

然后就是这俩

这俩没啥好说的

Intercept Server Responses (服务端响应拦截)

我们可以通过设置intercept Server Response来筛选出符合条件的HTTP响应。

和上面客户端请求拦截差不多,现在就是没开启服务器响应拦截

Intercept WebSockets Messages

默认就行,不用管他

Response Modification (响应修改)

自上而下,每一个选择项分别对应的功能是

  • 显示form表单中隐藏字段
  • 高亮显示form表单中隐藏字段
  • 使form表单中的disable字段生效,变成可输入域
  • 移除输入域长度限制
  • 移除JavaScript验证
  • 移除所有的JavaScript
  • 移除标签
  • 转换https超链接为http链接
  • 移除所有cookie中的安全标志
  • 通过服务器返回消息修改可选择项的设置,可以方便渗透测试人员在安全评估过程中突破原有的数据限制,更好、更快地检测服务器的安全性。
Match and Replace

此项配置主要用来自动替换请求消息和服务器端返回消息中的某些值和文本,它与前文的规则的不同之
处还在于支持正则表达式语言。

可以看到上面写着These settings cre used to cutomatically replace paris of requests and responses passing through the Proxy,这些设置用于自动替换通过代理传递的大量请求和响应。

例如,当我们要替换所有请求消息中的参数邮箱地址为1693309049@qq.com时,可以参考下图的设置填写输入项并保存验证。

然后点击ok就行了。

TLS Pass Through

TLS Pass Through设置用于指定Burp将直接通过TLS连接的目标web服务器。在代理拦截视图或历史记录中没有关于通过这些连接发出的请求或响应的详细信息。

在无法直接消除客户端TLS错误的情况下,通过TLS连接可能很有。例如,在执行TLS证书固定的移动应用程序中。如果应用程序访问多个域,或者混合使用HTTP和HTTPS连接,那么通过TLS连接到特定的有问题的主机仍然允许您以正常的方式使用Burp处理其他流量。

如果启用了客户端TLS协商失败时自动添加条目的选项,则当客户端TLS协商失败时(例如,由于不识别Burp的CA证书),Burp会检测到,并自动将相关服务器添加到TLS直通列表中。

以上是官方文档说明,我们设置这个东西的主要目的是减少干扰因素,把那些我们不需要的流量去掉,只记录我们需要测试的网站流量.

下面列表根据日常使用中最常见的干扰网址写的,可以自行进行增加或删除.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
.*\.google\.com
.*\.gstatic\.com
.*\.googleapis\.com
.*\.pki\.goog
.*\.mozilla\..*
.*\.mozilla\.(com|net|org)
.*\.google-analytics\.com
.*\.android\.com
.*\.google\.com\.hk
.*\.baidu\.com
.*\.bdstatic\.com
.*\.jpush\.cn
.*\.firefox\.com
.*\.firefoxchina\.cn
.*\.amap\.com
.*\.aliyuncs\.com
.*\.player.vimeo\.com
.*\.lastpass\.com
.*\.shodan\.io
.*\.whatruns\.com
.*\.wappalyzer\.com
.*\.jd\.com
.*\.sogou\.com
.*\.gvt1\.com
.*\.ghostery\.(com|net)
.*\.aka\.ms
.*\.msecnd\.net
.*\.skype\.com
.*\.microsoft\.com
.*\.visualstudio\.com
.*\.msn\.com
.*\.azureedge\.net
.*\.scorecardresearch\.com
.*\.msedge\.net
.*\.bing\.com
.*\.windowsupdate\.com
.*\.windows\.com
.*\.live\.com
.*\.digicert\.com
.*\.trafficmanager\.net
.*default\.exp-tas\.com
.*\.vsassets\.io
.*\.bignox\.com
.*\.yeshen\.com
.*\.googletagmanager\.com
.*\.noxgroup\.com
.*\.bdimg\.com
.*\.snssdk\.com
.*\.aliyuncs\.com
.*\.dburl\.net
.*\.microsoftonline\.com

把这个保存到一个txt文件里。

然后在TLS里导入

然后就导入成功了

这样,以后这些干扰项就不会被抓取到。

Miscellaneous

其他配置项主要是杂项设置。其界面如下:

  • 指定使用HTTP/1.0协议与服务器进行通信 这项设置用于强制客户端采用HTTP/1.0协议与服务器进 行通信,一般客户端使用的HTTP协议版本依赖于客户端浏览器,但某些服务器或者应用,必须使用HTTP/1.0协议,此时可勾选此项
  • 指定使用HTTP/1.0协议反馈消息给客户端。目前所有的浏览器均支持HTTP/1.0协议和HTTP/1.1协议,强制指定HTTP/1.0协议主要用于显示浏览器的某些方面的特征,比如,阻止HTTP管道攻击。
  • 设置返回消息头中的“Connection:close” 每次连接结束后关闭连接。
  • 请求消息头中脱掉Proxy-* 浏览器请求消息中,通常会携带代理服务器的相关信息,此选项主要用于清除消息头中的代理服务器信息,防止被服务端识别到从而禁止产生交互。
  • 解压请求消息中的压缩文件 某些应用在与服务器端进行交互时,会压缩消息体,勾选此选项,则Burp Suite 会自动解压消息体
  • 解压返回消息中的压缩文件 大多数浏览器支持压缩的消息体,勾选此选项,则Burp Suite 会自动解压被服务器端压缩的消息体
  • 禁用http://burp
  • 允许通过DNS和主机名访问web接口 即允许通过域名或主机名访问Burp Suite
  • 不在浏览器中显示Burp Suite错误 在我们使用Burp Suite时,如果发生了Burp Suite自身的错误,会在浏览器中显示,如果勾选了此项,则不会在浏览器中显示此类错误。
  • 禁用日志到历史和网站地图中 此选项的作用是阻止记录日志到历史和网站地图,在某些情况下可能有用,比如说,通过上游服务器进行认证或者做正则表达式替换时,为了降低内存的消耗,减少日志的储存,你可以勾选此项。
  • 拦截功能开始设置,这个选项主要用来配置intercept功能的生效方式,分为总是生效、 总是失效 、从上一次的BurpSuite中恢复设置3种方式。

其他功能

在burp代理中还有一些其他的功能,比如颜色的修改

现在我们抓了这些数据包

我现在觉得当前这个包比较重要,想要把这个包和其他数据包区分开来,我可以这样

这样添加颜色就可以突出显示了。

HTTP History (HTTP历史记录)

这个前面也提到过,主要功能就是历史记录,之所以放在代理模块最后讲,因为他确实简单,基本自己看看就能上手了。

这里大部分前面都讲了,就差这个筛选了

这个筛选挺有用的,比如说筛选带参数的请求,筛选IP为……的请求,筛选带cookies的请求等等

Burp目标 (Target)

Burp Target 组件主要包含站点地图 (Site Map)、目标域 (Scope)、Target 工具三部分组成,他们帮助渗透测试人员更好地了解目标应用的整体状况、当前的工作涉及哪些目标域、分析可能存在的攻击面等信息.

Site Map (站点地图)

网站结构

站点地图可以让我们更加有条理的去观察网站的结构

可以看到,现在是啥都没有的。我们在去访问站点,比如我们访问www.trtyr.top

这里就出现东西了,这些,就是访问www.trtyr.top是访问到的站点

我们点开看看

在这里,我们就能直观的看到网站的结构

当然,可能不是太完整,不过,当你在这个网站访问的数据越多,他获取到的信息就会越多,网站目录就会越完整。

当我们完成了某个项目后,想要删除,右击可以删除某一个

如果想要全部删除的话,需要按Ctrl+A,然后再右键

Contents

在中间的是contents,他有点像我们的HTTP History

不过他确实就是History,和History一样,可以右键进行Aciton

Issues

在右面,是一个issues界面,也就是这个网址可能存在的问题

点击一个问题后,会在下面有具体的参考和介绍

这个其实就是被动扫描,下面会出现。

Scope (作用域)

Target Scope中作用域的定义比较宽泛,通常来说,当我们对某个产品进行渗透测试时,可以通过域名或者主机名去限制拦截内容,这里域名或主机名就是我们说的作用域,如果我们想限制得更为细粒度化,比如,你只想拦截login目录下的所有请求,这时我们也可以在此设置,此时,作用域就是目录。

比如,我只想要获取到www.trtyr.top的流量,我就可以在作用域规则里添加www.trtyr.top

有弹窗的话直接yes就行。

这样,burp只会抓取www.trtyr.top的流量,其他的不抓。

我们刷新页面,首先看History

可以看到,只有这一个

我们在看Site Map

可以看到,也是只有他一个,这就是作用域的作用

我们刚才是设置为只抓www.trtyr.top的流量,我们也可以设置不抓某些流量

这里不抓baiud.com是不是有点熟悉,就是上面讲的TLS Pass Through,这俩在过滤方面功能是一样的,不过TLS Pass Through只能设置域名,但是可以使用正则,也就是说可以拦截子域名;Scope可以拦截单独的目录

我们也可以在Site Map中,把一个域名直接加到Scope中

他默认是加到Include里

这样能方便一点

如果我们想要删除,就正常remove就行,不过需要注意,需要re-enable一下

Target功能

我们在Site Map中选择URL,右键

可以看到,有一堆东西

从上往下翻译一下

  • 从Scope删除
  • 扫描
  • 被动扫描
  • 主动扫描
  • 管理工具
    • Search 搜索
    • Find Comments 查找注释
    • Find scripts 查找js代码
    • Find references 查找引用
    • Analyze target 分析目标
    • Discover content 内容勘测
    • Schedule task 定时任务
    • Simulate manual testing 人工模拟
  • 比较站点地图
  • 展开所有目录
  • 展开请求的项目
  • 收起当前目录 (只有展开后才有)
  • 删除主机/目录
  • 复制此主机/目录中的所有URL (这个网站的URL)
  • 复制此主机/目录中的链接 (这个网站请求的URL)
  • 保存选定项目
  • 错误
    • 问题保存到本地
    • 删除问题
  • 视图
    • 显示issue
    • 不显示issue
  • 在新窗口展示
  • 地图文件

在seacrh中,我们可以构建正则来进行牛逼的搜索,你也可以直接搜进行简单准确的搜索

比如说我搜索login

这样所有请求中带login的都被搜索出来了。

上面的选项,简单翻译一下

Find Comments

这个功能是来检查注释

所有在响应中存在注释的URL都被找了出来,注释内容在下方。我们看一下响应,看看是不是这些注释

可以看大,确实有注释

Find scripts

这个功能是找响应中的JS内容,和上一个差不多

Find references

这个可以找到存在URL引用的响应

Analyze target

这个模块的功能是进行目标分析,比如我们分析一下网站

Summary 概述

在概述这里我们可以发现分析目标的一些信息

1
2
3
4
动态URL: 1
静态URL: 28
出现过几次参数: 1
有几种参数: 1

这里要注意,第三项是出现过几次参数,第四项是有几种参数。这里是一种参数出现了一次,不过也会出现,两种参数,出现了10次这样的情况。

Dynamic URLs

这里是显示动态URL的地方

动态URL就是带参数的URL,GET请求和POST请求都有,比如下面这个就是一个GET请求的动态URL

可以右键触发Action

Static URLs

这里是显示静态URL的地方

静态URL就是没有参数的。这里同样可以右键触发Action

Parameters

这里会显示所有的参数

比如这里就只有一个GET请求的page参数,出现次数为1,值为include.php

Discovery Session Status

这个可以认为是一个爬虫模块

他有三个模块,分别Control (控制)、Config (配置)、Site map (站点地图)

我们Target下的Site map树是通过被动扫描得到的,也就意味着目录少,所有需要有爬虫功能来爬取目录

Control

先看Control

直接点那个session is not running就行

这样就开始爬取了。

Config

再看config

Discover content 配置界面由Target、Filenames、File Extensions、Discovery Engine四部分组成。

  • Target (目标)
    • Start directory:开始目录
    • Discover:爬取对象的类型
    • Recurse Subdirectories:递归子目录
  • Filenames (文件名): 配置Burp用于生成要测试的文件名的源。
    • Built-in short file list:内置短文件列表
    • Built-in short directory list:内置短目录列表
    • Built-in long file list:内置长文件列表
    • Built-in long directory list:内置长目录列表
    • Custom file list:自定义文件列表
    • Custom directory list:自定义目录列表
    • Names observed in use on target site:在目标站点上观察到的使用中的名称
    • Derivations based on discovered items:基于已发现项目的推导
  • File Extensions (文件扩展名): 本项设置会控制发现会话如何向正在测试的文件中添加文件扩展名。
    • 测试这些扩展文件:asp, aspx, htm, html, jsp, php
    • 测试所有在目标站点上监测到的扩展文件,除了以下这些:class, com, doc, exe, gif, gz, jar, jpeg, jpg, mp3, mpeg…
    • 在发现的文件上测试这些变体扩展名:bac, BAC, backup, BACKUP, bak, BAK, conf, cs …测试没有扩展名的文件
  • Discovery Engine (发现引擎): 这些设置用来控制发现站点内容时发出HTTP请求的引擎,保持默认配置即可。

Start directory是来设置开始目录的,比如你的开始目录是www.trtyr.top,他就是爬取这个网站的所有目录和文件;如果你的开始目录是www.trtyr.top/haha,他就会从haha这个目录下爬取。

Discover是来指定爬取对象的类型

Filenames这里可以在Custom file list和Custom directory list这两个地方,添加使用自己的文件名和目录字典。

Site map

这里可以显示扫描后的网站地图

我们拿Target下的site map做一下对比

可以明显发现扫描后的比被动扫描的更完善。

主动被动扫描

我们把issue删除掉

我们右键选择主动扫描,开始扫

我们来到控制面板,就是这个

可以看到,这里有一个主动扫描的任务,已经结束,在右面可以看到一堆iusse,我们再看看站点地图

可以发现啊,明显变多了

当使用主动扫描模式时,Burp 会向应用发送新的请求并通过payload验证漏洞。这种模式下的操作,会
产生大量的请求和应答数据,直接影响系统的性能,通常使用在非生产环境。它对下列的两类漏洞有很
好的扫描效果:

  • 客户端的漏洞,像XSS、Http头注入、操作重定向;
  • 服务端的漏洞,像SQL注入、命令行注入、文件遍历。

对于第一类漏洞,Burp在检测时,会提交一下input域,然后根据应答的数据进行解析。在检测过程
中,Burp会对基础的请求信息进行修改,即根据漏洞的特征对参数进行修改,模拟人工测试,以达到检
测漏洞的目的。

对于第二类漏洞,一般来说检测比较困难,因为是发生在服务器侧。比如说SQL注入,
有可能是返回数据库错误提示信息,也有可能是什么也不反馈。Burp在检测过程中,采用各个技术来验
证漏洞是否存在,比如诱导时间延迟、强制修改Boolean值,与模糊测试的结果进行比较,以达到高准
确性的漏洞扫描报告。

被动也一样,直接选择被动扫描就行

当使用被动扫描时,Burp几乎不额外构造请求进行爬虫和扫描,它根据用户浏览网页进行常规请求,对
已经存在的请求和响应进行简单分析,这对系统的检测比较安全,尤其在你授权访问的许可下进行的,
通常适用于生产环境的检测。一般来说,下列这些漏洞在被动模式中容易被检测出来:

  • 提交的密码为未加密的明文(可用DVWA演示)
  • 不安全的Cookie的属性,比如缺少的HttpOnly和安全标志
  • cookie的范围缺失
  • 跨域脚本包含和站点引用泄漏
  • 表单值自动填充,尤其是密码
  • SSL保护的内容缓存
  • 目录列表
  • 提交密码后应答延迟
  • session令牌的不安全传输
  • 敏感信息泄露,像内部IP地址,电子邮件地址,堆栈跟踪等信息泄漏
  • 不安全的ViewState的配置
  • 错误或者不规范的Content-type指令

虽然被动扫描模式相比于主动模式有很多的不足,但同时也具有主动模式不具备的优点,除了前面说的
对系统的检测在我们授权的范围内比较安全外,当某种业务场景的测试,每测试一次都会导致业务的某
方面问题时,我们也可以使用被动扫描模式,去验证问题是否存在,减少测试的风险。

控制面板 (Dashboard)

我们上面用主动扫描的时候简单看过,主要有三个模块

  • task模块: 当前进行的任务
  • lssue模块: 扫描到的错误
  • log模块: 显示日志信息

这个其实是相当于以前版本的spider和scanner模块,我们也可以看到上面的两个东西

这玩意大大的scan就告诉我们这是来扫描的。下面task也是,默认开启了爬虫和审计功能

这个模块其实挺简单,task的筛选也简单命令,日志和错误信息都没啥好讲的,主要讲讲扫描,但是这个扫描还和我们上面讲的重复了

主动扫描

我们点击new scan

这里可以选择爬虫和爬虫+审计,下面可以指定URL扫描,也可以在下面使用更精确的URL;默认使用HTTPS/HTTP协议,如果你指定的URL还有什么奇奇怪怪的协议也可以勾选另一个选项。

然后下一步,到达Scan Configuration

这里然你选择扫描模式,根据下图翻译自己选就行了

下一步来到Application login

这个登录扫描,尽量不要用,因为会对网站业务造成影响,我们是搞渗透测试的,不是黑客搞破坏的。

下一步是Resource pool资源池,可以新建资源配置线程

Create new resource pool 创建新的资源池
Name:自定义
Maximum concurret requests:最大并发请求,默认配置为 10
Delay between request:请求之间延时
Delay random variations:添加随机变化
miliseconds:毫秒

我们可以设置毫秒级别的请求,加上随机变化

扫描

我们上面已经配置好了,点击ok开始

这里可以看到扫描进度

由于我扫的是靶场,所以一下子就能扫到这么多问题。

入侵 (Intruder)

Intruder模块介绍

在渗透测试过程中,我们经常使用Burp Intruder,它的工作原理是:Intruder在原始请求数据的基础
上,通过修改各种请求参数,以获取不同的请求应答。每一次请求中,Intruder通常会携带一个或多个
有效攻击载荷(Payload),在不同的位置进行攻击重放,通过应答数据的比对分析来获得需要的特征
数据。

Burp Intruder通常被使用在以下场景:

  • 标识符枚举:Web应用程序经常使用标识符来引用用户、账户、资产等数据信息。例如,用户名,文件ID和账户号码。
  • 提取有用的数据:在某些场景下,而不是简单地识别有效标识符,你需要通过简单标识符提取一些其他的数据。比如说,你想通过用户的个人空间id,获取所有用户在个人空间的昵称和年龄。
  • 模糊测试:很多输入型的漏洞,如SQL注入,跨站脚本和文件路径遍历可以通过请求参数提交各种测试字符串,并分析错误消息和其他异常情况,来对应用程序进行检测。由于的应用程序的大小和复杂性,手动执行这个测试是一个耗时且繁琐的过程。这样的场景,可以通过设置Payload,通过Burp Intruder自动化地对Web应用程序进行模糊测试。

我们找到一个带参数的请求,比如这个登录的POST请求,在哪里找都无所谓。

右击该请求,把他发送到Intruder

然后可以看到上面Intruder模块亮了一下

然后我们就可以进去搞这个请求了

Position

有效载荷

Position主要有两个东西,Choose an attack type (选择攻击类型),Payload Positions (有效载荷位置)

这里可以看到这个参数是这样的

§1§

这就代表这是一个有效载荷,就是是说,在这个参数进行攻击

我们点击旁边的clear

这样就没有载荷了。

嗯,刚才可能说的不太清楚,这样,我们想要通过password进行攻击,我们就选中password对应的参数内容,点击add

这样就代表,我后面要爆破就爆破这个password的值

想要爆破谁,就把谁选中add

上面的攻击类型

有三个攻击类型

  • Sniper
  • Battering ram
  • Pitchfork
  • Clus ter bomb

攻击类型

狙击手模式 (Sniper)

它使用一组Payload集合,依次替换Payload位置上 (一次攻击只能使用一个Payload位置)被 § 标志的文本,没有被 § 标志的文本将不受影响,对服务器端进行请求,通常用于测试请求参数是否存在漏洞。

攻城锤模式 (Battering ram)

它使用单一的Payload集合,依次替换Payload位置上所有被 § 标志的文本,而没有被 § 标志的文本将不受影响,对服务器端进行请求。与狙击手模式的区别在于,如果有多个参数且都为Payload位置标志时,使用的Payload值是相同的,而狙击手模式只能使用一个Payload位置标志。

交叉模式 (Pitchfork)

它可以使用多组Payload集合,在每一个不同的Payload标志位置上(最多20个),遍历所有的Payload。举例来说,如果有两个Payload标志位置,第一个Payload值为A和B,第二个Payload值为C和D,则发起攻击时,将共发起两次攻击,第一次使用的Payload分别为A和C,第二次使用的Payload分别为B和D。

集束炸弹模式 (Cluster bomb)

它可以使用多组Payload集合,在每一个不同的Payload标志位置上(最多20个),依次遍历所有的Payload。它与交叉模式的主要区别在于,执行的Payload数据是Payload组的乘积。举例来说,如果有两个Payload标志位置,第一个Payload值为A和B,第二个Payload值为C和D,则发起攻击时,将共发起四次攻击,第一次使用的Payload分别为A和C,第二次使用的Payload分别为A和D,第三次使用的Payload分别为B和C,第四次使用的Payload分别为B和D。

Payloads

基本介绍

上面我们选择了Sniper模式来爆破password参数,这部就要来爆破了

这里有四个部分组成

Payload Sets,Payload Option,Payload Processing,Payload Encode

我们在设置好后可以点击右上方的start开始。

Payload类型

在Payload Sets中有Payload集合的设置选项,包含了经常使用的Payload类型,共18种。

他们分别是:

简单列表 (Simple list)

最简单的Payload类型,通过配置一个字符串列表作为Payload,也可以手工添加字符串列表或从文件加载字符串列表。

在此操作界面上,选择的Payload列表中,已经预定义了一组简单Payload列表,包括XSS脚本、CGI脚本、SQL注入脚本、数字、大写字母、小写字母、用户名、密码、表单域的字段名、IIS文件名和目录名等等,极大地方便了渗透测试人员的使用。

比如我们这里添加一个字典跑一下

运行时文件 (Runtime file)

指定文件,作为相对应Payload位置上的Payload列表。

当我们如上图所示,指定Payload type使用的类型为Runtime file时,下方的Payload Options将自动改变为文件选择按钮和输入框,当我们点击【select file】选择文件时,将弹出图中所示的对话框,选择指定的Payload文件。运行时,Burp Intruder将读取文件的每一行作为一个Payload。

自定义迭代器 (Custom iterator)

这是一款功能强大的Payload,它共有8个占位,每一个占位可以指定简单列表的Payload类型,然后根据占位的多少,与每一个简单列表的Payload进行笛卡尔积(集合相乘的结果),生成最终的Payload列表。例如,某个参数的值格式是username@@password,则设置此Payload的步骤是:

位置1,选择Usernames

接着,指定位置2,输入值@@

最后指定位置3,选择Passwords

当我们开始攻击时,生成的Payload值就是这样的

1
root@@123456

位置1 (username) + 位置2 (@@) + 位置3 (password)

字符串替换 (Character substitution)

顾名思义,此种Payload的类型是对预定义的字符串进行替换后生成新的Payload。比如说,预定义字符串为ABCD,按照下图的替换规则设置后,将对AB的值进行枚举后生成新的Payload。

这样payload ABCD就变成了48CD

大小写替换 (Case modification)

对预定义的字符串,按照大小写规则,进行替换。比如说,预定义的字符串为Peter Wiener,则按照下图的设置后,会生成新的Payload。

这样abcd就会变成ABCD

生成规则由上而下依次是:

  • No change (不改变,使用原始字符串)
  • To lower case (转为小写字母)
  • To upper case (转为大写字母)
  • To Propername (首字母大写,其他小写)
  • To ProperName (单词首字母大写,其他不改变)

刚才选的就是To upper case,在实际使用中,可以根据自己的使用规则进行勾选设置。

字符块 (Character blocks)

这种类型的Payload是指使用一个给出的输入字符串,根据指定设置产生指定大小的字符块,表现形式为生成指定长度的字符串。它通常是用来绕过应用防火墙 (WAF)。

这个效果就是

1
2
3
4
5
A x 100
A x 150
A x 200
A x 250
……
数字类型 (Number)

这种类型的Payload是指根据配置,生成一系列的数字作为Payload。它的设置界面如下:

  • Type表示使用序列还是随机数
  • From表示从什么数字开始
  • To表示到什么数字截止
  • Step表示步长是多少。
  • 如果是随机数,则How many被激活,表示一共生成多少个随机数。
  • Base表示数字使用十进制还是十六进制形式
  • Min integer digits表示最小的整数是多少
  • Max integer digits表示最大的整数是多少,如果是10进制,则Min fraction digits 表示小数点后最少几位数
  • Max fraction digits表示小数点后最多几位数。

日期类型 (Dates)

这种类型的Payload是指根据配置,生成一系列的日期。

其设置选项比较简单,没有什么特别复杂的,不再赘述。至于日期格式,可以选择Burp自己提供的样例格式,也可以自定义。

暴力字典 (Brute forcer)

此类Payload生成包含一个指定的字符集的所有排列特定长度的有效载荷,通常用于枚举字典的生成

  • Character set 表示生成字典的数据集,从此数据集中抽取字符进行生成。
  • Min length表示生成Payload的最小长度
  • Max length表示生成Payload的最大长度。
空类型 (Null payloads)

这种负载类型产生的Payload,其值是一个空字符串。在攻击时,需要同样的请求反复被执行,在没有任何修改原始请求的场景下此Payload是非常有用的。

它可用于各种攻击,例如应用层Dos、或保持活会话令牌、资源竞争等。

在配置Payload生成方式时,它有两个选项,我们可以指定生成(Generate)多少Payload,也可以设置为一直持续攻击 (Continue indefinitely)

字符扮演者 (Character frobber)

这种类型的Payload的生成规律是:依次修改指定字符串在每个字符位置的值(不做特殊说明的情况下就是指十进制),每次都是在原字符上递增1个该字符的ASCII码。

它通常使用于测试系统使用了复杂的会话令牌的部件来跟踪会话状态,当修改会话令牌中的单个字符的值之后,您的会话还是进行了处理,那么很可能是这个令牌实际上没有被用来追踪您的会话。

如果我们输入abc,那么结果就是

1
2
3
bbc
acc
abd

a的ASCII码是97,b为98,c为99

那么第一次把abc的a的ASCII码加一,就是bbc;第二次把abc的b的ASCII加一,就是acc;第三次同理,变成abd。

用户名生成器 (Username generator)

这种类型的Payload主要用于用户名和email帐号的自动生成

我设置成trtyr,结果是

Resource Pool

和上面主动扫描的Resource Pool一样

Option

Attack Results (攻击结果设置)

这个设置主要用来控制从攻击结果中抓取哪些信息。它的参数有:

  • Store requests / responses 保存请求/应答消息
  • Make unmodified baseline request 记录请求母板的消息内容
  • Use denial-of-service mode使用Dos方式
  • Store fullpayloads存储所有的Payload值。

Grep Match

这个设置主要用来从响应消息中提取结果项,如果匹配,则在攻击结果中添加的新列中标明,便于排序和数据提取。比如说,在密码猜测攻击,扫描诸如“密码不正确”或“登录成功”,可以找到成功的登录;在测试SQL注入漏洞,扫描包含“ODBC”,“错误”等消息可以识别脆弱的参数。

其选项有

  • Match type 表示匹配简单的字符串还是正则表达式
  • Case sensitive match是否大小写敏感
  • Exclude HTTP headers匹配的时候,是否包含http消息头。

Redirections

这些设置主要是用来控制执行攻击时Burp如何处理重定向,在实际使用中往往是必须遵循重定向,才能实现你的攻击目的。例如,在密码猜测攻击,每次尝试的结果可能是密码错误会重定向响应到一个错误消息提示页面,如果密码正确会重定向到用户中心的首页

爆破结果

攻击结果的界面如下图所示:

在对攻击结果的分析中,你可以通过单击任一列标题(升序排序,降序排序和未排序)重新排序表的内容。有效的应答通常可以通过以下存在差异的内容进行判断:

  • 不同的HTTP状态代码
  • 不同长度的应答
  • 存在或不存在某些表达式
  • 错误或超时的发生
  • 用来接收或完成响应时间的差异

比如说,在URL路径扫描过程中,对不存在的资源的请求可能会返回“404未找到”的响应,或正确的URL会反馈的“200 OK”响应。或者在密码猜测攻击,失败的登录尝试可能会产生包含“登录失败”、“200 OK”等关键字的响应,而成功的登录可能会生成“302 XXX”的响应,或不同的“200 OK”响应页面。

靶场演练

我们拿DVWA靶场中的Brute Force做一次简单的攻击演练

首先拦一下包

把这个包发送到Intruder

跑一个

我们选择Sniper模式,对username和password两个参数进行爆破。

这里注意,我们用的是Sniper模式,这个模式只能跑一个参数,也就意味着,我们需要知道一个正确的跑另一个。比如这里我们知道账号是admin,然后爆破password参数

跑字典就行了

设置好后点击右上方的start

可以看到,password的长度鹤立鸡群,这就是admin的密码

跑俩

我们这次选择Cluster bomb模式跑,这个可以跑多个参数

把username和password都整上

选择第一个参数,即username,然后上账号字典

选择第二个参数,上密码字典

然后开始爆破

可以看到,这俩的长度和其他人不一样,说明这就是正确的账号密码对。

重放器 (Repeater)

功能使用

在渗透测试过程中,我们经常使用Repeater来进行请求与响应的消息验证分析,比如修改请求参数,验证输入的漏洞、验证逻辑越权;从拦截历史记录中,捕获特征性的请求消息进行请求重放。

我们可以选择一个响应,右键把他加入到重放器里

之后我们就可以到对应的重放器模块去看这个请求了。

具体的功能挺简单的,我们可以不断的更改请求,然后不断重放来得到请求的响应

我们现在点击send

这样就得到了目前请求的响应。

我们可以在把请求改一下,再次发送

这样就能得到这个请求的响应。

重放器的功能就是这些,主要就是方便对一个请求进行多次测试,得到不同的响应。

Option

在左上角,send的旁边

  • Content-Length (更新):这个选项是用于控制Burp是否自动更新请求消息头中的Content-Length。
  • Unpack gzip / deflate (解压和压缩): 这个选项主要用于控制Burp是否自动解压或压缩服务器端响应的内容。
  • Follow redirections (跳转控制): 这个选项主要用于控制Burp是否自动跟随服务器端作请求跳转,比如服务端返回状态码为302,是否跟着应答跳转到302指向的url地址。它有4个选项.分别是
    • Never (永不跳转)
    • On-site only (站内跳转),站内跳转是指当前的同一站点内跳转
    • In-scope only (目标域内跳转),目标域跳转是指target scope中配置的域可以跳转。
    • Always(始终跳转)
  • Process cookies in redirections (跳转中处理Cookie): 这个选项如果选中,则在跳转过程中设置的Cookie信息,将会被带到跳转指向的URL页面,可以进行提交。

Decoder与Compare

Decoder

Decoder的功能比较简单,作为Burp Suite中一款编码解码工具,它能对原始数据进行各种编码格式和散列的转换。

说白了就是个数据加密解密,没啥好讲的,网上一堆。不用管这块。

Comparer

Burp Comparer在Burp Suite中主要提供一个可视化的差异比对功能,来对比分析两次数据之间的区别。使用中的场景可能是:

  • 枚举用户名过程中,对比分析登陆成功和失败时,服务器端反馈结果的区别。
  • 使用 Intruder 进行攻击时,对于不同的服务器端响应,可以很快的分析出两次响应的区别在哪里。
  • 进行SQL注入的盲注测试时,比较两次响应消息的差异,判断响应结果与注入条件的关联关系。

CATALOG
  1. 1. BurpSuite介绍
    1. 1.1. 基本介绍
    2. 1.2. 基本功能
    3. 1.3. 安装
  2. 2. 代理服务器 (Proxy)
    1. 2.1. 设置代理
      1. 2.1.1. BurpSuite设置代理
      2. 2.1.2. 浏览器代理设置
        1. 2.1.2.1. 回环地址代理
        2. 2.1.2.2. 特定地址代理
        3. 2.1.2.3. 任意网络接口 - 手机抓包
      3. 2.1.3. 系统代理
    2. 2.2. 网页抓包
      1. 2.2.1. 证书问题
      2. 2.2.2. Intercept拦截
    3. 2.3. 手机抓包
    4. 2.4. 其他
      1. 2.4.1. Action (右键操作)
      2. 2.4.2. 可选项配置Options
        1. 2.4.2.1. Intercept Client Requests (客户端请求拦截)
        2. 2.4.2.2. Intercept Server Responses (服务端响应拦截)
        3. 2.4.2.3. Intercept WebSockets Messages
        4. 2.4.2.4. Response Modification (响应修改)
        5. 2.4.2.5. Match and Replace
        6. 2.4.2.6. TLS Pass Through
        7. 2.4.2.7. Miscellaneous
      3. 2.4.3. 其他功能
    5. 2.5. HTTP History (HTTP历史记录)
  3. 3. Burp目标 (Target)
    1. 3.1. Site Map (站点地图)
      1. 3.1.1. 网站结构
      2. 3.1.2. Contents
      3. 3.1.3. Issues
    2. 3.2. Scope (作用域)
    3. 3.3. Target功能
      1. 3.3.1. Search
      2. 3.3.2. Find Comments
      3. 3.3.3. Find scripts
      4. 3.3.4. Find references
      5. 3.3.5. Analyze target
        1. 3.3.5.1. Summary 概述
        2. 3.3.5.2. Dynamic URLs
        3. 3.3.5.3. Static URLs
        4. 3.3.5.4. Parameters
      6. 3.3.6. Discovery Session Status
        1. 3.3.6.1. Control
        2. 3.3.6.2. Config
        3. 3.3.6.3. Site map
      7. 3.3.7. 主动被动扫描
  4. 4. 控制面板 (Dashboard)
    1. 4.1. 主动扫描
    2. 4.2. 扫描
  5. 5. 入侵 (Intruder)
    1. 5.1. Intruder模块介绍
    2. 5.2. Position
      1. 5.2.1. 有效载荷
      2. 5.2.2. 攻击类型
        1. 5.2.2.1. 狙击手模式 (Sniper)
        2. 5.2.2.2. 攻城锤模式 (Battering ram)
        3. 5.2.2.3. 交叉模式 (Pitchfork)
        4. 5.2.2.4. 集束炸弹模式 (Cluster bomb)
    3. 5.3. Payloads
      1. 5.3.1. 基本介绍
      2. 5.3.2. Payload类型
        1. 5.3.2.1. 简单列表 (Simple list)
        2. 5.3.2.2. 运行时文件 (Runtime file)
        3. 5.3.2.3. 自定义迭代器 (Custom iterator)
        4. 5.3.2.4. 字符串替换 (Character substitution)
        5. 5.3.2.5. 大小写替换 (Case modification)
        6. 5.3.2.6. 字符块 (Character blocks)
        7. 5.3.2.7. 数字类型 (Number)
        8. 5.3.2.8. 日期类型 (Dates)
        9. 5.3.2.9. 暴力字典 (Brute forcer)
        10. 5.3.2.10. 空类型 (Null payloads)
        11. 5.3.2.11. 字符扮演者 (Character frobber)
        12. 5.3.2.12. 用户名生成器 (Username generator)
    4. 5.4. Resource Pool
    5. 5.5. Option
      1. 5.5.1. Attack Results (攻击结果设置)
      2. 5.5.2. Grep Match
      3. 5.5.3. Redirections
    6. 5.6. 爆破结果
    7. 5.7. 靶场演练
      1. 5.7.1. 跑一个
      2. 5.7.2. 跑俩
  6. 6. 重放器 (Repeater)
    1. 6.1. 功能使用
    2. 6.2. Option
  7. 7. Decoder与Compare
    1. 7.1. Decoder
    2. 7.2. Comparer