说明
按照《Kali Linux2 网络渗透测试实践指南 第二版 》第12章操作 仅供学习讨论使用,请勿进行非法操作
基于HTTPS的中间人攻击
HTTPS的加密过程的8个步骤中,最关键的是第3个步骤中服务端发送的数字证书。这个数字证书有两种来源:一种是由服务端自行生成的,这种情况下并不能保证通信的安全(因为数字证书很容被调包); 另一种是由权威的证书颁发机构(Certificate Authority CA)所颁发的,这种情形下安全性才得到了真正的提示。(注:图来自本书作者的PPT) 服务端如果想要获得数字证书,就需要向证书颁发机构申请。证书颁发机构生成一对公钥和私钥、一个服务端端数字证书,并使用私钥对数字证书进行加密,该私钥不是公开的。 证书颁发机构向服务器A颁发包含CA公钥的数字证书,并向客户端提供CA公钥。证书颁发机构的工作原理如下图所示:(注:图来自本书作者的PPT)
由于专门用来加密数字证书的私钥掌握在证书颁发机构手中,即使服务端向客户端发送的数字证书被黑客截获,他们也只能解读,无法篡改。因为篡改数字证书后, 用户就无法使用证书颁发机构提供的CA公钥对数字证书进行解密。黑客获得的数字证书中的CA公钥也只能用来加密,不能解密,这样他们也无法获悉服务端和客户端加密的信息。即使使用了数字证书机制,仍然可能会出现以下问题导致完全机制失效。(注:图来自本书作者的PPT)
mitmproxy的安装与启动
mitmproxy是一个可以实现中间人攻击的Python模块,这个模块同时也提供了可以执行的程序。它的实质是一个可以转发请求的代理,保障服务端与客户端的通信,可以查看、记录其截获的数据或篡改数据。 为了实现伪造数字证书的目的,mitmproxy建立一个证书颁发机构,该机构不在你的浏览器的“受信任的根证书颁发机构”中。一旦用户选择了对其信任,它就会动态生成用户要访问网站的数字证书,实际上相当于证书颁发机构已经被黑客控制。Kali 中预先安装了mitmproxy。通过mitmproxy、mitmdump、mitmweb都可以完成mitmproxy的启动。它们提供了不同的操作界面,但功能一致,且都可以加载自定义脚本。在命令行中使用sudo mitmweb命令,可以打开mitmweb的工作界面(工作在8081端口)。
使用mitmproxy解密本机流量
这种情形指的是使用mitmproxy来解密从本机发出的流量,也就是说将浏览器的代理设置为127.0.0.1:8080,通常应用程序的测试人员会采用这种手段。此外,当黑客控制了用户计算机之后,也会采用这种手段来解析那些加密的流量。
导入证书
需要为浏览器手动设置代理, 这里以Firefox为例,通过“选项”—>“网络设置”----->“设置”,然后添加这个代理,在命令行功中使用mitmweb命令启动mitmproxy。然后访问mitmproxy提供的证书颁发机构下载数字证书,证书下载完成以后就可以导入了。 浏览器地址栏输入 about:preferences#privacy , 拉到最底下,找到security,点击 View Certificates... 按钮
测试
点击提交HTTPS网站的后, 返回到mitmweb的工作界面,你可以看到所有的内容都是明文,如下图所示:(注:图来着本书作者的PPT)
我自己访问了百度的登录界面 可以看到中间人攻击时对应的HTTPS使用的密码算法
使用mitmproxy与中间人攻击协同工作
这种情形指的是使用mitmproxy来解密从其他设备发出的流量。黑客首先运行中间人攻击程序,将它的全部流量劫持到自己的设备上。 因为mitmproxy只能运行在8080端口,所以需要将劫持的流量转发到这个端口上。考虑到mitmproxy用来处理HTTP、HTTPS产生的流量,所以我们只需要将目标端口为80和443的流量过滤出来,然后转发到本机的8080端口。这一点在Linux操作系统中使用iptable可以很容易做到。下面给出转发的命令:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080
上面的命令要在root权限下执行。如果是在Windows操作系统下,由于没有iptables,实现这个操作会变得十分困难,如下图所示: 另外,我们还需要想办法在受到中间人攻击的设备上导入mitmproxy的数字证书,这样在访问的时候才不会出现数字证书错误的提示。
|