Burp不仅仅可以被用于Web应用程序测试。我常在移动端和胖客户端测试中使用Burp。如果应用使用了HTTP方法,那么Burp绝对会成为你最好的选择。

我要记录在工作中对我有很大帮助的Burp技巧。目的之一是与大家一起分享这些技巧,另一个目的是把这些技巧记录下来(类似于菜单中的备忘录)。

这部分中,我将讲述通过 Proxy >  Option 配置的拦截和代理监听。

这篇文章中的Burp Pro的版本为1.6.39,大部分项都适用于现状的Burp Free版本(1.6.32)。自从我开始使用Burp(v1.5)以来,大部分设置都没有改变过。你可以在这个地址下载Burp https://portswigger.net/burp/download.html

当我开始写这篇文章的时候真没想到Burp有这么多东西可以写。所以我把这篇文章分成了几个不同的部分。请注意,这篇文章并不是针对Web应用程序测试的,所以我可能会跳过一些功能。如果你有喜欢的tips或者使用案例,非常希望你在评论里分享出来。

1. 拦截

Burp支持request/response拦截和修改。你可以在Proxy > Options中配置大部分设置。

1.1 拦截响应

有时你想要手动修改拦截的响应。在Proxy > Options > Intercept responses based …中启用它。确保取消第一个规则里的复选框,否则二进制有效载荷可能无法被拦截。

02.png

1.2 拦截请求/响应规则

Burp支持一些规则来完成拦截请求/响应。当你已经重定向大量流量到Burp,但是只想要拦截一些特定端点的流量时(比如,使用IE代理设置),这些规则非常有用。进入Proxy > Options,查看拦截客户端/服务器 请求规则。有一些预先定义的规则来确定拦截请求的范围。你还可以添加你的规则,它支持正则表达式匹配内容和头。

03.png

1.3 匹配和替换

你可以在 Proxy > Options > Match 和 Replace 下进行匹配/替换。这意味着你可以在请求或响应中进行替换。它也支持正则表达式。我通常使用它来修改User-Agent(查看默认规则或添加你自己的User-Agent)。另一种方式在请求中不使用修补二进制就自动修改来绕过旁路控制。举个例子,如果服务器对登录的true/false响应,我会匹配/替换规则来修复错误的登录响应让它变为true并绕过登录(它只适用于服务器不关心登录是否成功的情况)。

04.png

1.4 SSL Pass Through

Burp的这个功能被低估了(Proxy > Options > SSL Pass Through)。Burp 不会MitM任何添加到这部分的东西,只是一个不会终止的TLS代理。

假设你正在尝试代理什么东西,但是它并不工作。你可以添加端点到SSL Pass Through,然后查看 Burp 是不是出现了问题。

这种情况常发生于使用混合HTTP和非HTTP协议的胖客户端来与不痛端口对话。Burp将MitM非HTTP连接,并且可能自动删除或修改数据包。这将会导致应用程序故障。首先确定端点,然后将它们添加到SSL Pass Through中。让我们通过实际的例子看看 Proxying Hipchat 第二部分:你认为你能够使用Burp吗?

你可以使用这个功能,把Burp当做一个快速、简单的端口转换。比如过,你想要连接发送数据到端口1234的客户端到正在监听端口5678的远程服务器。如果不想写代码(或使用其他程序)来重定向端口。设置Burp作为端口1234上的代理,重定向端点到使用host文件的本地主机(活着其他系统特定的方法)。在Burp中,你可以设置代理重定向所有流量到使用请求处理功能的端点和一个不同的端口。把端点添加到SSL Pass Through。

1.5 响应修改选项

大部分对web应用程序来说都是自解释性的、非常有用的。

转换HTTP链接到HTTP并删除cookie中的安全标识能够在处理请求时很好的契合强制使用SSL。如果我们的应用程序(或浏览器)和Burp之间禁止TLS,一个安全cookie就不会被传输,app就将停止工作。当Burp被设置使用Set-Cookie响应头时,它能够删除安全标识。

08.png

1.6 在 Startup 和 Miscellaneous 中禁用拦截

我启动 Burp,并将它设置为代理服务器,运行应用,然后想知道为什么它是停滞的。然后我意识到在启动时,默认使用拦截状态。

01.png

2. 代理监听

Burp 在一个端口上进行监听。这个端口就是进行流量转发的端口。默认设置是127.0.0.1:8080,但是它是可以被更改的。你也可以在其他接口或所有接口0.0.0.0设置新的代理监听。唯一的限制是另一个程序不能在所选接口的端口上使用。

代理监听可以从 Proxy > Option > Proxy Listeners 访问。

05.png

2.1 绑定

