网上已经有许多教程了,大部分都差不多,如果是首次安装并且步骤齐全的话,应该是比较容易抓到HTTPS包的。但是我找的教程不全,导致后面踩了很多坑,故记录一下以免后人踩坑。顺便科普了一下HTTPS和中间人攻击,如有误欢迎指出~
修正:本文中的HTTPS握手过程仅为小白科普所用,旨在用最简单的方式描述整个流程,真实场景要更为复杂,大家如果想要了解更多可以查找相关书籍资料哦。
首次装fiddler过程
1.官网下载fiddler安装包,并安装。
2.安装完之后,设置fiddler的HTTPS代理,如图,把所需要的勾选上。并且在Connections里面把Allows remote computers to connect。
Allows remote computers to connect:因为安卓连pc为远程连接,所以要勾选上。
Capture HTTPS CONNECTs:抓取HTTPS连接。
Decrypt HTTPS traffic:对HTTPS包解码。
Ignore server certificate errors:忽略服务器证书错误,勾选了后面就不用自己一个个手动确认啦(当然,这个个人考虑是否选择)
3.设置PC浏览器上的HTTPS代理为:127.0.0.1:8888(fiddler默认代理)
这个我是在cmd里面直接 set https_proxy=127.0.0.1:8888 设置的,如果你没有设置,打开fiddler后它会有提示,点击一下它就会帮你设置了。
4.pc和手机连接同一个局域网,并设置手机的代理为pc的ip以及fiddler的端口号(默认为8888)
手机的代理设置(安卓):在连接的wifi,长按,然后里面会有代理设置,填上对应的ip和端口号就行了。
5.在手机上安装fiddler证书
进行了上述配置,在浏览器中打开输入代理服务器IP+:8888,浏览器会打开如下页面:
然后点击下面的FiddlerRoot certificate,安装证书。
6.打开fiddler,在手机上访问https的网页或者程序,fiddlers输出抓包内容,即为成功。
当然了,我肯定没成功,不然我就不会一个晚上都在找为什么不对了。那么上面缺失了什么步骤呢?
失败原因
1.没有使用fiddlercertmaker去生成证书
安卓和IOS设备无法使用fiddler默认生成的HTTPS拦截证书,要解决这个不兼容问题,要使用此证书生成插件,来生成和IOS/安卓兼容的证书。
2.在发现自己抓不到HTTPS包后,重装,但没有把证书卸载干净
第一次重装之前,我把手机上的证书卸载了,电脑上的证书没有卸载。包括浏览器上的证书、电脑中的认证证书、还有电脑中保存的关于fiddler使用的RSA生成的东西。导致后面,电脑和手机的证书不一致,无法抓取HTTPS包。
安装fiddler的正确姿势
1.官网下载fiddler安装包,并安装。
2.安装fiddlercertmaker,使用,并重启fiddler,保证fiddler后面生成的证书是由此插件生成的。
2.安装完之后,设置fiddler的HTTPS代理,如上图,把所需要的勾选上。并且在Connections里面把Allows remote computers to connect。
3.在Tools->Options->点击Actions,选择export Root certificates to Desktop,然后把证书导入到浏览器中。以保证浏览器中的证书和手机端的证书是一样的。
3.设置PC浏览器上的HTTPS代理为:127.0.0.1:8888(fiddler默认代理)。
4.pc和手机连接同一个局域网,并设置手机的代理为pc的ip以及fiddler的端口号(默认为8888)。
5.在手机上安装fiddler证书。
6.打开fiddler,在手机上访问https的网页或者程序,fiddlers输出抓包内容,即为成功。(分享一个成功页面)
浅析fiddler抓HTTPS包原理
我装了这么久的原因,就是没有意识到电脑端和手机端的证书要一致。如果我理解了fiddler的原理,大概一下子就找到问题所在了。所以在这里,我来分析一下fiddler是怎么做到把https包拿到并解析的。
https协议建立连接过程
要想知道fiddler是如何做到抓https包的,首先我们要来看看https的建立连接的握手过程是怎么样的。https协议,建立连接时使用的是非对称加密(SSL/TSL握手),连接建立起来后传输时使用的是对称加密。最后确认的密钥就是用来对称加密的密钥。下图是建立SSL握手的过程:
流程比较简单,主要复杂的地方在于两个点:client如何通过校验数字证书来确定server是真实可信的?双方到底是如何确定最终使用的密钥的?
数字证书的校验
CA证书内含有:数字签名、hash算法、认证机构、公钥等。
数字签名:其实质就是server使用私钥加密的一个hash串。
认证机构:颁发证书的机构,client用此来确认这个证书是有效的。
整个认证过程是怎么样的呢?
首先,client拿到证书,检验颁发机构是否可信。若可信,它会用公钥解密数字签名,得到一个hash串A。然后用hash算法加密hash串A,得到hash串B。如果hash串B和数字签名完全相同,说明数字签名没被篡改,server是真正要通信的server,校验通过。
文字描述有点混乱,它们的关系如下图。
密钥的确认
前面的握手握手过程中,有三个神秘的随机数。它们的作用就是用来生成最终的密钥。为什么要用随机数呢?因为本身握手建立过程传输的数据是明文的(除了最后一个随机数用公钥就加密),而多个随机生成的密钥不容易被暴力破解。
上图中双方确认密钥的过程其实是极度简化了,client和server在这时会互相发一条通知消息和一条用密钥加密的消息。
通知消息:用来通知对方后续的消息都用密钥加密。
用密钥加密的消息:双方都会给对方发送第一条用密钥加密的消息,如果对方能够解密出来,说明双方协商的密钥是一致的,握手完成。
fiddler抓包原理
如果要简单明了地说明fiddler的角色,只要三个字,伪装者。fiddler在client面前,就伪装成真正的server;在server面前,就伪装成真正的client。它通过在握手过程中的双向伪装,拿到client和server通信用的密钥,这样就能解密得到它们的通信消息了。
如果要说明fiddler的真正角色,也很简单,fiddler干的事实质就是一个典型的中间人攻击。问题来了,什么是中间人攻击?
中间人攻击
看一下wiki对中间人攻击的定义:
中间人攻击(英语:Man-in-the-middle attack,缩写:MITM)在密码学和计算机安全领域中是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
仔细瞅瞅,fiddler干的不就是这事吗?(fiddler内心:我冤枉啊!)但问题又来了,这个中间人也不好当,他得骗过client和server,而client又是通过数字证书来校验的,他又是怎么做到的呢?
fiddler充当中间人过程
过程大概如图示,中间的关键部分说明一下。
fiddler的伪造证书是如何生效的
当然是我们手动信任的啦。我们在安装fiddler的时候,fiddler会生成证书,这个时候我们就要在手机和pc上自行安装和信任证书,让fiddler当一个合法的中间人。
这也是fiddler和其他的中间人攻击的不同:真正的中间人攻击,是通过病毒、漏洞等一些不合法的行为在用户端偷偷地装上自己的不合法证书,从而来达到攻击的目的。
所以呀,大家不要随便连陌生wifi,下载什么乱七八糟的软件,不然很可能会被装上乱七八糟的私发证书哦。
以上就是全部内容啦,感谢观看我的fiddler小白历险记(鞠躬),感兴趣的同学还可以继续找一下怎么使用fiddler的插件willow来配合食用,以及中间人攻击的多种手段,防御方式等等~