1. 技术支持中心
  2. 文档

Burp Proxy:隐形代理

Burp对不可见代理的支持使非代理意识的客户端可以直接连接到代理侦听器。 如果要定位的应用程序使用在浏览器外部运行的胖客户端组件,或者在浏览器框架之外发出自己的HTTP请求的浏览器插件,则此选项有时很有用。 通常,这些客户端不支持HTTP代理,或者不提供将它们配置为使用HTTP代理的简便方法。

重定向入站请求

您可以通过修改DNS分辨率以重定向相关主机名,并在应用程序使用的端口上设置不可见的代理侦听器,来有效地使非代理感知客户端连接到Burp。

例如,如果应用程序使用域名example.org,并在标准端口上使用HTTP和HTTPS,则需要在主机文件中添加一个条目,将域名重定向到本地计算机:

        127.0.0.1        example.org 

要接收重定向的请求,您还需要在127.0.0.1:80和127.0.0.1:443上创建不可见的Burp Proxy侦听器。 然后,不了解代理的客户端将域名解析为您的本地IP地址,并将请求直接发送到该接口上的侦听器。

隐形代理模式

使用DNS将客户端请求重定向到本地侦听器很容易,但是由于特殊的不可见代理模式会产生,因此产生的请求将不会采用HTTP代理通常期望的形式,因此很容易出现。

使用纯HTTP时,代理样式的请求如下所示:

GET http://example.org/foo.php HTTP/1.1
Host: example.org

而相应的非代理样式的请求如下所示:

GET /foo.php HTTP/1.1
Host: example.org

通常,web代理需要在请求的第一行中接收完整的URL,以便确定将请求转发到的目标主机(它们无需查看主机头即可确定目标)。 如果启用了不可见代理,则Burp收到任何非代理样式的请求时,它将解析出主机头的内容,并将其用作该请求的目标主机。

将HTTPS与代理一起使用时,客户端会发送CONNECT请求,以标识希望连接的目标主机,然后执行TLS协商。 但是,非代理感知客户端将直接进行TLS协商,认为它们正在与目标主机直接通信。 如果启用了不可见代理,则Burp将允许客户端直接协商TLS,然后再次从解密的请求中解析出主机头的内容。

重定向出站请求

在不可见模式下运行时,默认情况下,Burp将根据从每个请求中解析出的主机头将请求转发到目标主机。 但是,由于您已经修改了相关域的主机文件条目,因此Burp本身会将主机名解析为本地侦听器地址,并且除非进行不同的配置,否则会将请求转发回自身,从而形成无限循环。

有两种方法可以解决此问题:

如果非代理感知客户端不在其请求中包含主机头,则会出现相关问题。 没有此标头,在处理非代理样式的请求时,Burp无法确定应将请求转发到哪个目标主机。

同样,有两种方法可以解决此问题。 如果所有请求都应转发到同一目标主机,则可以使用Proxy侦听器的重定向选项来强制将传出的流量转到正确的IP地址。

如果应将不同的请求转发到不同的主机,则您将需要使用多个代理侦听器:

处理TLS证书

有多种选项可配置Burp代理侦听器使用的服务器TLS证书。 自动为每个目标主机生成证书的默认选项有时可能不适用于隐形代理。 非代理意识的客户端直接与侦听器协商TLS,而无需先发送CONNECT请求来标识客户端要联系的目标主机。许多客户端(包括浏览器)都在“客户端问候”消息中支持“ server_name”扩展名,该扩展名标识了客户端希望与之协商的目标主机。 如果存在此扩展名,Burp将使用它以正常方式为该主机生成证书。 但是,如果客户端问候消息中不存在该扩展名,则Burp将故障转移到使用静态自签名证书。

与出站请求重定向一样,有两种方法可以解决此问题: