导语:一切似乎都符合规范,但应用程序还是不能正常工作? 没关系,我们发现的Burp代理调试HTTP(S)流量的方法绝对是最佳之一!它既不需要源代码访问,也不需要开发技能。如果你曾经开发过使用HTTP(S)API的应用程序,你可能遇到过一些情况,比如
一切似乎都符合规范,但应用程序还是不能正常工作? 没关系,我们发现的Burp代理调试HTTP(S)流量的方法绝对是最佳之一!它既不需要源代码访问,也不需要开发技能。如果你曾经开发过使用HTTP(S)API的应用程序,你可能遇到过一些情况,比如服务器响应400 Bad Request,或者应用程序没能解析对抛出带有未知消息异常的回应,比如Unterminated string at line 1 column 57345,我们不知道哪个地方出现了错误。应用程序各方面都符合规范,但并不能正常工作。本文将介绍调试这种情况的一种方法—Burp代理。
什么是Burp代理?
官方解释:
Burp代理允许测试人员手动拦截浏览器和目标应用程序之间的所有请求和响应,即正在使用HTTPS时也可以进行拦截。事实上,我们可以使用Burp代理拦截应用程序之间的请求和响应!
局限性
由于Android Nougat(牛轧糖)版本会更改受信任的证书颁发机构,所以本教程可能不适用于所有情况。Burp官方推荐使用Android旧版本,而不是Nougat新版本或根版本。但是,如果目标SDK版本是23或更低,那么前面提到的改动就不适用。即使一个设备使用的是Android新版本,或者更新的版本或者是应用程序达到API 24或更新,该应用程序也可以提供自己的网络安全配置。此外,如果应用程序使用的是证书锁定,如,用okhttp锁定,HTTPS代理将不会起作用。
设置
首先,下载并启动Burp套件(有足够的免费的、共享版)。如果可以,将Burp加入防火墙白名单上。然后启用代理模块:
图1 Burp代理
选项窗口说明,机器运行代理必须从移动设备或正在测试的AVD中访问,它们可以在同一个WiFi网络中(无线客户机隔离必须被禁用)。在Burp选项中选择适当的接口,并使用OK按钮确认。现在代理正在运行,我们可以配置移动设备来使用它。访问WiFi设置,长按适当的SSID(网络名称)并选择修改网络选项。然后,输入如图2所示的代理IP和端口。
图2 SSID设置弹出
如果应用程序只使用HTTP,而不是HTTPS,弹出的是所有的设置。但是,在大多数现代应用程序中,需要遵循下一节。
HTTPS
我们需要更多的步骤来支持HTTPS。首先,在移动设备上打开浏览器应用,转到代理IP地址并下载CA证书:
图3 代理网页
然后,将CA证书文件的扩展名更改为.cer(如果在接下来的步骤中不起作用,用.pem作为扩展名)。
图4 CA证书文件重命名
最后,可以安装一个证书。转到安全设置,并找到从存储中安装证书的选项。由于设备制造商和Android版本的不同,该选项的确切位置和名称也会有所不同。选择一个合适的文件,并使用Wi-Fi凭证类型来安装证书:
图5 CA证书安装
检查结果
需要检查证书安装结果,所有选项都已经设置好后,下一步开始调试。我们将尝试检查官方Wikipedia(维基百科)应用程序的流量。在这里需要注意,我们不需要修改应用程序,甚至不需要源代码。只需打开该应用,然后转到Proxy -> Intercept 选项卡。重要的是,在后台运行的其他应用的流量也会被拦截。可以点击Forward使其他应用的流量通过。示例结果如图6所示。
图6 代理拦截选项卡
通过单击按钮上的拦截,可以禁用拦截功能。在这种情况下,代理将转发所有内容。请注意,是所有的请求和响应,无论是否被拦截或没被列入HTTP历史标签:
图7 HTTP历史
我们可以看到整个请求,包括HTTP头。除了检查HTTP头的内容,我们还可以进行以下几项行动:
删除——请求不会被发送到服务器
修改——内容的整个区域是可编辑的,内容可以改变
转发——请求(可能被修改)将被发送到服务器
开放的动作菜单——见图8。
图8 拦截行动
可以看到,Burp套件有很多特性(甚至还有有关于它的书籍)。对我们来说,最重要的一个特性是比较突出明显的。如果选择并转发请求,那么响应也将被拦截。在应用程序上使用之前还可以对其进行修改。
改变Burp套件
理论上可以改变Burp套件,下面开始进行实践。例如,可以在请求中修改与语言相关的头部。要实现这一修改,只需要编辑Accept-Language和Host标头。在本例中,英语(对应于设备上的语言环境设置)被改为法语:
图9 请求编辑
转发这样的请求后,获得一个英语应用程序,但是内容是法语:
图10 法语内容的英语应用程序
响应也可以被修改。例如,我们可以在文章中插入额外的文本:
图11 响应编辑
转发这类回应后,我们可以看到它在应用程序中得到了反映:
图12 被修改的维基百科
总结
HTTP(S)代理是一个非常强大的工具。它允许检查、拦截和修改请求和响应。这在应用程序调试中可能会有很大帮助,甚至可以在商店安装的应用程序上使用。如果HTTPS被用于Android新版本或更新版本,那么限制可能会存在,但是Burp代理将会被完善!Burp套件具有用户友好的窗口界面,使用起来非常方便。既不需要源代码访问,也不需要开发技能。