Burp Suite Proxy是放在客户端和目标服务器中间的一个工具,它可以记录、拦截,也可以修改经过代理的那些HTTP和HTTPS请求。在做测试之前,要先确认一下目标系统是不是自己的,或者已经拿到了很明确的授权。抓包的时候,比较容易弄混的一件事是,“请求没有被拦截窗口停下来”和“请求根本就没有经过Burp”,这是两种不一样的情况,得从不同的地方去排查才行。
一、Burp Suite Proxy怎么抓包
Burp Suite自己带了一个浏览器,里面已经提前把代理给设置好了,刚开始用的时候,想快速试一下,用这个就比较方便。如果用的是Chrome、Firefox这种外面的浏览器,那就还得再去单独设置一下代理的地址,还有证书。
1、使用Burp内置浏览器
进到【Proxy】→【Intercept】里面,去点一下【Open Browser】,把Burp的浏览器打开。
这个内置浏览器发出去的流量,自己就会从Burp里面过一遍。访问了要测试的网站以后,可以在Intercept页面那里看到被停下来的请求,也可以在HTTP history里面看到全部的记录。就算把拦截功能关掉了,HTTP history还是会继续记录那些经过代理的请求。
2、控制请求是否暂停
在【Proxy】→【Intercept】里面,去切换【Intercept is on】和【Intercept is off】这两个状态。
打开了以后,请求就会停在Burp里面,要再点一下Forward,它才会接着往后面发送;关掉了以后,浏览器就可以正常去访问网站了,请求也照样会进到HTTP history里面去。要是只是想看一看流量,就不用一直开着拦截,不然页面可能会因为请求一直没被放过去,结果就打不开了。
3、配置外部浏览器代理
用外面的浏览器的时候,要把HTTP和HTTPS的代理,都指到Burp正在监听的那个地址上去。一般默认监听的地址是127.0.0.1,端口是8080,但是具体还是要看当前Proxy listener里面是怎么设的。官方那边建议,大多数手动测试的时候,直接就用Burp自己的浏览器,只有在需要用到某些特别的插件、账号环境,或者浏览器配置的时候,再去单独连外面的浏览器。
二、Burp Suite Proxy抓不到HTTPS请求怎么办
当HTTPS的请求抓不到的时候,可以先去判断一下,HTTP的请求能不能进到Burp里面来。要是连HTTP都没有记录,那一般就是代理或者监听这边的问题了;要是HTTP是正常的,但HTTPS这边报了证书的错误,那就得重点去看一下CA证书了。
1、检查代理监听是否运行
进到【Settings】→【Tools】→【Proxy】里面,去查看一下【Proxy listeners】里的地址、端口,还有它是不是处在Running的状态。
浏览器那边设置的代理端口,一定要和正在监听的端口是一样的。如果8080这个端口已经被别的程序给占了,那可以新建一个监听端口,但是浏览器那边的配置也得跟着一起改。要是用手机或者别的电脑来抓包,那监听的接口还不能只绑定在本机回环地址上面。
2、安装并信任Burp CA证书
外面的浏览器已经走过Burp以后,可以去访问一下Burp给的那个证书下载页面,把当前这个项目正在用的CA证书导出来,然后再把它装到浏览器或者系统的受信任根证书区域里面去。
Burp得用它自己的CA,去给不同的HTTPS站点生成临时的证书。证书要是没有安装,或者装的位置不对,又或者还留着以前那个Burp实例生成的证书,那浏览器就可能会提示说连接是不安全的,然后就把请求给停掉了。Burp自己带的那个浏览器,一般是不用手动去做这一步的。
3、检查应用是否绕过系统代理
有一些桌面上的客户端、手机上的应用,还有浏览器里面的某些组件,是不会去走系统代理的,这样普通的Proxy listener就看不到它们的流量了。这个时候,就要去检查一下应用它是不是支持手动设置代理,也要确认一下目标域名,有没有被代理的排除规则、VPN,或者是别的抓包工具给接管了。对于不支持代理的客户端,Burp提供了一种叫Invisible proxying的方式,但这个需要额外去处理流量的转发、监听的端口,还有域名的解析,在还没有把网络结构弄清楚之前,不太适合直接就去把它给打开。
三、HTTPS请求进入Burp后为什么仍然看不到
有的时候,请求其实已经是走过Burp了的,但是因为过滤条件、作用域,或者是应用自己的一些安全机制,看起来还是会让人觉得好像没有抓到一样。这个时候,应该先去看一下完整的历史记录,然后再去判断,是不是特殊协议,或者是证书校验那边出的问题。
1、清除HTTP history筛选条件
打开【Proxy】→【HTTP history】,去检查一下顶部的那些过滤设置,看它是不是把不在作用域内的请求、图片、脚本,或者是某些特定的状态码,给隐藏掉了。
在排查的时候,可以先暂时把过滤的条件放宽一些,看看目标域名到底有没有出现过。请求如果明明存在,但是没有停在Intercept页面,那一般就只是拦截被关掉了,或者规则没有匹配上,并不是说代理这边失败了。
2、检查WebSocket流量
有一部分网页的功能,是通过WebSocket来传输数据的,普通的HTTP history只会把握手的那一次请求给记下来,后面的那些消息,是要到【Proxy】→【WebSockets history】里面才能看得到。
要是碰上了那种实时聊天、消息推送,或者在线协作的功能,就应该把HTTP请求和WebSocket消息放在一起检查,不要只盯着普通请求的那个列表去看。
3、识别证书固定问题
有一部分手机应用,会在程序的代码里面自己去检查服务器的证书,就算系统已经信任了Burp的CA,这个连接还是有可能被应用给拒绝掉。这种情况,一般表现出来的就是,用浏览器去抓包是正常的,但是某个特定的应用却怎么也连不上。应该先去分清楚,到底是证书固定、双向TLS,还是客户端网络配置造成的,不要一碰到HTTPS抓不了的情况,就觉得全是Burp证书没有安装好。
总结
Burp Suite Proxy抓包的时候,比较建议的做法是,先拿它自带的内置浏览器,去把监听和请求记录验证一下,然后再去配置外部的浏览器。当抓不到HTTPS请求的时候,就按着顺序,去检查Proxy listener、浏览器代理、Burp的CA证书、HTTP history的筛选条件,还有应用是不是绕过了系统的代理。要是浏览器的流量是正常的,偏偏某个特定的客户端不行,那就要再去判断一下,是不是WebSocket、双向TLS,或者是证书固定这些情况,不要反反复复地,只去改同一项代理设置。
