Burp Suite初学者教程
b+urp suite是由PortSwigger公司用java开发,是Web应用程序测试的最佳工具之一,其多种功能可以帮我们执行各种任务.请求的拦截和修改,扫描web应用程序漏洞,以暴力破解登陆表单,执行会话令牌等多种的随机性检查。免费版(burp suite Free ) 和专业版 (burp suite Profrssional) 的差别就在于前者没有主动扫描的功能,其他差别不大。
BurpSuite主要特点:
- 代理–Burp Suite带有一个代理,通过默认端口8080上运行,使用这个代理,我们可以截获并修改从客户端到web应用程序的数据包.
- Spider(蜘蛛)–Burp Suite的蜘蛛功能是用来抓取Web应用程序的链接和内容等,它会自动提交登陆表单(通过用户自定义输入)的情况下.Burp Suite的蜘蛛可以爬行扫描出网站上所有的链接,通过对这些链接的详细扫描来发现Web应用程序的漏洞 。
- Scanner(扫描器)–它是用来扫描Web应用程序漏洞的.在测试的过程中可能会出现一些误报。重要的是要记住,自动扫描器扫描的结果不可能完全100%准确.
- Intruder(入侵)–此功能呢可用语多种用途,如利用漏洞,Web应用程序模糊测试,进行暴力猜解等.
- Repeater(中继器)–此功能用于根据不同的情况修改和发送相同的请求次数并分析.
- Sequencer–此功能主要用来检查Web应用程序提供的会话令牌的随机性.并执行各种测试.
- Decoder(解码)–此功能可用于解码数据找回原来的数据形式,或者进行编码和加密数据.
- Comparer–此功能用来执行任意的两个请求,响应或任何其它形式的数据之间的比较.
BurpSuite安装
Burp Suite是一个无需安装软件,下载完成后,直接从命令行启用即可。但Burp Suite是用
Java语言开发的,运行时依赖于JRE,需要提前Java可运行环境。
配置jvm内存大小:如果java可运行环境配置正确的话,正确运行时,会自动分配最大的可用内存。但在渗透测试过程中,如果有成千上万个请求通过Burp Suite,这时就可能会导致Burp Suite因内存不足而崩溃,从而会丢失渗透测试过程中的相关数据,这是我们不希望看到的。因此,我们可以在启动时,指定它使用的内存大小
java -jar-Xmx2048M /your_burpsuite_path/burpsuite.jar
Burp Suite是不支持IPv6地址进行数据通信的
java -jar-Xmx2048M -Djava.net.preferIPv4Stack=true /your_burpsuite_path/burpsuite.jar
通过-Djava.net.preferIPv4Stack=true
参数的设置,告诉Java运行环境,使用IPv4协议栈进行数据通信,IPv6协议将会被禁止使用。这个错误最常见于64位的windows操作系统上,使用了32位的JDK。
FireFox设置
打开FireFox->按alt显示导航栏->点击工具->点击选项->在新打开的about:preferences中选高级->网络,此时我们将看到FireFox连接网络的设置选项。
此后点击设置,在弹出的连接设置对话框中,找到“http代理”,填写127.0.0.1,端口填写8080,最后点击确认保存参数设置,完成FireFox的代理配置。
BurpSuite重要配置
配置代理
SSL算法
证书
BurpSuite-Proxy功能
- forward:传输本次数据
- drop:丢弃本次数据
- Intercepton/off:拦截开启/关闭
- Action:提供功能选项
当Burp Suite拦截的客户端和服务器交互之后,可以在Burp Suite的消息分析选项卡中查看这次请求的实体内容、消息头、请求参数等信息。
Raw:视图主要显示web请求的raw格式,包含请求地址、http协议版本、主机头、浏览器信息、Accept可接受的内容类型、字符集、编码方式、cookie等。我们可以通过手工修改这些信息,对服务器端进行渗透测试。
params :视图主要显示客户端请求的参数信息、包括GET或者POST请求的参数、Cookie参数。渗透人员可以通过修改这些请求参数来完成对服务器端的渗透测试。
headers:视图显示的信息和Raw的信息类似,只不过在这个视图中,展示得更直观、友好。
Hex :视图显示Raw的二进制内容,你可以通过hex编辑器对请求的内容进行修改。
Burpproxy所拦截的消息可在Fitter(过滤器)中根据需要进行修改
所有流经burpproxy的消息都会在 http history中记录下来,我们可以通过历史选项卡,查看传输的数据内容,对交互的数据进行测试和验证,同时,我们可以通过右击来弹出菜单,发送内容到burp的其他组件进行处理(类似于Action的功能)
comment:对拦截的消息添加备注,在一次渗透测试中,你通常会遇到一连串的请求消息,为了便于区分,在某个关键的请求消息上,你可以添加备注信息。
Highlight的功能与Comment功能有点类似,即对当前拦截的消息设置高亮,以便于其他的请求消息相区分。
可选项配置Options
从界面上看,主要有以下几大板块
- 客户端请求消息拦截(Interceptclient requests)
- 服务器端返回消息拦截(intercept server responses)
- 服务器返回消息修改(response modification)
- 正则表达式配置(match and replace)
- 其他配置项(miscellaneous)
BurpSuite-target功能
Burptarget组件主要包含站点地图、目标域、target工具三部分组成
帮助渗透测试人员更好地了解目标应用的整体状况、当前的工作涉及哪些目标域、分析可能存在的攻击面等信息
目标域设置 Target Scope
应用场景
- 限制站点地图和Proxy历史中的显示结果
- 告诉Burp Proxy拦截哪些请求
- Burp Spider抓取哪些内容
- BurpScanner自动扫描哪些作用域的安全漏洞
- 在Burp Intruder和Burp Repeater中指定URL
站点地图 Site Map
在一次渗透测试中,通过浏览器浏览的历史记录在站点地图中的展现结果将自动在site map中呈现。
Site Map的左边为访问的URL,按照网站的层级和深度,树形展示整个应用系统的结构和关联其他域的url情况;右边显示的是某一个url被访问的明细列表,共访问哪些url,请求和应答内容分别是什么,都有着详实的记录。基于左边的树形结构,我们可以选择某个分支,对指定的路径进行扫描和抓取。
Target 工具的使用
主要包括以下部分:1.手工获取站点地图2.站点比较3.攻击面分析
手工获取站点地图:
- 设置浏览器代理和burp proxy代理,并使之能正常工作
- 关闭拦截功能
- 手工浏览网页
这时,target会自动记录站点地图信息。
手工获取站点地图的方式有一个好处就是,我们可以根据自己的需要和分析,自主地控制访问内容,记录的信息比较准确。与自动抓取相比,则需要更长的时间,如果需要渗透测试的产品系统是大型的系统,则对于系统的功能点依次操作一遍所需要的精力和时间对渗透测试人员来说付出都是很大的。
站点比较
对站点进行动态分析的利器,我们在比较帐号权限时经常使用到它。
当我们登陆应用系统,使用不同的帐号,帐号本身在应用系统中被赋予了不同的权限,那么帐号所能访问的功能模块、内容、参数等都是不尽相同的,此时使用站点比较,能很好的帮助渗透测试人员区分出来。
一般来说,主要有以下3种场景:
- 同一个帐号,具有不同的权限,比较两次请求结果的差异。
- 两个不同的帐号,具有不同的权限,比较两次请求结果的差异。
- 两个不同的帐号,具有相同的权限,比较两次请求结果的差异。
步骤:
- 首先我们在需要进行比较的站点上点击右键,找到站点比较的菜单“Comparesite maps”
- 由于站点比较是在两个站点地图之间进行的,所以我们在配置过程中需要分别指定Site Map1和Site Map2。通常情况下,Site Map 1 我们默认为当前会话。如图所示,点击【Next】。
- 这时我们会进入Site Map 1设置页面,如果是全站点比较我们选择第一项,如果仅仅比较我们选中的功能,则选择第二项。如下图,点击【Next】。如果全站点比较,且不想加载其他域时,我们可以勾选只选择当前域。
- 接下来就是Site Map 2的配置,对于Site Map 2我们同样有两种方式,第一种是之前我们已经保存下来的Burp Suite站点记录,第二种是重新发生一次请求作为Site Map2.这里,我们选择第二种方式。
- 如果上一步选择了第二种方式,则进入请求消息设置界面。在这个界面,我们需要指定通信的并发线程数、失败重试次数、暂停的间隙时间。
- 设置完Site Map 1和Site Map 2之后,将进入请求消息匹配设置。在这个界面,我们可以通过URL文件路径、Http请求方式、请求参数、请求头、请求Body来对匹配条件进行过滤。
- 设置请求匹配条件,接着进入应答比较设置界面。在这个界面上,我们可以设置哪些内容我们指定需要进行比较的
- 如果我们之前是针对全站进行比较,且是选择重新发生一次作为Site Map2的方式,则界面加载过程中会不停提示你数据加载的进度,如果涉及功能请求的链接较少,则很快进入比较界面。
攻击面分析
步骤:
- 右键找到【Engagementtools】(交互工具),点击Analyze Target使用
- 在弹出的分析界面中,我们能看到概况、动态URL、静态URL、参数4个视图。
- 概况视图主要展示当前站点动态URL数量、静态URL数量、参数的总数、唯一的参数名数目,通过这些信息,我们对当前站点的总体状况有粗线条的了解。 4.动态URL视图展示所有动态的URL请求和应答消息,跟其他的工具类似,当你选中某一条消息时,下方会显示此消息的详细信息。
- 参数视图有上中下三部分组成,上部为参数和参数计数统计区,你可以通过参数使用的次数进行排序,对使用频繁的参数进行分析;中部为参数对于的使用情况列表,记录对于的参数每一次的使用记录;下部为某一次使用过程中,请求消息和应答消息的详细信息。
在使用攻击面分析功能时,需要注意,此功能主要是针对站点地图中的请求URL进行分析,如果某些URL没有记录,则不会被分析到。同时,在实际使用中,存在很点站点使用伪静态,如果请求的URL中不带有参数,则分析时无法区别,只能当做静态URL来分析。
BurpSuite-Spider功能
Burp Spider的功能主要使用于大型的应用系统测试,它能在很短的时间内帮助我们快速地了解系统的结构和分布情况。
spider控制
Spider控制界面由Spider状态和Spider 作用域两个功能组成。
Spider 状态除了显示当前进度、传输情况、请求队列等统计信息外,还有Spider运行/暂停按钮与清空队列按钮,分别用来控制Spider是否运行和队列中的数据管理。而Spider作用域是用来控制Spider的抓取范围,从图中我们可以看到有两种控制方式,一种是使用上一节讲的Target Scope,另一种是用户自定义。
此处用户自定义作用域的配置与Target Scope的配置完全一致,具体使用方法请参数上一节Target Scope的配置。
Spider可选项设置
Spider可选项设置由抓取设置、抓取代理设置、表单提交设置、应用登陆设置、蜘蛛引擎设置、请求消息头设置六个部分组成。
BurpSuite-Scanner功能
BurpScanner的功能主要是用来自动检测web系统的各种漏洞,我们可以使用BurpScanner代替我们手工去对系统进行普通漏洞类型的渗透测试,从而能使得我们把更多的精力放在那些必须要人工去验证的漏洞上。
Scannr的扫描方式分为两种,主动扫描和被动扫描。
主动扫描(ActiveScanning)
当使用主动扫描模式时,Burp 会向应用发送新的请求并通过payload验证漏洞。这种模式下的操作,会产生大量的请求和应答数据,直接影响系统的性能,通常使用在非生产环境。它对下列的两类漏洞有很好的扫描效果:
- 客户端的漏洞,像XSS、Http头注入、操作重定向;
- 服务端的漏洞,像SQL注入、命令行注入、文件遍历。
对于第一类漏洞,Burp在检测时,会提交一下input域,然后根据应答的数据进行解析。在检测过程中,Burp会对基础的请求信息进行修改,即根据漏洞的特征对参数进行修改,模拟人的行为,以达到检测漏洞的目的。 对于第二类漏洞,一般来说检测比较困难,因为是发生在服务器侧。比如说SQL注入,有可能是返回数据库错误提示信息,也有可能是什么也不反馈。Burp在检测过程中,采用各个技术来验证漏洞是否存在,比如诱导时间延迟、强制修改Boolean值,与模糊测试的结果进行比较,已达到高准确性的漏洞扫描报告。
被动扫描(PassiveScanning)
当使用被动扫描模式时,Burp不会重新发送新的请求,它只是对已经存在的请求和应答进行分析,这对系统的检测比较安全,尤其在你授权访问的许可下进行的,通常适用于生成环境的检测。一般来说,下列这些漏洞在被动模式中容易被检测出来:
- 提交的密码为未加密的明文。
- 不安全的Cookie的属性,比如缺少的HttpOnly和安全标志。
- cookie的范围缺失。
- 跨域脚本包含和站点引用泄漏。
- 表单值自动填充,尤其是密码。
- SSL保护的内容缓存。
- 目录列表。
- 提交密码后应答延迟。
- session令牌的不安全传输。
- 敏感信息泄露,像内部IP地址,电子邮件地址,堆栈跟踪等信息泄漏。
- 不安全的ViewState的配置。
- 错误或者不规范的Content-type指令。
虽然被动扫描模式相比于主动模式有很多的不足,但同时也具有主动模式不具备的优点,除了前文说的对系统的检测在我们授权的范围内比较安全外,当某种业务场景的测试,每测试一次都会导致业务的某方面问题时,我们也可以使用被动扫描模式,去验证问题是否存在,减少测试的风险。
BurpSuite-Intruder功能
工作原理:
Intruder在原始请求数据的基础上,通过修改各种请求参数,以获取不同的请求应答。每一次请求中,Intruder通常会携带一个或多个有效攻击载荷(Payload),在不同的位置进行攻击重放,通过应答数据的比对分析来获得需要的特征数据。
应用场景:
- 标识符枚举 Web应用程序经常使用标识符来引用用户、账户、资产等数据信息。例如,用户名,文件ID和账户号码。
- 提取有用的数据在某些场景下,而不是简单地识别有效标识符,你需要通过简单标识符提取一些其他的数据。比如说,你想通过用户的个人空间id,获取所有用户在个人空间标准的昵称和年龄。
- 模糊测试很多输入型的漏洞,如SQL注入,跨站点脚本和文件路径遍历可以通过请求参数提交各种测试字符串,并分析错误消息和其他异常情况,来对应用程序进行检测。由于的应用程序的大小和复杂性,手动执行这个测试是一个耗时且繁琐的过程。这样的场景,您可以设置Payload,通过Burp Intruder自动化地对Web应用程序进行模糊测试。
测试步骤:
- 确认Burp Suite安装正确并正常启动,且完成了浏览器的代理设置。
- 进入Burp Proxy选项卡,关闭代理拦截功能。
- 进行历史日志(History)子选项卡,查找可能存在问题的请求日志,并通过右击菜单,发送到Intruder。
- 进行Intruder选项卡,打开Target和Positions子选项卡。这时,你会看到上一步发送过来的请求消息。
- 因为我们了解到Burp Intruder攻击的基础是围绕刚刚发送过来的原始请求信息,在原始信息指定的位置上设置一定数量的攻击载荷Payload,通过Payload来发送请求获取应答消息。在默认情况下,所有的请求参数和cookie参数都会被设置为添加载荷
- 点击clear清除默认载荷(如果需要),圈定需要设置载荷的参数,点击add
- 当我们打开Payload子选项卡,选择Payload的生成或者选择策略,默认情况下选择“Simplelist",当然你也可以通过下拉选择其他Payload类型或者手工添加。
- 之后点击startattack发动攻击,此时burp 会自动打开一个新的界面,包含执行攻击的情况,http状态码、长度等信息的结果。我们还可以选择其中某一次通信消息,查看请求消息和应答消息的详细
在很多时候,为了更好的标明应答消息中是否包含有我们需要的信息,通常在进行攻击前,会进行Options选项的相关配置,使用最多的为正则表达式匹配(Grep - Match)。
或者我们选择结果选项卡中的过滤器,对结果进行过滤筛选。同时,结果选项卡中所展示的列我们是可以进行指定的,我们可以在菜单columns进行设置。
最后选择我们需要的列,点击save按钮,对攻击结果进行保存。(也可以对保存对的内容进行设置)
BurpSuite-Repeater功能
Repeater是一个重放攻击器。
我们可以在这里对数据包的参数进行修改,以此来进行请求与响应的消息验证分析。
BurpSuite-Sequencer功能
用于检测数据样本随机性质量的工具,通常用于检测访问令牌是否可预测、密码重置令牌是否可预测等场景,通过Sequencer的数据样本分析,能很好地降低这些关键数据被伪造的风险。
使用步骤:
确认burpsuite的正确运行,打开拦截
- 从burpproxy的历史日志中,寻找token或类似的参数(cookies等)点击右键弹出上下文菜单,点击 send to sequencer
- 进入burpsequencer的live cature面板,选中刚才发送过来的记录,点击 configure 配置需要分析的token 或参数
- 在弹出的参数配置对话框中,选中参数的值,点击 ok,完成参数设置
- 点击select live capture,开始进行参数值的获取
- 当抓取的参数值总数大于100时,点击【pause】或者【stop】,这时可以进行数据分析,点击【Analyze now】即进行数据的随机性分析。
- 等分析结束,可以看到分析结果的各种图表
- 我们也可以把获取的数据保存起来(点击savetokens保存数据),下一次使用的时候,从文件夹加载参数,进行数据分析。
- 再次使用时,直接在manual load处,点击load… 加载数据即可
可选项设置
分析可选项设置的目的主要是为了控制token或者参数,在进行数据分析过程中,需要做什么样的处理,以及做什么类型的随机性分析。它主要由令牌处理(TokenHandling)和令牌分析(Token Analysis)两部分构成。
TokenHandling 令牌处理
主要控制令牌在数据分析中,如何被处理
Pad shorttokens at start / end 表示如果应用程序产生的令牌是具有可变长度的,那么这些令牌在数据分析前都需要被填充,以便于进行的统计检验。你可以选择是否填充在开始位置或每个令牌的结束位置。在大多数情况下,在开始位置填充是最合适。
Padwith 表示你可以指定将用于填充的字符。在大多数情况下,数字或ASCII十六进制编码的令牌,用“0”填充是最合适的。
Base64-decode before analyzing表示在数据分析是否进行base64解码,如果令牌使用了base64编码的话,则需要勾选此项。
TokenAnalysis 令牌分析
主要用来控制对数据进行随机性分析的类型,我们可以选择多个分析类型,也可以单独启用或禁用每个字符类型级和字节级测试。有时候,执行与启用所有分析类型进行初步分析后,再禁用某些分析类型,以便更好地了解令牌的特点,或隔离由样品表现任何不寻常的特性。
Count:分析在令牌内每个位置使用的字符的分布,如果是随机生成的样本,所用字符的分布很可能是大致均匀的。
Transitions:分析样品数据中的连续符号之间的变化。如果是随机生成的样品,出现在一个给定的位置上的字符是同样可能通过在该位置使用的字符中的任一项中的下一个标志的改变。
下面的几项设置是用于控制数据分析的字节级测试。启用字节级分析中,每个令牌被转换成一组字节,与设置在每个字符位置的字符的大小决定对的比特的总数
FIPS monobittest
测试分析0和1在每个比特位置的分配,如果是随机生成的样本,1和0的数量很可能是大致相等。FIPS测试正式规范假定样本总数为20000个,如果你希望获得的结果与该FIPS规范一样严格,你应该…
FIPS pokertest
该测试将比特序列划分为四个连续的、非重叠的分组,然后导出4个数,计算每个数字出现16个可能数字的次数,并采用卡方校验来评估数字的分布。如果样品是随机生成的,这个数字的分布可能是近似均匀的。
FIPS runstests
测试将具有相同值的连续的比特序列在每一个位置进行划分成段,然后计算每一个段的长度为1,2,3,4,5,和6以及6以上。如果样品是随机生成的,那么这些段的长度很可能是由样本集的大小所确定的范围之内。
FIPS longruns test
这个测试将有相同值的连续的比特序列在每一个位置进行划分成段,统计最长的段。如果样品是随机生成的,最长的段的数量很可能是由样本集的大小所确定的范围之内。
Correlationtest
比较每个位置具有相同值的令牌样本与每一个位置具有不同值的短令牌样本之间的熵,以测试在令牌内部的不同的比特位置中的值之间的任何统计学显著关系。如果样品是随机生成的,在给定的比特位置处的值是同样可能伴随着一个或一个零在任何其它位的位置。
BurpSuite-Decoder功能
Burp Decoder的功能比较简单,作为Burp Suite中一款编码解码工具,它能对原始数据进行各种编码格式和散列的转换。其界面如下图,主要由输入域、输出域、编码解码选项三大部分组成。
- 输入域即输入需要解码的原始数据,此处可以直接填写或粘贴,也可以通过其他Burp工具的上下文菜单中【Send to Decoder】
- 输出域即对输入域进行解码的结果显示出来。
无论是输入域还是输出域都支持文本与Hex两种格式,其中编码解码选项中,由解码选项(Decode as)、编码选项(Encode as)、散列(Hash)三个构成。实际使用中,可以根据场景的需要进行设置。
对于编码解码选项,目前支持URL、HTML、Base64、ASCII、16进制、8进制、2进制、GZIP共八种形式的格式转换,Hash散列支持SHA、SHA-224、SHA-256、SHA-384、SHA-512、MD2、MD5格式的转换,更重要的是,对于同一个数据,我们可以在Decoder的界面,进行多次编码解码的转换。
BurpSuite-Comparer功能
Burp Comparer在Burp Suite中主要提供一个可视化的差异比对功能,来对比分析两次数据之间的区别。
使用中的场景可能是:
- 枚举用户名过程中,对比分析登陆成功和失败时,服务器端反馈结果的区别。
- 使用 Intruder 进行攻击时,对于不同的服务器端响应,可以很快的分析出两次响应的区别在哪里。
- 进行SQL注入的盲注测试时,比较两次响应消息的差异,判断响应结果与注入条件的关联关系。
参考文献
- Burp Suite官网
- Burp Suite 实战指南
- BurpSuite gitbook教程
- Burp suiteV1.7.27版本的远程代码执行漏洞