SSL证书回想

0x00 背景

看到这个漏洞https://blog.doyensec.com/2018/05/24/electron-win-protocol-handler-bug-bypass.html的时候,里面提了一句chrome的–host-rules参数,这个参数很厉害,如果你按如下方式启动chrome:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=1 --host-rules='MAP * www.google.com'

等于是把所有网站都重定向到www.google.com,这时你访问任何一个网站,都会返回谷歌的网站,最厉害的是,chrome不会显示证书错误!

那么如果我们是用dns spoofing来实现重定向,chrome会不会显示ssl证书错误呢?

0x01 dns spoofing

首先安装dnsmasq:

brew install dnsmasq
sudo cp $(brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist$) /Library/LaunchDaemons/
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

然后在/usr/local/etc/dnsmasq.conf里写入以下项:

server=8.8.8.8
cname=www.nevermoe.com,www.google.com

并在/etc/hosts/里加入:

172.217.25.68 www.google.com 

172.217.25.68为www.google.com原本的地址。注意这一步是必须的,否则dnsmasq的cname设置不会生效。

重启一下dnsmasq,

sudo launchctl stop homebrew.mxcl.dnsmasq
sudo launchctl start homebrew.mxcl.dnsmasq

确认dnsmasq成功运行了:

sudo nmap -sU localhost -p 53

这时我们就可以dig一下:

$ dig www.nevermoe.com

; <<>> DiG 9.10.6 <<>> www.nevermoe.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27575
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.nevermoe.com.      IN  A

;; ANSWER SECTION:
www.nevermoe.com.   0   IN  CNAME   www.google.com.
www.google.com.     0   IN  A   172.217.25.68

看到www.nevermoe.com被成功重定向到www.google.com。接下来我们还要将网络的dns服务器设置为本机127.0.0.1,这个在mac上的network中很容易设置,就不多说了。设置完后我们正常打开chrome,访问www.nevermoe.com,可以看到证书是无效的:

这说明了chrome的–host-rules非常强力,不是一般dns spoofing所可比拟的。

0x02 注意

注意chrome会使用你主机的dns配置来解析域民,在chrome://net-internals/#dns中可以看到chrome使用的dns服务器地址。chrome不会完全使用/etc/hosts配置,这就是我们为什么要费劲弄一个伪dns服务器的原因。