BurpSuite在非Web应用测试中的应用

路人甲 · 2016/04/18 10:18html

0x00 前言


Burp不只仅能在Web应用的测试中使用。我也在移动端和传统客户端测试时常用。对于采用HTTP方法发送数据的应用,Burp是你的最佳选择。java

我要写下一系列在我工做中给我帮助的那些Burp的提示和技巧。写出来为了与你们分享,也为了留着备忘。git

在撰写此文时Burp Pro的最新版本是1.6.39,大多数状况下应用的Burp Free的最新版本是1.6.32。我最初使用的是Burp 1.5,自此版本以后Burp并无太大改变。github

当我最初准备写时,我没有想到Burp有这么多可写的。因此我把它拆分红多个部分。请注意,这篇文章不是在写Web应用测试,因此我会跳过一些功能不作介绍。若是你有任何好用的提示或用例,一如既往的,咱们欢迎反馈。web

0x01 拦截


Burp支持请求/响应包的拦截和修改。你能够在Proxy > Options 中配置这些设置。正则表达式

1.1 拦截响应

有时候为了手动修改你不得不拦截响应数据包。设置在Proxy > Options > Intercept responses based。将第一条规则的复选框取消,不然二进制payload有可能不被拦截。windows

拦截请求

1.2 拦截请求/响应规则

Burp支持为拦截请求/响应数据包制定规则。当有多重流量通过Burp时,你只想将某些特定节点的流量拦截下来时,这将很是有用。在Proxy > Options 中能够看到规则Intercept Client / Server Requests。这个预约义的规则只能拦截域内的请求。你也能够添加你本身的规则,规则支持正则表达式来匹配内容和包头。浏览器

拦截规则

1.3 匹配和替换

你能够在Proxy > Options > Match and Replace 中找到匹配与替换。这意味着你能够在请求/响应数据包中按照你的要求进行替换。我一般用用来替换User-Agent。另外一种方法不须要打补丁就能绕过客户端控件在响应数据包中自动进行更改。例如,若是服务器响应登陆是否成功,我定义了一条规则来将登陆失败响应修改成成功响应,来绕过登陆(这只有在服务器不关心你的登陆是否成功时起做用)。缓存

匹配和替换规则

1.4 SSL流量

这是一个Burp被低估的功能,在Proxy > Options > SSL Pass Through中能够找到。安全

Burp这个功能的实现,不是像中间人攻击同样,而只是像一个非终端的TLS代理。

若是你想开启代理,可是代理却没有工做。你能够把这个节点加入 SSL Pass Through中,看这个问题是否与Burp有关。

传统客户端会在不一样的节点混合使用HTTP和非HTTP协议的流量是很常见的。Burp能够在非HTTP链接中架起中间人,能够静默的丢包或者改包。这将会致使应用程序出现故障。首先应该识别终端节点,而且把它们添加进SSL Pass Through 中。能够看一个实践案例

你可使用这些功能使Burp变成一个快速简单的端口转换器。假设你想要链接一个客户端,这个客户端经过1234端口发送给远端服务器所监听的5678端口。若是你不但愿本身写代码实现,又不但愿使用其余工具来重定向端口。把Burp放在1234端口上开代理,使用hosts文件或其余操做系统特有的文件来重定向这个终端节点到本地。在Burp中你能够经过设置Request Handling 来让代理重定向所有流量到某个终端节点的不一样端口。将这个终端节点添加进SSL Pass Through 中。

1.5 响应修改选项

这些中的大多数可能只是对于Web应用有效。

Convert HTTPS links to HTTP 和 Remove secure flag from cookies 和Force use of SSL都是Request Handling中的好工具。若是在应用或者浏览器和Burp之间禁用TLS,设置为Secure的Cookie将不会再传输,app也会中止工做。当使用Cookie设置响应头时,Burp能够移除Secure标识。

响应修改

1.6 在启动时禁用拦截和混淆

我运行了Burp而后设置好了代理,运行应用却没有反应。而后我意识到启动Burp时默认已经开启了拦截。

Proxy > Options > Scroll all the way to the bottom > Under Miscellaneous > Enable interception at startup > Always disable.

拦截启动设置

0x02 代理监听