添加一个新的监听很简单,只需要点击Add按钮即可。Loopback是127.0.0.1或者localhost。如果你想要在另一个接口上进行Burp监听,也可以在这里选择。如果我正在代理一个移动设备,那它非常有用。在这种情况下,我将在和移动设备(如一个Windows hostednetwork)共享的所有接口(0.0.0.0)或网络接口上创建监听。

06.png

我们可以导入/导出使用导入/导出 CA 证书的 Burp 的 root CA,或使用重新生成CA证书来创建新的证书。与了解更多信息,请参阅文章:Installing Burp Certificate Authority in Windows Certificate Store。如果你重新生成了root CA,你必须在Windows证书商店(操作系统或浏览器,如火狐等)中用新的证书替换旧的证书。

2.2 请求处理

对于非Web应用程序来说这是一个非常有用的功能。假设我已经通过使用Windows host文件代理了连接到www.google.com:8080点胖客户端应用程序。在host文件中,www.google.com被重定向到127.0.0.1,然后我已经在端口8000中创建了一个Burp监听。现在,我需要重定向来自这个监听的所有流量到原始端点(www.google.com:8080)。这么做的一种方式是把这部分重定向到host和端口,host和端口将分别包含www.google.com和8000。

07.png

如果应用程序正在相同的端口(例如,如果我们想把流量引入端口80或者443)中连接到不同的端点,我们不能在这里重定向流量。我们需要使用Options > Connections > Hostname Resolution。我们将在下个部分中介绍这些内容。

如果我正在使用Burp来pipe流量到另外的代理工具,如 Fiddler 或 Charles,那这种方法非常有用。

在我剥离Burp和应用程序中的 TLS 并想要从 Burp 添加它到端点时,强制使用 SSL 选项。一个例子是使用 SOAPUI。

2.2.1 Burp的隐形代理

想要了解更多信息请看 Hipchat part3 然后阅读 2.2.1 和 2.2.2。阅读整个系列查看Burp是如何作为代理工作的。你能跳过很多坑。 

如果我们已经代理了一个客户端,并且客户端代理感知它将发送一个 CONNECT 请求到端点,它想要在开始真正的 TLS 连接之前连接(在这个例子里连接到 www.google.com)。这是因为代理(在多数情况下是非TLS终止代理而不是像 Burp)不能看到包里的 TLS,TLS是被加密的 TCP 有效载荷。因此,它不知道哪里能发送流量。这个 CONNECT 请求解决这个问题。代理知道客户端的例子是浏览器。

非代理知道客户端并不知道(或不关心)他们被代理了。对于多数既没有代理设置也没有使用操作系统代理设置的应用程序来说都是这种情况。应用程序仍然认为它将发送信息发送到端点,但是他被重定向到了 Burp。Burp 是一个 TLS 终止代理,它能够揭秘数据包,并通过读 host 头来查看他们来发现原始端点。这就是Burp的无形代理。

它可以在 Proxy > Options 被启用。选择代理监听,点击编辑,并在 Resquest Handling 下选择支持无形代理。

07-Burp-invisible-proxy-mode.png

我常做的事捕获应用程序和 Burp 间的本地流量(使用 RawCap ),然后查看是否应用程序发送CONNECt 请求。如果是这样,那它是没有必要的。另一种方式是尝试两种设置,看看哪种会工作。

2.3 证书

我们在这里可以配置 Burp 的 MitM 证书。

1. 使用自签名证书:这意味着 Burp 只能对所有的连接使用一个单一的证书。

2. 生成 CA 签名的单个 host 证书:这是最常见的。Burp 将为每个 host 生成不通的证书。作为域名的证书的通用名称(CN)是相同的。

3. 使用一个特定的 hostname 生成一个CA签名的证书:我们可以在证书中指定CN。当一个应用程序通过检查CN进行认证时,它非常有用,但它和经常使用通配符的端点不通。例如,应用程序连接到images.googlecom,但是它在寻找\*.google.com的证书。如果我们选择最后一个选项,Burp将为images.google.com创建一个证书(因为它时端点),证书锁定机制会拒绝该证书。

4. 使用自定义证书(PKSC #12):如果我们有一个我们需要使用的特定证书(包括私钥),我们能够在这里使用它。当证书锁定机制正在检查更多的CN时,它非常有用,所以我们可以手动生成一个证书(或者如果使用我们能够获取的原始证书)并在这里使用它。

3. 奖金提示:使用一定内存运行Burp

个人而言,我从没在内存外运行Burp时没有遇到任何问题。但是我通常在一天结束时保存Burp状态,并且不怎么使用除YMMV之外的Python/Ruby扩展。

通过命令行给Burp分配2048MB(或2GB):

java -jar -Xmx2048m /burp_directory/burpsuite_whatever.jar