五种工具理解SSL/TLS中间人攻击

目录

  • 一、ettercap实现中间人攻击
  • 二、burpsuite实现https抓包的原理
  • 三、sslsplit实现SSL/TLS报文解密
  • 四、mitmproxy实现中间人劫持SSL/TLS流量
  • 五、sslstrip实现中间人攻击
一、ettercap实现中间人攻击

1、实验环境
五种工具理解SSL/TLS中间人攻击_第1张图片
2、操作步骤
【错误】在kaili机192.168.253.151上,开启路由转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward	#开启路由转发功能

【更正】此处开启路由转发功能步骤错误。由于ettercap的sniff模块提供了三层包转发的机制,因此此处无需开启操作系统路由转发功能。经实验证实,即使我们执行了上面路由转发功能的命令,在ettercap启动后,再cat命令查看,其值仍为0,说明开启ettercap后操作系统的路由转发功能也会被禁止。

打开ettercap-graphical,Sniff–>Unifiled
五种工具理解SSL/TLS中间人攻击_第2张图片
Hosts–>scan for hosts;192.168.253.2 add to Target1,192.168.253.129 add to Target2;Start–>Start sniffing
五种工具理解SSL/TLS中间人攻击_第3张图片
此时在win7上查看arp缓存表,发现192.168.253.2(网关)与192.168.253.151(kali)的mac地址相同,说明欺骗成功。
五种工具理解SSL/TLS中间人攻击_第4张图片
在kali上抓arp reply包得到报文(点击下载),可以看到wireshark专家系统已经报警(duplicate IP address detected for…),同时可以找到实验环境拓扑图中的对应欺骗报文。
五种工具理解SSL/TLS中间人攻击_第5张图片
在win7打开浏览器,访问https://www.baidu.com,同时在kali过滤ssl抓包,报文内容(点击下载)。
五种工具理解SSL/TLS中间人攻击_第6张图片
可以看到,上述访问www.baidu.com的tcp报文其实是被TLSv2加密了的,那么如果即使我们使用中间人攻击劫持了会话,但看不到报文内容,实际上没有达到中间人攻击的目的,那问题来了,应该如何解密TLS加密的报文呢?,为了深刻理解其中原理,我们还是先来了解一下brupsuite抓取https报文的原理吧。(返回目录)

二、burpsuite实现https抓包的原理

1、设置好burpsuite代理后,从http://burp页面将burp证书导出,再将证书导入浏览器中,代理设置抓https包,就OK了,类似的设置文章网上很多,但burpsuite抓包的原理是什么的?我们用一张图来解释:
五种工具理解SSL/TLS中间人攻击_第7张图片
2、上图可以看到,实际上burpsuite此时不光是一个代理的功能,它还是一个自签名的私有CA,相关知识可以看《OpenSSL实现私有CA》,当PC请求baidu时,burpsuite会返回PortSigger CA颁发的伪造的baidu的证书给客户端,PC客户端前期由于导入了信任CA的根证书,因此就信任了这个伪造的baidu证书,从而实现了PC与burp之间的ssl加密通信。然后,burp再与真实网站服务器www.baidu.com进行正常https通讯,把pc的请求直接转发给baidu,在中间形成一个基于https的代理,从而获取pc与baidu之间通信的解密报文。
3、我们来看一下PortSigger CA的根证书长什么样,打开浏览器,隐私。
五种工具理解SSL/TLS中间人攻击_第8张图片
点击查看CA的自签名证书详情(返回目录)
五种工具理解SSL/TLS中间人攻击_第9张图片

三、sslsplit实现SSL/TLS报文解密

1、SSL/TLS的简单历史
SSL(Secure Socket Layer)是网景公司开发的一种协议,专门用户互联网数据传输加密,由于有heartbleed、poodle、beast等严重漏洞,1999年被新的TLS(Transport Layer security)协议取代。ssl漏洞可以通过sslscan命令进行检测。

sslscan --tlsall www.baidu.com
sslscan --show-certificate --no-ciphersuites www.baidu.com

2、sslsplit解密ssl操作过程
有了上面burpsuite解密https流量原理的知识,我们就会知道,sslsplit的工作原理和burpsuite其实是一样的,也是在中间人处生成一个私有CA,然后给客户端发送伪造证书,形成基于https的中间人。那么,我们的这次的实验就在第一部分ettercap实现中间人攻击基础上来操作。
首先,在目录/root/test下,通过openssl命令生成私钥,私有CA的自签名证书。

openssl genrsa -out ca.key 2048	#生成私钥ca.key
openssl req -new -x509 -days 1096 -key ca.key -out ca.crt #生成自签名证书ca.crt

然后,通过iptables将访问kali的80,443端口的流量转发到8080,8443端口

iptables -t nat -F #清空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

完成端口转发后,使用sslsplit命令监听本机的8080和8443端口

sslsplit -D -l connect.log -j /root/test -S logdir/ -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080


在win7访问一个https网站,会遇到如下情况,这里是不是和burpsuite很像。注意,此处要使用最新版本的sslsplit才能成功,当前为sslsplit 0.5.5版本,如果使用sslsplit 0.5.4,可能出现加密套件过期等原因无法使用证书。
五种工具理解SSL/TLS中间人攻击_第10张图片
点开查看根证书细节,正是我们在自签名证书时候填写的信息。
五种工具理解SSL/TLS中间人攻击_第11张图片
点击接受风险
五种工具理解SSL/TLS中间人攻击_第12张图片
正常打开页面,但可以看到证书不安全
五种工具理解SSL/TLS中间人攻击_第13张图片
此时,我们再回到kali的/root/test/logdir目录,使用grep命令过滤这条记录,可以看到本是https传输的加密数据已经被解密为明文。

至此,sslsplit解密ssl流量的工作已经做完了,但是我们还有一些疑惑,如果这样做劫持,被欺骗的win7在访问网站时,浏览器证书上明显的显示不安全,还要用户自己去点击接受,才能达到劫持目的,那么实战中应该如何解决这个问题呢?很容易想到,我们可以通过渗透的手段,在win7上安装好伪造的根证书,就和burpsuite导入证书一样。这样,用户在访问时候就不会弹出不安全点击接受的页面,但是url上的不安全提示还会一直保留,因此,这种sslsplit劫持ssl流量的方法,看似很聪明,实际却有些掩耳盗铃。(返回目录)

四、mitmproxy实现中间人劫持SSL/TLS流量

iptables设置转发

iptables -t nat -F #清空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 8080

启动mitproxy

mitmproxy --mode transparent -w mit.log

显示界面,相比sslsplit对人更加友好,可以点开查看http包详情。(返回目录)
五种工具理解SSL/TLS中间人攻击_第14张图片
但此时firefox访问百度、淘宝等网站时会出现HSTS情况,无法继续。同时访问京东、腾讯等网页会出现网页显示不全的情况,很容易被受害者发现,因此在mitmproxy下不建议解密ssl流量。
五种工具理解SSL/TLS中间人攻击_第15张图片
在mitmproxy流量中插入beef钩子

mitmproxy --anticache --showhost -p 8080 --mode transparent -R ":~s::"
五、sslstrip实现中间人攻击

1、原理
sslstrip使客户端与中间人之间使用http协议交换数据,中间人与服务器之间正常使用https,如下图。
五种工具理解SSL/TLS中间人攻击_第16张图片
2、操作命令

iptables -t nat -F #清空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 8080
sslstrip -l 8080

3、这种方式简单暴力,除了http这个地方容易被发现,感觉也很好用,可惜的是kali2019中默认已经没有了sslstrip这个工具。(返回目录)

你可能感兴趣的:(渗透)