Burp监听以前流量通过的那个端口。默认为127.0.0.1:8080,你也能够自行设置。你可让新的代理监听其余网口或者所有网口。惟一的限制是另外一个程序就不能使用被选定的网口的这个端口了。

代理监听能够在Proxy > Option > Proxy Listeners设置。

代理监听

2.1 绑定

添加一个新的监听很容易,只须要点击Add便可。本地环回是127.0.0.1或localhost。若是你想让Burp监听另外一个网口,就能够在这里进行选择。若是想代理移动设备这就很是有用了。在这种状况下,我会建立一个监听为0.0.0.0或者选择All interfaces,这些和移动设备共享的网口(例如Windows hostednetwork)

代理绑定

咱们能够在Import/export CA certificate 或Regenerate CA certificate来导入/导出一个新的呃Burp的根证书。更多信息请参考。若是你从新生成根证书,你必须在操做系统或浏览器的证书存储区使用新证书替代旧证书。

2.2 请求处理

这个功能对于非Web应用很是有用。假设传统客户端使用hosts文件链接www.google.com:8000,并且我开启了代理。在这个文件中,www.google.com被重定向到127.0.0.1,我又建立了一个Burp监听在8000端口。如今我须要将所有流量重定向到原始状态(www.google.com:8000)。一种方法是在Redirect to host 和 Redirect to port中分别指定为www.google.com 和 8000。

重定向流量

若是应用在同一端口链接不一样的节点(例如,咱们想代理流量经过80端口或者443端口),咱们就不能重定向流量了吗?咱们须要在Options > Connections > Hostname Resolution中设置,在下一个部分我将会解释。

若是我使用Burp将流量导入另外一个代理工具,好比Fiddler或Charles,这也是有用的。

当我想要在Burp和应用之间把TLS剥离出来,或者我想把它加进去的时候Force use of SSL这个选项就有用了。有一个我时常参考的文档实例

2.2.1 Burp的透明代理

更多信息请看上面连接中的2.2.1和2.2.2部分。老实说,跟着这整个系列来看Burp怎么做为代理来工做,你将会避免出现许多问题。

若是咱们代理了一个代理敏感的客户端,它将会在实际启用TLS传输前发送链接请求给想要链接的目标。这会通知代理该往哪重定向流量。这是由于代理没法看到TLS层加密的TCP流量包。因为不知道怎么处理流量,CONNECT解决了这个问题。代理敏感的客户端会把代理视为浏览器。

非代理敏感的客户端就不在乎他们的流量是否通过了代理。大多数这种程序都不使用代理设置或系统代理设置。程序依旧认为它在节点间直接发送流量,并无被重定向到Burp。Burp能够将TLS层的数据代理并解密数据包,在包中经过头中的host字段找到原始节点。这就是Burp的透明代理。

能够在Proxy > Options开启。选择代理监听,点击编辑,在Request Handling 中选择Support invisible proxying (enable only if needed)。

透明代理

我常常用它来捕获应用和Burp之间的本地流量,判断应用是否发送链接请求。另外一种方法是都尝试一下,看哪一个好使。

2.3 证书

