在前期博文《万字图文详解HTTPS协议通信过程,结合抓包实战解析带你一次看透HTTPS!》中,我们知悉HTTPS通信内容是用会话密钥加密的,但不少细心的读者存在疑问:为何对于使用HTTPS协议的站点,在Burp Suite中拦截到的数据包却是“明文传输”的?如下图所示,这又是什么原理呢?那公司电脑的HTTPS流量是否也被监控了呢?…
为了让大家容易理解文章内容,博主先举一个实际案例进行演示说明,基于实际情况再进行分析解疑。
1. 实测场景说明
登录到百度首页(地址:https://www.baidu.com),点击右上角的登录按钮,输入用户名和密码后执行登录,我们接下来就拦截当前登录请求,看看用户名和密码到底是什么形式传输的。
这里注意一点,百度系网站执行登录时会统一跳转到百度账号认证网站https://passport.baidu.com进行登录认证,可在CMD窗口中执行ping命令,获得认证站点的IP地址36.155.132.75
,记住此IP,接下来会用到。
2. Wireshark直接抓包https通信内容是密文根本看不懂
在博主前期文章中已经介绍了HTTPS的工作原理,我们知道所有HTTPS传输的报文信息在Wireshark中均标识为Application Data。
我们拦截了上面百度账号登录的数据包,在WireShark的显示过滤中输入ip.dst==36.155.132.75
过滤出我们发送给百度认证服务器的数据包记录,可以发现所有请求均为密文,我们随便打开一个Application Data数据包,内容如下:
继续选择任意协议为TLSv1.2的数据包记录后右击选择『追踪流(Follow)』->『TCP流(TCP Stream)』,发现数据均经过加密,我们根本看不懂:
注:如果对Wireshark工具不会使用,可以参阅《通过15张图带你掌握网络抓包工具Wireshark必备使用技巧》快速入门上手。
实测结论1:如果直接使用WireShare嗅探HTTPS协议的数据包,我们就会看到TLS携带的Data都是密文,是无法拿到明文数据的。
3. BurpSuite抓包https通信内容是明文可以看懂
接下来针对以上场景,我们使用Burp Suite工具抓包,抓包前需要先跳转到『代理』>『拦截』选项卡,将『拦截切换』设置为“拦截”启用状态。
单击『打开浏览器(Open browser)』启动Burp内置浏览器,该浏览器已预先配置为开箱即用。当然,大家也可以拦截自己电脑上安装的浏览器请求,不过这需要多做一些额外配置(如安装Burp的CA证书、配置浏览器代理等)。不论哪种方式,都不会影响我们这次要介绍的主要内容。
打开浏览器后,地址栏输入我们实测的网址,访问成功后可以看到地址栏最前面多出了一个Burp的图标,点击后可以看到提示:当前百度站点正在被Burp Suite代理。
在上图右上角选择登录,可以在『代理』>『拦截』选项卡上看到被拦截的登录请求。
上面拦截到的密码其实是经过前端处理后的,我们查看前端代码其实可发现该HTTP站点确实对账户密码做了前端加密后再进行传输,对应的加密密钥在前端代码中也可以看到。
在前端对密码进行加密,即使https流量被嗅探后也无法解密得到原始密码。可见百度对安全考虑还是比较细致的。
到这里我们已经非常确认Burp Suite是可以解密HTTPS流量的,所以Burp Suite一定是有解密的密钥,具体是如何做到的呢?
实际上Burp Suite就是模拟了MITM(Man in the Middle,中间人)攻击,你还记得上面地址栏看到默认安装的Burp Suite CA证书吧。好奇的你也一定会问为什么需要安装Burp的CA证书?
为了拦截浏览器和目标web服务器之间的流量,Burp会切断浏览器与目标站点的HTTPS连接(模拟中间人攻击)。因此,如果我们想在Burp运行时尝试访问HTTPS URL,我们的浏览器将检测到它没有直接与真实的web服务器通信,会显示安全警告。
为了防止此问题,Burp会为每个主机生成自己的TLS证书,并由自己的证书颁发机构(CA)签名。此CA证书在第一次启动Burp时生成,并存储在本地,此证书对应的私钥也会存储在本地计算机上(也可以在界面上单独导出)。为了在HTTPS网站上最有效地使用Burp Proxy,需要将此证书作为受信任的根安装在浏览器的信任存储中(Burp的默认内置浏览器中已经帮我们做好了这一步操作)。
Burp将使用此CA证书为你访问的每个主机创建并签署TLS证书,允许你正常浏览HTTPS URL。最后我们就可以使用Burp查看和编辑通过HTTPS发送的请求和响应,就像处理任何其他HTTP消息一样。
实测结论2:Burp Suite能抓到HTTPS协议的明文内容是因为Burp Suite在浏览器上安装了自己的CA证书,并作为中间人(MITM)分别与客户端、服务端建立起了HTTPS通道,作为中间人,Burp Suite自然能够获取到所有的明文内容。具体原理可以参见下图:
说明:在浏览器上提前安装并信任Burp CA证书是Burp实施流量代理的关键环节,否则客户端不信任中间人,就无法实施HTTPS流量拦截了。
扩展问题1:我们知道,浏览器在接收到服务端发送回来的密文数据之后,会使用存储在本地的秘钥对数据进行解密。那么,WireShark能否也利用此秘钥来实现HTTPS站点的密文自动解密呢?
扩展问题2:公司/企业考虑到安全防护和信息泄露等问题,一般也会通过代理方式(类似于Burp)解密HTTPS流量,你的所有上网行为(包括各个社区、平台等的用户账户、密码等)都是可监控的。快来看看你在公司电脑上访问外部Https网站时,浏览器地址栏前面的证书是不是你公司自己颁发的吧?如果是,你的上网行为一定要谨慎,别乱看一些乱七八糟的站点,背后有一双👀在盯着呢!
4. 参考链接
- https://portswigger.net/burp/documentation/desktop/external-browser-config/certificate