Burp Suite是以拦截代理的方式,通过拦截HTTP/HTTPS流量,充当浏览器和服务器的中间人,对数据包进行修改、重放等处理,以达到测试目的。
本文旨在介绍不同被测客户端的代理如何配置。包括:

BurpSuite默认代理地址和端口是127.0.0.1:8080,可以从BurpSuite的Proxy选项卡的Options里查看到,如下图

正常情况下,我们使用Web浏览器访问服务是直接访问,若想对请求做拦截及篡改,就需要让Web浏览器的请求先传往BurpSuite,在BurpSuite上进行流量数据的处理。
那么如何让Web浏览器的请求经过BurpSuite呢?
最简单的办法就是将浏览器的代理服务器设置为BurpSuite,即默认的127.0.0.1:8080。但此举较为繁琐,且每次测试后还得修改回来,否则关闭BurpSuite后,会影响浏览器的正常使用。
这里推荐使用浏览器的代理插件。例如常见的Chrome、Firefox浏览器,推荐使用Proxy SwitchyOmega插件。
1、插件下载:https://proxy-switchyomega.com/download/
2、插件安装(这里以Chrome为例)
将已下载下来的插件解压到文件夹
在Chrome地址栏输入chrome://extensions/回车打开扩展程序
点击加载已解压的扩展程序,选中步骤一的文件夹即可

3、插件配置
新建一个情景模式,并将代理服务器设置为BurpSuite中设置的代理地址及端口并应用保存


4、插件启用
点击浏览器右上角Proxy SwitchyOmega插件按钮,选择对应的情景模式,在该页面输入要访问的URL后,此时的请求流量即会通过BurpSuite

5、常见问题-首次抓取HTTPS时,浏览器会报安全问题

解决方案:
http://burpCA Certificate按钮,将证书文件下载下来
安装证书,根据提示进行安装
受信任的根证书颁发机构
有的时候,我们需要对移动端APP进行渗透测试,那么该如何配置呢?
All interfaces。


当我们需要测试的对象是PC客户端,且该客户端不支持代理设置时,要如何解决呢?
方案一:直接设置系统代理,所有流量都会经过BurpSuite;设置方法最为简单,但缺点也显而易见,除了会导致记录的请求过多影响测试外,还会影响其他非测试应用的使用。
方案二:通过Proxifier工具设置,Proxifier是一款功能非常强大的socks5客户端,可以为本身不支持设置代理的软件设置HTTPS或SOCKS代理/代理链。
Proxifier支持Xp/Vista/Win7/Win10、MAC OS ,支持socks4,socks5,http代理协议,支持TCP,UDP协议,可以指定端口,指定IP,指定域名,指定程序等运行模式,兼容性非常好。
设置方法如下:
1、代理服务器设置
点击 Proxy Servers按钮,打开对话框,点击Add按钮,添加代理服务器配置。
Address和Port填BurpSuite的代理,也就是
127.0.0.1:8080
Protocol 选择HTTPS
Advanced 高级设置项里可以给该代理自定义一个标签名用于区分


点击Check按钮测试代理设置是否成功,如成功,则会显示Proxy is ready to work with Proxifier!


启用代理规则;点击Proxification Rules按钮,打开对话框;默认有2条直连的规则,点击左下方的Add按钮,进入具体规则设置页面

设置内容:
Name :任意填写
Applications:设置需要走代理的应用,也就是待测应用
Target hosts:设置访问哪些网站走代理,根据实际情况填写
Target ports:设置访问目标网站的哪些端口才走代理,根据实际情况填写即可
Action:这里选择上一步设置的代理服务器即可。

规则设置好之后,可更改规则的顺序。和 BurpSuite的 Upstream Proxy Servers 一样,越靠前的规则会优先被命中。

一切设置就绪后点击 OK 按钮保存。此时BurpSuite 就能够抓取到来自被测应用的HTTP 报文了(如上图设的是微信,那么在微信里的HTTP请求就均会通过BurpSuite代理)。同时,在 Proxifier 中也能够看到连接状态与日志。
2、代理链设置
如果请求需要经过多个代理,Proxifier 也支持代理链的设置。
添加多个代理服务器,然后点击按钮Proxy Chains展开代理链设置

点击Create按钮,添加代理链,然后将代理服务器按数据量顺序依次拖入代理链中

点击Type按钮,或者双击代理链名称可进行代理链类型设置
Simple Chain:简单类型,请求数据从上到下依次经过各代理服务器
Redundancy:冗余类型,若第一个代理服务器无法连接,则尝试第二个,以此类推
Load Balancing:负载均衡类型,请求数据会随机地发送到列表中的各个代理服务器

