通用技术 [Burp Suite & Charles ] 双向认证 HTTPS 抓包

黑水 · January 06, 2016 · Last by 黑水 replied at October 18, 2016 · 11766 hits
本帖已被设为精华帖!

准备:

先看这篇文章,Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程
你会有配套的两个文件,一个后缀名.key另一个.crt
比如testerhome.keytesterhome.crt

生成p12文件

testerdeMac:forNginx tester$ pwd
/Users/tester/Downloads/forNginx
testerdeMac:forNginx tester$ ls
testerhome.crt testerhome.key
testerdeMac:forNginx tester$ openssl pkcs12 -export -clcerts -in testerhome.crt -inkey testerhome.key -out testerhome.p12
Enter Export Password:
Verifying - Enter Export Password:

Burp Suite设置

启动 Burp Suite
java -jar burpsuite_free_v1.6.32.jar

修改代理设置
Burp Suite设置

Charles 设置

版本:Charles 3.11.2
菜单 -> Proxy -> SSL Proxying Settings
CharlesSSL
CharleClient
CharleRoot
完成就可以抓到HTTPS了

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 33 条回复 时间 点赞

有个更简单的方法. 配置了burp suite的代理后. 直接访问 http://burp/cert 就可以下载一个der的证书.
把这个文件的后缀修改为cer然后导入android即可实现信任https

#1楼 @seveniruby 这个只能信任,还是需要配置testerhome的ssl证书的

#1楼 @seveniruby 但lz的方法的确麻烦了点。。。。

#2楼 @monkey 不影响抓包就行了吧

#4楼 @seveniruby 影响的,访问http://burp/certproxy是拿到一个 tool的common ssl证书,但和网站的ssl证书木有关系的。也就是说允许proxy tool访问https,但不能抓到加密的https的请求。不过。。客户端是这样的,我不知道web是不是也是这样的

#5楼 @monkey 证书这块的内容我一直没太搞明白.
我这是可以抓到加密后的https数据的.
我的猜测是端通过代理访问网站的时候, burp篡改了网站的证书, 并拿自己的证书返回. 所以只要手机端选择信任burp的证书, 那么所有的网站都可以被提示是信任的.

#6楼 @seveniruby 网站这快我不知道。但是手机端是这样的。
每个proxy都有单独的一个ssl证书,也就是.crt。装上这个crt就可以允许proxy tool去抓取https的请求和返回。但是经过app本身网关的那些https的请求必须要有app对应网关的https的crt才能够抓取的到的(也就是内网获取证书)。所以我不知道web是不是也是这个尿性。。。= =

#7楼 @monkey 延胜说的应该是正确的。代理https的原理是,代理服务器代替客户端和服务器建立SSL连接。这个代理服务器也不错,里边有一篇文章介绍了原理。 http://docs.mitmproxy.org/en/stable/howmitmproxy.html#explicit-https

#8楼 @skytraveler 但手机app内的https肯定不是这样的。。= =web的确不同

黑水 #10 · January 07, 2016 作者

#1楼 @seveniruby
用 burp suite 的证书,或者其他不是百度自己的证书,用浏览器或者手机百度(WebView)访问百度,需要用户点下“继续”才能抓到
explorer
mobilebaidu

陆金所 app 会提示连不到网络
百度云 app 的“关于我”那里有 HTTPS ,可以抓到(但觉得这有问题)

#9楼 @monkey
我猜 app 也可以做成和浏览器一样让用户点一下 “继续”,需要试一试

#10楼 @sanlengjingvv 嗯估计是的,不过我后来想了下,和https估计没有关系,是和这家公司的内外网有关系。。不过app本身比如RPC接口等走https,总感觉和web应该还有区别。。。

我之前也抓过 https 的包,简单研究过。说下我的理解。

app 是可以自定义证书的信任方式的。可以把证书 hardcode 到代码里验证,也可以使用系统的全局验证。

burpsuite 如果用自签名证书(self-signed) 的话,会把网络分割为两部分。一部分是 burpsuite 与服务端,用的是服务端的证书,另一部分是 burpsuite 与客户端,用的是 burpsuite 指定的证书。和 @skytraveler 说的一样。

