https劫持理解
1 minute read
0x00 Link
1.https://www.zhihu.com/question/22795329
2.http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html
0x01 https与ssl
ssl:secure socket layer安全套接层,https,ftps等都是建立在ssl基础上
https协议:建立在ssl协议之上的http协议[http over ssl](http协议建立在tcp协议之上)
0x02 ssl/tls协议握手过程
1)公钥私钥证书
一般来讲:
证书文件后缀:.crt,.pem
私钥文件后缀:.key
(这篇文章里说的"嘗試對 SSL Private Key 下手"应该是错的,那应该是SSL Public Key,
http://devco.re/blog/2016/04/21/how-I-hacked-facebook-and-found-someones-backdoor-script/)
证书请求文件:.csr
公钥加密的数据只有私钥能解开,同样,私钥加密的数据用公钥可以解开
公钥存放在证书文件中,证书相当于锁开着的箱子,私钥相当于箱子的锁的钥匙,ssl通信中的一方A利用证书中的公钥和某种协商
好的加密算法将要发送到另一方B的数据加密,这个动作相当于把东西放进箱子并将锁关闭,B收到被锁的箱子后用私钥打开锁就看
到明文了,实现了加密通信.
更详细情况可见:
http://www.fzb.me/2015-1-15-openssl-rsa.html
https://www.zhihu.com/question/29620953
2)ssl/tls协议握手过程
0x03 几种https会话劫持工具
0xa sslstrip
详情:https://software.intel.com/zh-cn/blogs/2011/10/11/ssl
用户输入www.baidu.com,通过arp欺骗使得browser不会访问到真正的http://www.baidu.com,而http://www.baidu.com的内容是
跳转到https://www.baidu.com,也即通过arp欺骗将browser的会话由https劫持成http,并由中间人与www.baidu.com服务器正常
https通信
缺点:使用有局限,要求用户输入url的时候没有输入https[一般用户不输入http或https,而是直接输入www.baidu.com]
优点:受害用户在访问www.baidu.com的时候browser不会提示证书不可信
0xb sslsplit
sslsplit与cain几乎相同,只是sslsplit的证书是攻击者通过如下命令手动创建的
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
而cain的证书是中间人向真实服务器主动获取并修改的
0xc cain
中间人与browser和www.baidu.com服务器都进行正常ssl握手,中间人通过arp欺骗将自己伪装成www.baidu.com服务器,劫持受害
机器的browser的https://www.baidu.com/login.php的请求,中间人向www.baidu.com服务器请求证书,获取证书后将证书中的公
钥修改成中间人自己设置的公钥(中间人一般无法得到www.baidu.com服务器的私钥,私钥保存在www.baidu.com服务器上),并将
修改后的证书发给browser,browser看到证书可疑,提示用户证书可疑,用户不懂,选择将目标https://www.baidu.com添加到可信
任列表,之后browser正常请求https://www.baidu.com/login.php,与中间人进行ssl握手,此时的browser发给中间人的加密的数
据是用中间人修改过的公钥加密的,中间人有这个公钥的私钥[因为这个这个公钥私钥对是中间人伪造生成的],于是中间人用私
钥解密browser发过来的数据,再与www.baidu.com服务器走正常的ssl流程,也即将这解密后的数据重新加密发给www.baidu.com
服务器.而中间人在得到www.baidu.com返回的数据后将它解密后再加密发给browser,browser再正常地用与中间人ssl握手要用
的密钥来解密这个加密后的数据.
也即整个过程中,www.baidu.com服务器并不知道有中间人的存在,一直把中间人当作正常的browser,而中间人能和
www.baidu.com服务器进行正常的ssl握手(https通信)是因为中间人从browser那里得到解密后的数据,知道自己要访问什么内容
,于是正常走https协议访问.而browser与中间人的通信也一直是正常的ssl握手,只是对browser来讲,对方"服务器"(中间人)的
证书有问题,因为对方的公钥好像被修改过,无法被受害机器的browser验证为可信证书.
缺点:欺骗过程中browser会提示受害用户证书不可信
优点:一般用户会选择将要访问的网站加入到可信任列表,使得https劫持成功
0x04 私钥文件的用途
私钥的用途1:
如果中间人通过web等手段进入了www.baidu.com服务器,取出www.baidu.com的私钥,然后再进行https劫持,这样brower在访问
www.baidu.com的时候就不会发现证书有问题了,这样中间人也不用伪造证书,直接用www.baidu.com的证书,将证书发给
browser,再与browser进行正常ssl握手即可,所有加密的数据都可以由中间人解密,因为中间人有www.baidu.com的公钥和私钥.
其中,公钥在证书中,公钥用来加密发出的数据,私钥在中间人机器上,私钥用来解密browser发过来的数据.
私钥的用途2:结合wireshark利用得到的私钥解密ssl/tls流量
https://support.citrix.com/article/CTX135121
0x05 其他
数字签名和数字证书与公钥的关系理解 1,2
数字证书由权威机构(CA, Certificate Authority)颁发,里面包含有服务器的公钥.
服务器公钥要保证可信度,需要通过CA 认证,CA将服务器公钥用CA 的私钥加密生成数字证书,然后客户用CA的公钥解开数字证书
得到服务器的公钥,该服务器公钥是可信的.
获取指定服务器公钥命令:
openssl s_client -connect the.host.name:443 | openssl x509 -pubkey -noout