设置完后在Proxification Rules里,把规则的Action改成选择代理链即可
最后,BurpSuite里的Upstream Proxy Servers 和 SOCKS Proxy其实已经可以解决被测服务存在多重代理的问题,所以可以不需要在Proxifier里设置。
至于什么是多重代理,在BurpSuite里又该如何设置,下文会进行介绍。
在某些特殊场景下,我们需要测试的网站本身也需要过一层代理。例如我们访问www.baidu.com,需要先给浏览器设置SS代理(127.0.0.1:6666)。
现在需要对www.baidu.com进行测试,如果只是简单的把浏览器代理设置为BurpSuite,虽然可以进行抓包,但www.baidu.com走不到127.0.0.1:6666去,测试就没意义了。
要解决这个问题,就需要借助代理链。代理链 (Proxy Chain) 就是可以使用一个代理连接到另一个代理。
例如上面的场景,我们首先设置浏览器的代理为 BurpSuite;然后为 BurpSuite 再设置一个上游代理即 SS(127.0.0.1:6666)。这样访问 www.baidu.com 时,请求数据先经过 BurpSuite,然后再流向SS,最后经过 SS 服务器到达www.baidu.com。服务器端返回的响应则刚好相反。

BurpSuite本身支持这样的设置。在 BurpSuite 的 User options 下的Connections 页面中,Upstream Proxy Servers和SOCKS Proxy这两个配置项,都是跟代理链相关的。

1、Upstream Proxy Servers设置
在该设置项中,支持多个上游代理服务器规则。也就是说可以同时配置多个 Upstream Proxy Servers,在使用过程中,BurpSuite 会按顺序将请求的主机与 Destination host 中设置的内容进行比较,并将请求内容发送至第一个相匹配的代理服务器。
具体配置方法如下:
点击Upstream Proxy Servers列表框左侧的 Add 按钮,打开 Add upstream proxy rule 对话框。这里一共有 8 个设置项,一般情况下只需关注前4 个:
Destination host:填入目标网站域名或者IP,支持通配符。在本例中我们可以填入 *.baidu.com。
Proxy host:填入SS代理服务器的IP地址,即 127.0.0.1;若为空表示直接连接。
Proxy port:填入 SS 的代理地址,即 6666。
Authentication type:这里选择认证类型,由于 SS 本地代理无需认证,这是选择None。
如果 Authentication type 为 None,则接下来的 4 项内容无需理会,否则需要根据实际情况设置以下 4 项内容。
Username:用户名。
Password:密码。
Domain:域;仅用于 NTLM 认证类型。
Domain hostname:域主机名;仅用于 NTLM 认证类型。
设置内容如下图所示,最后点击 OK 即可。
这时候你会发现www.baidu.com已经能够访问了,并且 BurpSuite 中也成功地抓取到了相应的请求报文。

2、SOCKS Proxy设置
与 Upstream Proxy Servers 的作用类似,SOCKS Proxy 的功能也是将请求内容发送至相应的代理服务器。不同之处在于,SOCKS Proxy 作用于 TCP 协议层,因此如果设置了该项,那么所有的请求数据都会被发送至 SOCKS 代理服务器。
Upstream Proxy Servers作用下,只有配置的域名或IP会走到对应的代理服务器,但SOCKS Proxy作用下,则不区分是请求哪里,均会经过对应的代理服务器。
所以如果同时设置了 Upstream Proxy Servers 和 SOCKS Proxy,则所有请求都会经过 SOCKS Proxy配置的代理服务器发送,Upstream Proxy Servers此时就不起作用了。
SOCKS Proxy设置方法如下:
先在下方的输入框中依次填入 SOCKS 代理服务器的 IP、端口(如果 SOCKS 代理服务器需要认证,还需要填写用户名和密码),然后勾选 Use SOCKS proxy 即可。

我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我正在尝试在Ruby中制作一个cli应用程序,它接受一个给定的数组,然后将其显示为一个列表,我可以使用箭头键浏览它。我觉得我已经在Ruby中看到一个库已经这样做了,但我记不起它的名字了。我正在尝试对soundcloud2000中的代码进行逆向工程做类似的事情,但他的代码与SoundcloudAPI的使用紧密耦合。我知道cursesgem,我正在考虑更抽象的东西。广告有没有人见过可以做到这一点的库或一些概念证明的Ruby代码可以做到这一点? 最佳答案 我不知道这是否是您正在寻找的,但也许您可以使用我的想法。由于我没有关于您要完成的工作
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U
我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)