咱们能够配置Burp的中间人证书。

  • Use a self-signed certificate意味着Burp只能使用单一证书
  • Geneate CA-signed per-host certificates是最经常使用的,Burp将会针对不一样的host生成不一样的证书。证书的CN和域名相同。
  • Generate a CA-signed certificate with a specific hostname这里咱们能够指定证书的CN。当一个应用经过检查CN来锁定时就有用了,可是这与终端节点经常使用的通配符不太同样。
  • Use a custom certificate (PKCS#12) 若是咱们有肯定的证书须要使用,咱们能够在这里修改。当证书检查机制并不仅是检查CN,咱们就须要手动输入证书。

0x03 额外提示:请在提供充足的内存运行Brup


我历来没有在内存不够的电脑上运行Brup。可是我一般会在一天结束的时候保存工做状态,我不会大量使用Python/Ruby的扩展,而是YMMV。 经过命令行来给Burp分配2GB的内存:

java -jar -Xmx2048m /burp_directory/burpsuite_whatever.jar

0x04 Scope


理想状况下,你想添加应用程序的终端节点到Scope,这会帮你过滤掉其余无用的噪声。

把终端节点添加到Scope中很容易,右键单击一个请求,而后选择Add to scope便可。而后你就能够在Target > Scope中看到你刚刚添加的请求。

只有你指定的那个URL才能进入Scope中,这很方便。例如,我选择使用GET请求获得Google的图标,而且添加其到Scope中。Google.com剩下的数据包将不会包含在Scope中,你必须手动添加。

添加Google Logo

另外一种方法是复制URL粘贴过来。若是咱们右键点击任何位置的任何请求,咱们都能经过点击右键菜单中的Copy URL来复制这个请求的URL地址。咱们能够在Scope中点击Paste URL来把这个请求置入Scope。这个按钮在其余位置出现也具备相似的功能。

粘贴URL

咱们一般不止是须要一个请求。一般是整个节点,或者肯定的整个目录。幸运的是,在指定Scope时,咱们可使用正则表达式。我一般使用上述方法之一将URL添加进Scope中,而后经过编辑按钮来对其修改。

Scope中有四个选项:

  • Protocol:能够选择Any、HTTP或HTTPS,我一般选择Any
  • Host of IP range::支持正则表达式,例如*.google.com
  • Port:除非你为了寻找特定端口的流量,不然置为空便可。空意味着不会过滤掉任何端口的数据。这个选项也支持正则表达式。
  • File:这个选项也支持正则表达式。

若是咱们想要添加Google和它的全部子域到Scope中,咱们要添加这个Logo(或者任何Google的东西)到Scope中,而后编辑这个请求。

添加Google.com的子域名

0x05 HTTP历史


在Proxy > HTTP History中能够看到Burp全部捕获的请求和响应。我几乎一半的时间都花在了这儿。咱们可使用过滤器来筛选数据包,过滤器的设置能够在Filter: Showing all items调整,你能够根据你不一样的需求来调整你的设置。我通常都是清空这些状态从新开始。

过滤设置

最有效的过滤是Show Only in-scope items,这将会把不在Scope里的数据包都清除掉。

过滤

正如你在上图中看到的,过滤器具备不少设置选项。大部分的设置都很是简单易用,我要讲解的是那些我在非Web应用中经常使用的设置。

  • Filter by MIME type会一直保持全部的活动状态直到你确认本身没有丢失任何请求。MIME-type并不总能正确的反映请求。Other binary被用来查看大多数二进制或独特的payload(默认是不活跃的)。
  • 在Filter by file extension中,我只使用Hide功能,一般会为那些我不喜欢的东西添加一些额外的扩展(好比字体)
  • 当该应用程序在不一样的端口进行通讯,而且不支持代理设置时,Filter by listener就很是有用了。在这种状况下,咱们必须重定向节点到localhost(例如使用host文件),还要为每一个端口建立不一样的代理监听。使用这个功能后咱们能够查看特定监听器上的流量。

0x06 扫描(只在Pro版本中可用)


Burp有一个特别好的扫描模块,它虽然不像IBM的Appscan那样优秀的覆盖面和准确度,可是它的优点体如今非Web应用测试。

  • Burp设置更为简单快捷,我能够登陆、扫描单个请求。而在Appscan中,我必须马上对整个应用程序进行测试(配置扫描、记录登陆、手动探索、自动探索、彻底扫描等)。并且Appscan还不能配置一些特殊的登陆设置,好比随机令牌。
  • Burp便宜的多,一年受权300美圆,而Appscan一年受权须要20000美圆。

扫描结果在Issue activity选项卡中显示,在Target > Site map纵览全局结果则更为直观,扫描请求都在Scan queue中。

6.1 实时扫描

Burp有两种扫描模式,主动扫描和被动扫描。两种扫描状态能够同时开启。 在被动扫描中,只关心请求和响应的数据包,仅仅经过规则进行匹配扫描,不发送任何请求。在主动扫描中,能够产生有效的测试载荷发送到服务器,同时分析其请求和响应。

在此能够对其进行配置:

  • 永远不用让Live Active Scanning保持On的状态。永远不要这样作,你有可能会对应用形成破坏,或者应用被锁定。始终扫描每一个单独的请求。
  • 设置Live Passive Scanning为Scan everything能够加强扫描效果,可是会在结果中引入噪声。若是你设置了Scope,你能够将扫描范围限定在suite scope中。你还能够选择Use custom scope来本身根据须要进行定制Scope。

实时扫描设置

6.2 设置选项

在这里你能够配置这些扫描设置。尽管我不使用实时主动扫描,这些选项也能够用来配置对单个请求的扫描。

  • Attack Insertion Points:你能够本身选择注入点,根据你的须要添加或移除。减小注入点就等于提升扫描速度。
  • Active Scanning Engine:对某些服务器要调节扫描的最大流量,当你每分钟发出超过设置值的请求时,服务器有可能会将你的IP封掉。
  • Active Scanning Areas:正如你所看到的,这些设置是面向Web应用的。我取消了全部设置,只添加那些我认为相关的设置。这样在扫描期间能够节约不少时间。
  • Passive Scanning Areas:你能够取消一切设置,只添加那些减小噪声的设置,可是说实话,连我都懒得去改动这些设置。
  • Static Code Analysis:开启对JavaScript代码的静态分析,对于非Web应用测试,你大可将其关闭。

0x07 入侵(Free版本有速度限制)


入侵模块是Burp的半自动扫描部分。能够右键单击任何一个请求发送到入侵模块,在入侵模块中你能够指定注入点,以后可使用内部扫描器来进行扫描,或者使用你本身的载荷。

7.1 位置

发送载荷到入侵模块后,在Intruder > Positions标签页中看获得注入点。我一般先Clear掉全部设置,而后使用Add来对本身设置的注入点进行标记。

入侵模块

正如你所见,我选择以前用过的Google的Logo再次发送到入侵模块。而后清除掉全部的预约义的注入点和已经添加的文件名。如今咱们能够右键点击并选择Actively scan defined insertion points来将其发送到扫描模块,不只扫描注入点还可使用Start Attack来用我本身设计的载荷进行注入。由于我没有选择任何载荷,第二项是不会起效果的。

7.2 Payloads

如今咱们能够设置咱们本身的载荷来配置入侵模块进行攻击。切换到Payloads选项卡。

7.2.1 载荷设置与选项

在这,咱们可使用不一样的载荷。Burp能够知足你在特殊状况下进行一些复杂的负载设置。例如,Recursive grep可让你在先前载荷的响应中获得每一个载荷。还有Case modification、Character substitution、Dates和Numbers等等。

Simple list容许你对全部的注入点都使用本身的载荷。在有载荷的源文件中复制到Payload Options中。你能够直接选择使用这个文件。

Runtime File经过点击Load按钮来加载一个文件。你也可使用Burp自带的负载列表,但彷佛只有Pro版本才有。

内置简单列表

Custom iterator(自定义迭代器)可让Burp生成更加复杂的载荷。若是我想要模拟两个本身的十六进制(四个字符),我能够在一个位置上设置0-9和a-f在其余位置上也相似的设置。Burp容许你设置八个位置。若是你想添加用户名,能够选择五个位置,添加本身的用户名列表。Burp也支持位置间使用分隔符。

自定义迭代器

一个流行的载荷列表是FuzzDB。须要注意的是,这些载荷基本都会触发反病毒软件的报警。

7.2.2 载荷处理

在进行测试以前,你能够对载荷进行转换处理。例如,你能够将载荷进行base64编码再发送,或者发送其hash。

载荷处理

7.3 设置

咱们能够在Request Engine限制入侵模块的速度,就像扫描模块那样,或者减慢其速度。Payload Encoding能够在Burp中对特殊字符进行URL编码。

7.3.1 正则匹配

咱们能够查找带有特定字符串的响应。若是我在进行SQL注入测试,我就能够寻找带有SQL错误信息的那些响应。对于XSS,我一般使用9999进行测试,以后只要在响应中匹配9999便可。

FuzzDB有本身的正则表达式来分析响应,这个页面展现了如何使用它们。

0x08 重放、解码、比对


虽然这些模块没有不少功能,可是也至关有用。

8.1 重放

重放模块是为了手动测试而设计的,扫描模块是自动化,入侵模块是半自动化。

将请求发送到重放模块和以前相似。咱们能够修改请求,发送请求而后观察响应。

我选择Google的Logo的GET请求,发送到重放模块而后发送它。咱们能够对其进行修改,而后查看其404响应和一些无效文件。用Ctrl+Z能够撤销此次更改。

重放模块

你能够将修改过的数据包发送到扫描模块或者入侵模块进行进一步扫描。

8.2 解码

容许使用不一样的格式进行编码或解码。也支持建立其哈希。双击任何一个参数右键发送至解码模块。你也可使用Ctrl+C复制其到解码模块。

解码模块

8.3 比对

比较模块能够对两个载荷、两个HTTP请求或响应进行比对。能够在字节水平(一般是二进制对象)进行比对,也能够在字的水平进行比对(一般是文本)。

0x09 配置选项


这个模块是用来配置Burp进行更复杂的工做。

9.1 链接

9.1.1 平台认证

若是应用程序须要特殊形式的身份验证,如NTLM或Basic,你均可以在这里进行配置。若是你须要在浏览器中进行身份验证,那么你能够不须要进行修改。你将会在Burp中看到消息头的部分,意味着你不须要每次登陆应用时都输入它们。若是你须要使用某种平台进行身份验证,Burp对传统客户端都是有帮助的。

有时你的工具并不支持对其进行设置,我在使用Appscan时就存在这个问题,尽管Appscan支持平台身份验证。

你能够重定向你其余工具的流量到Burp,让Burp承担起这个责任。我不是暗示它们会生成大量的流量,可是形势所迫,你必须使用Appscan。若是验证失败,错误消息将显示在Alerts选项卡中。

平台认证

开启Prompt for credentials on platform authentication failure,保证在认证失败时能够迅速传递给浏览器。

9.1.2 上游代理服务器—Socks代理

我已经讲了不少关于Burp如何做为一个代理链中的一部分。咱们要在这里对通过Burp转发的请求进行设置。这对联合代理服务器环境下的Burp使用是很是有帮助的。一般状况下,这些代理服务器是自动配置的。这些设置能够访问Tools (menu) > Internet Options (menu item)> Connections (tab) > LAN settings (button)来更改IE的代理设置。一般在Use automatic configuration script中可以对proxy auto-config和pac文件进行配置。检索PAC文件而且在文本编辑器中查看,应该能看到代理地址:端口格式的配置。

上游代理服务器

使用SOCKS代理是相似的。根据细则,这将会覆盖以前的代理设置。就我我的而言,我历来没有对Burp的Socks代理进行配置。

9.1.3 超时设置

对老服务器进行测试,应该增长超时设置,若是Burp是代理链中的一部分,就要增长超时的设定,以修正延误。

超时设置

9.1.4 主机解析

我在以前简要讨论过。若是应用使用多个端口还不支持代理服务器设置。咱们就要将应用程序的流量重定向到Burp。如今Burp须要知道这些流量将要被转发到哪,不然它会陷入本地回环的无限循环中。

由于Request Handling只支持一个节点,咱们不能使用它。正相反,咱们会将其置空,并添加节点及其关联的IP地址在Hostname Resolution中。例如,server.com和10.11.12.13。若是节点通过负载均衡、CDN或者像亚马逊的S3共享主机,就会更加复杂。在这种状况下,不通过代理,运行一个Wireshark或者Netmon来捕获应用程序的流量。发现HTTP请求发送目的地的IP地址。使用这个IP在host头字段中发挥做用。有许多方法能作到这一点,可是我以为这个方法是最简单的。

9.1.5 超出域的请求

咱们能够指定Burp把不属于域内的请求所有丢弃。若是咱们设置了正确的域范围,就能够下降流量噪声,这会对咱们有利。若是应用程序链接了除了咱们正在测试的节点外的其余节点,这样就增长的域的范围,它可能会中止工做。若是你是一个没有使用过Burp的人,又不想让这个功能起做用,你能够在此指定。除此以外,我没以为它有多么有用,我从未使用过此功能。

9.2 HTTP

Redirections和Status 100 Responses都很简单,我就跳过了这个部分

9.2.1 流响应

这是一个被低估的功能,特别是对非Web应用测试来讲。当咱们要使用这个功能时,先让咱们看看代理是如何工做的。我曾经写过一篇文章解释这件事儿。

总之,下面是流程:

GET流程

  1. Hipchat creates a TCP connection to Burp.
  2. Hipchat sends the GET request to Burp.
  3. Burp creates a TCP connection to Server.
  4. Burp sends the GET request to Server.
  5. Server send the web page to Burp.
  6. Burp closes the TCP connection to Server.
  7. Burp sends the web page to Hipchat.
  8. Burp closes the TCP connection to Hipchat.

须要注意的是,这个图和HTTPS请求不一样。

如今假设http://downloads.hipchat.com/blog_info.html 是个大文件(好比是100MB的更新),应用程序须要请求下载。该应用程序将此文件做为流,根据下载完成的数据量显示一个进度条。

若是咱们代理这个请求,Burp会执行步骤四。直到下载完成,Burp才会将此数据发送到应用程序中。这意味着应用程序会等待此文件,可能就放弃等待了,并从新发送请求或者返回超时或冻结。若是咱们添加http://downloads.hipchat.com/blog_info.html到Streaming Responses部分,Burp就会在接收到数据时当即把响应传递给应用程序。

9.3 SSL

Server SSL Certificates只显示从服务器中检索的证书列表。使用命令行工具像Openssl就能够很容易的获得证书,可是我猜你也想在这里查看证书信息。

9.3.1 SSL协商

不管如何,安装都是个好主意,可是你也能够在Burp中使用无限长度的密码。要确保你运行的是最新版的Java运行环境(JRE)。

除了Disable Java SNI extension启用全部选项,只有当你须要SNI的时候再启用。Allow unsafe renegotiation看起来有点吓人,可是当使用客户端证书的时候,这很是有用。

在代理期间,若是你不确信当前TLS设置是否工做,你须要时刻留意Alerts标签页。若是TLS我收失败或者Burp和服务器没法完成TLS握手,就会有错误提示。对于错误请看这个页面

9.3.2 客户端SSL证书

若是应用程序须要客户端证书,咱们也能够很是容易地添加。咱们能够选择目的host和Burp对应这个host使用的证书。

9.4 会话

这个选项卡提供给咱们许多自动化的东西。你能够建立宏。你能够进行一些操做而后把它们记录下来录制为宏。以后在中, 你能够在肯定的域内或对特定的请求来选择要运行的宏。例如,你能够建立用于登陆的宏,这样Burp能够在你发送请求前就登陆。还能够建立一个带有特定值的参数,并将其添加到每一个请求,或者在必定范围内的请求,或者自动改变参数的值。

9.5 界面

你能够更改字体、编码和其余一些能够更改的东西。不加赘述。

9.6 杂项

在这里大多数项目不须要任何解释。若是你有Pro版,我建议你开启Automatic Backup。我一般将其设置为每小时存档而且退出时存档。由于,我但愿能够天天保存状态的备份,我也开启了Include in-scope items only,这大大减小了保存数据的体积。 若是你须要在测试期结束时回头检查一些东西,或者你的帐户被锁定时,你能够回档。 计划任务会容许你作一些计划。例如你能够设置扫描模块在什么时候启动。若是你不想或者不能天天扫描,那就让它在特定的时间进行扫描吧。不幸的是,做为计划任务不容许运行宏,而且可选项也很是有限

计划任务

9.6.1 Burp默认服务器

这是一项新功能。默认设置在Use the default collaborator server。这是我很是不喜欢的一个功能,每次我新安装完Burp总要去修改这个设置。我不太清楚它会把什么信息传到服务器中,因此我宁愿别发送客户端信息到默认的服务器。你也能够选择运行,详细的能够阅读文档

0x0A 报警


报警标签页也是重要的。特别是在TLS链接问题或是超时。若是这个标签亮起时,要注意这个标签。

0x0B 扩展模块


Burp支持扩展,扩展能够用Java、Python或者Ruby编写。不幸的是,没有不少非Java开发的扩展。我的来说,我更喜欢Python。我能够从读其余人编写的扩展中学到更多。

11.1 扩展

这个选项卡会显示当前被加载的扩展。它还能显示这些扩展的输出和错误。在扩展加载以后,就要关注它的错误页面运行中是否存在错误。添加扩展很是简单,单击添加,而后选择类型和扩展文件的路径。我一般把这些都放在Burp目录的一个子目录内。

11.2 BApp商店

在Burp的app store中安装插件是一件垂手可得的事情。只须要切换到该选项卡,选择扩展名而后单击安装。若是该扩展是用Python编写的,你必须安装Jython才能运行。若是不方便安装,Burp很方便的提供了下载Jython按钮。

Jython

单击下载按钮打开此页,下载最新的Standalone Jar。我一般把它放在和Burp相同的目录中。以后在Extender > Options中,能够选择Python Environment > Location of the Jython standalone JAR file其做为你的运行环境。

Jython路径

如今就能够点击安装按钮进行安装了。

11.3 API

APIs选项卡中有API文档。Burp扩展可使用这些API来与Burp进行交互。正如你在那些为Java扩展编写的文档里看到的。

11.4 设置

正如以前所见,咱们能够为Jython和JRuby设置路径。咱们也能够为Java和Python编写的扩展指定目录。在Burp启动时,这些扩展所在的目录会自动加载。

0x0C 实际案例


使用到的应用程序

Cygwin + IBM Appscan Standard + Charles Proxy + Fiddler + SoapUI

你不须要使用Burp的Pro版,IBM Appscan 也用的是评估版。全部的应用都是无偿使用的。

12.1 开始

通常状况下,应用程序有本身的代理设置或者使用IE的代理设置,咱们都可以使用Burp来进行代理。

在开始以前,要确保你在操做系统证书存储区安装了Burp的根证书。

Burp的默认代理监听在127.0.0.1:8080

12.2 Cygwin

Cygwin是一个Windows下的类*nix命令行。使用Cygwin能够很方便的运行不少程序,好比git或Curl。由于在一个API测试中,我须要使用一系列Curl命令。为了方便,我经过Cygwin来执行。重定向到Burp中,而且在测试中将使用到重放模块。

为了在Cygwin中安装Curl,咱们须要运行Cygwin的安装文件,而且在可用的包列表中选择curl。这和包管理器的功能是类似的,而且支持搜索功能。因此安装Curl是很是容易的。安装文件会自动下载其依赖。

我要用再次使用GET请求再一次来取回Google的Logo。使用Burp模拟一些Curl命令来完成这个最简单的任务。重定向浏览器的流量到Burp,并访问Google首页。确保你清除了浏览器缓存,不然将不会发送请求,你也看不到请求了。选择Logo图片的那个请求,右键点击Copy as curl command。

拷贝Curl命令

结果应该与下面相似:

curl -i -s -k -X 'GET' \ -H 'Referer: https://www.google.com/' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko' -H 'DNT: 1' \ -b 'NID=78=S4kjzm5kwP82gAN8xazSJCiG6UWZhRNEGEE_a3hHZ2OMcy5bPX1CjZisClbvBgPUodlcpywR6WyhVSRUykloTI3ay7jSy9fpgTG2tKV2s8eojpQmL_F5sYKyHP1exm8iwp0F_FEnnE_DaQ' \ 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png' 咱们不须要关心这么多项,咱们能够忽略Referer、Cookie、User-Agent和其余一些没用的东西。

curl -i -s -k -X 'GET' 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'

12.2.1 -k/安全开关

-k意味着Curl将不会验证证书的安全性。在使用Burp时,有时候会很是必要,由于Burp自签发的证书有可能失效。若是你想使用其余Curl命令,必定要记得加上-k来保证不出现任何问题。

12.2.2 设置Burp为Cygwin的代理

这很简单,咱们只须要执行如下命令:

export http_proxy=http://127.0.0.1:8080 export https_proxy=http://127.0.0.1:8080

重定向

12.3 IBM Appscan Standard

众所周知,这是一个Web应用扫描软件。有时候我会将其重定向到Burp上,为了练习,咱们将使用评估版,在撰写本文时,版本是9.0.3。咱们必须注册一个免费的IBM ID才能得到软件,我相信这对你来讲并不难。

评估版只能扫描IBM的示例网站http://demo.testfire.net/,不过这就足够了。

在Appscan中,咱们能够在Scan Configuration > Connection > Communication and Proxy设置代理。这和Firefox的代理设置相似,咱们也可使用IE的代理,或是为Appscan指定一个特定的代理。咱们有两种方法,第一种是经过IE代理,第二种是直接设置代理。

Appscan代理设置

如今,咱们能够重定向Appscan的流量到Burp了,也能够进行一些手动探索了。试用版软件可让咱们这样作,可是不要把它添加进扫描中。若是咱们有Appscan的受权版本,咱们能够运行一个扫描。在Burp中能够看获得扫描的流量通过。

或者,你也有可能想把其余的流量导入Appscan中。例如,使用额外的浏览器或者其余工具,你能够在Tools (menu) > Options > Recording Proxy (tab) > Appscan proxy port中设置导入端口。你也能够经过选择,来指定你本身设置的端口。在手动探索时Appscan只是起到监听功能。

代理设置

你能够安装导入Appscan的根证书了。

12.4 Charles Proxy

有时候,你须要使用两个或两个以上的代理来组成代理链。我如今将要给你介绍最流行的HTTP代理。

咱们先下载并安装一个免费试用的版本,在截稿时,版本是3.11.4。出于演示目的,我会使用IE和普通的Google主页。事实上流量能够来自咱们关心的任何位置,只要代理成功,其他东西都是相同的。

要确保你安装了Charles的根证书,你能够在Help (menu) > SSL Proxying设置。

12.4.1 IE -> Burp -> Charles

首先你要在Proxy (menu) > Windows Proxy关闭Charles的自动代理设置。若是系统代理是开启的,就会在下拉菜单中有一个小小的标记。在Proxy (menu) > SSL Proxying Settings (sub-menu) > SSL Proxying (tab)中确保Enable SSL Proxying是被选中的。点击添加,在HOST和PORT上填入*。在Proxy (menu) > Proxy Setting (sub-menu) > Proxies (tab)里咱们能够查看HTTP代理端口,默认是8888端口,咱们也能够指定其余端口。

Charles SSL代理

试用版本会每隔三十分钟从新启动,就会再次开启自动代理。确保每次启动后你都要禁用它。你也可使用Firefox来代替IE代理设置。

在Burp中,能够在Options > Upstream Proxy Servers添加上行代理服务器为127.0.0.1:8888

配置Charles做Burp的上行代理

如今能够在IE中打开Google的主页了,能够看到流量通过了Burp和Charles。

流量展现

12.4.2 IE -> Charles -> Burp

咱们只须要将IE的代理设置改成Charles,即127.0.0.1:8888。幸运的是就算Charles每隔三十分钟重启,可是它不会重置设置。

Charles要在Proxy (menu) > External Proxy Settings (sub-menu)确保开启了Use external proxy servers。要将Web Proxy (HTTP)和Secure Web Proxy (HTTPS)都输入Burp的代理监听(127.0.0.1:8080)

外部代理设置

设置完成,能够打开主页了。

流量展现

12.5 Fiddler

Fiddler的好处在于其能够添加脚本,咱们使用的是4.6.2.2这个版本。

12.5.1 IE -> Fiddler -> Burp

首先,咱们要在Tools (menu) > Fiddler Options (sub-menu) > HTTPS (tab) > Decrypt HTTPS traffic设置Fiddler能够捕获HTTPS流量。这将会在Windows证书存储区安装Fiddler的根证书。这将会让Fiddler捕获而且解密所有通过代理的流量。还要确保Ignore server certificate errors (unsafe),由于Burp多是不被认可的。

Fiddler HTTPS选项

切换到Gateway标签页,选择Manual Proxy Configuration而且在上面的输入框中输入http=127.0.0.1:8080;https=127.0.0.1:8080,这将会将Fiddler的流量导入到Burp。

重定向流量

如今设置完成,能够访问首页了。

流量展现

你也能够在Tools > Fiddler Options > Connections (tab)手动更改Fiddler的代理设置。

Fiddler设置

12.5.2 IE -> Burp -> Fiddler

首先要禁用Fiddler的自动代理,而且把Gateway中的所选项删除。若是使用IE代理设置,记得选择No Proxy,不然又会回到Burp。以后咱们设置Burp是IE的代理,Fiddler是Burp的上游代理。

12.6 SoapUI

这个部分我已讲过,请参见

做者的案例要写在第五部分,不知道会连载几期

相关文章
相关标签/搜索