所以从客户端(手机)看来 burpsuite 的证书默认是不可信的。至于如何把它变得可信,可以把证书手动加入系统可信证书列表(Android 和 iOS 都可以做到,步骤和 @seveniruby 说的差不多,下载个 cer 然后打开就能导入了),这个对于浏览器基本就没问题了,因为浏览器对 https 的信任是依赖系统信任的,系统都说可信浏览器当然觉得没问题。 而 app 是可以自定义证书验证的这部分流程的,安全性高的会只信任自己服务端的证书而不信任其它任何证书,安全性不高的和浏览器一样信任系统信任的证书。

至于 @sanlengjingvv 提到的警告窗口,一般 app 都会直接把这个异常吃掉,不会专门做个弹出窗。要做到应该也是可以的。

至于像正文截图中的那种方法,我目前没试过,不知道情况如何。因为我要抓的包一般都拿不到服务器私钥。。。

我找到的官方文档:
Android: http://developer.android.com/training/articles/security-ssl.html
iOS:https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/WorkingWithHTTPAndHTTPSRequests/WorkingWithHTTPAndHTTPSRequests.html

以前看过的一些参考文章:

how does https actually work
SSL常见证书格式和转换
Installing Burp's CA Certificate
HTTPS连接最初的若干毫秒

#12楼 @chenhengjie123 总结的很好. 讨论下就更清楚了.

Burp实际上就是用了Man-In-The-Middle这种方法. 通过让所有的传输都信任自己的证书来保证端是可以发送和接受包的. 然后是Burp默认信任所有的证书实现他于第三方的数据传输.
浏览器弹框其实就是校验证书然后提醒用户, Burp也校验了, 只是默认信任了.
如果通过代理打开网站还需要弹框, 就说明https proxy的配置没配置对.

#13楼 @seveniruby 嗯,所以客户端这边的话。如果是app层面的话,一个是proxy tool自己的ssl证书,一个就是app内协议对应的https的证书都安装到手机端就应该都能够抓到了

看到中间人了_^

恩 ssl欺骗大致就是这样。burp 实际就是中间件,伪造了ssl证书。 虽然可以欺骗,但伪造的证书毕竟不是ca发布的 过不了证书校验这关,所以才有提示需要用户去点继续。 当然咱们测试的自然是能抓到就行其他无所谓了

能成功因为楼主的中间人代理和服务端用的是相同的证书,APP在验证是不是自己服务器的证书的时候,是会验证通过的。如果楼主没有目标网站的证书密码。中间人代理方式是不一定能够抓取到https请求数据的。这也是https本身更安全的地方。想抓APP发出的https请求本来就不是那么容易的事。APP在握手过程中可以去验证服务器发来的证书,证书验证不通过就GG。而浏览器并不能只会做出一些警告提示。

... 中间人的证书就是伪造的。 如果能随便拿到ca颁发的证书那成什么了...

遇到ssl劫持 没有弹出安全风险的警告的话 可以报个ssl欺骗风险 备忘bug

是呀。APP想防御中间人并不难呀。没防御好的,只能算是BUG了。

#19楼 @furiousslade 伪造证书是最初级的吧,安全水很深的。不过伪造证书都没能识别出来,这个确实就是个漏洞了。
不过试过一些常用软件,大部分伪造证书识别不出来。只要系统信任它就信任。

黑水 #21 · January 10, 2016 作者

#20楼 @chenhengjie123
哪些可以?

黑水 #23 · January 10, 2016 作者

#22楼 @chenhengjie123
哪些软件系统信任它就信任

#23楼 @sanlengjingvv 这个。。。不大方便说。。。你可以自己试试。

#20楼 @chenhengjie123 对于安全,还是门外汉啊。

涨姿势了!

好文呀

学习了!

学习了~看来有了BurpSuite的证书也只是能够捕获到加密后https的数据,如果需要解密https数据的话还是需要服务器私钥才行?

学习了,Charles的30分钟限免略麻烦。

黑水 #31 · May 18, 2016 作者

#29楼 @snowmaster
一般对公网站是单向认证,所以有 Burp Suite 证书就可以了

楼主,Charles 单独不能抓https 包吗

黑水 [Topic was deleted] 中提及了此贴 18 Oct 14:41
黑水 #34 · October 18, 2016 作者

#12楼 @chenhengjie123 #29楼 @snowmaster
测试开发环境和生产环境不用一个证书,测试开发用可以自签名 CA,参考通过使用不受信任的证书配置 SSL

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up