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

黑水 · 2016年01月06日 · 最后由 黑水 回复于 2016年10月18日 · 14273 次阅读
本帖已被设为精华帖!

准备:

先看这篇文章,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 · 2016年01月07日 Author

#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 · 2016年01月10日 Author

#20 楼 @chenhengjie123
哪些可以?

黑水 #23 · 2016年01月10日 Author

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

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

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

涨姿势了!

好文呀

学习了!

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

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

黑水 #31 · 2016年05月18日 Author

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

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

黑水 [该话题已被删除] 中提及了此贴 10月18日 14:41
黑水 #34 · 2016年10月18日 Author

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册