https劫持理解

on under web
1 minute read
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
https, ssl, mitm
home
github
archive
category