中间人攻击(Man-in-the-Middle Attack,简称MITM攻击)是一种网络安全攻击,攻击者通过在通信的两端之间插入恶意节点,从而达到监视、篡改或劫持通信流量的效果
中间人攻击常见的手法包括:
ARP欺骗是中间人攻击方式中的一项经典攻击手法,该攻击方式可以令受害者错认为攻击者的MAC是网关MAC,从而将全部流量转发至攻击者主机。由于ARP协议的限制,该手段通常用于内网机器通讯时的地址转换。
原理:
手法:
效果:
网络拓扑如图:
受害者:192.168.243.128 (00-0C-29-12-DC-7A)
攻击者:192.168.243.129 (00:0c:29:f7:fb:a8)
提前开启抓包工具对虚拟网卡进行抓包
使用kali,工具命令如下:
arpspoof -i <网卡接口> -t <目标的内网地址> <网关ip>
执行命令后,可以在抓包软件中看出,攻击者发出了大量的 arp response 包,声明自己为网关地址(243.2)
此时我们再去攻击者设备上查看arp表,发现网关地址的mac已经被污染为攻击者的mac
劫持成功后,受害者所有的流量都会发送至攻击者,但攻击者默认并没有开始流量转发功能,所以会导致受害者无法上网
在受害者这里发送dns请求
攻击者这里就能看到了,说明流量成功的被转移到攻击者主机这里
为了能在劫持流量的同时,保证受害者正常上网,攻击者主机需要开启流量转发功能
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。
su - #改变用户为root,并使用root环境变量 echo 1 >/proc/sys/net/ipv4/ip_forward #将参数换为1
默认为0,0为不转发,1为启用流量转发
启用流量转发后,再操作受害者访问网页,可以发现能正常上网,且流量被攻击者截获
DNS劫持(DNS Spoofing)的原理、手法和效果如下:
原理:
手法:
效果:
总的来说,当我们有了控制受害者dns服务器或dns请求的权限时,便可进行dns劫持
这里可以使用AdGuard搭建dns服务器,搭建完成后把过滤规则、dns黑白名单关掉清空即可
https://github.com/AdguardTeam/AdGuardHome
假设前期我们已经完成了arp欺骗,成为了中间人,这时我们已经可以控制受害者机器任意流量
通过wireshark可以看出,受害者默认的dns服务器为192.168.243.2
此时我们利用iptables对受害者的流量进行重定向,将其访问192.168.243.2:53端口的流量重定向至攻击者192.168.243.129:53
iptables -t nat -A PREROUTING -p udp --dport 53 -d 192.168.243.2 -j DNAT --to-destination 192.168.243.129:53 检查nat表、过滤表规则是否还存在: iptables -t nat -L iptables -L # 删除命令 iptables -t nat -D PREROUTING -p udp --dport 53 -j REDIRECT --to-port 5353 iptables -t nat -D PREROUTING -p udp --dport 53 -d 8.8.8.8 -j DNAT --to-destination 127.0.0.1:53
受害人访问百度,可以发现攻击者截获了受害人的dns请求
将指定域名劫持至攻击者服务器
当然,如果受害人使用了https,伪造https站点会导致证书错误
若我们控制了受害者网络出口路由器或者其本人电脑的权限,则可以修改其电脑或路由器上dns为我们自己的dns服务器,从而达到dns劫持的效果
提前说明,此类攻击方法并不是完美的,在没有让受害者信任根证书的情况下,通过中间人攻击解密受害者https请求时,会使受害者浏览器提示https证书错误
mitmproxy
是一个交互式的中间代理 HTTP 和 HTTPS 的控制台界面。
特点:
mitmproxy、mitmdump、mitmweb都可以完成mitmproxy的启动。它们提供了不同的操作界面,但功能一致,且都可以加载自定义脚本
mitmproxy
命令启动后,会提供一个命令行界面,用户可以实时看到发生的请求,并通过命令过滤请求,查看请求数据。
mitmdump
是mitmproxy的命令行模式。 它提供了类似tcpdump的功能,可帮助你查看,记录和以编程方式转换HTTP流量。
mitmweb
命令启动后,会提供一个 web 界面,用户可以实时看到发生的请求,并通过 GUI 交互来过滤请求,查看请求数据。这里我们使用mitmweb,直接在命令行输入mitmweb即可启动
mitmproxy会默认将8080端口作为http/https流量的监听端口
工具已经准备完成,下一步是将受害者发往80端口和443端口(或发往其他端口的https流量)的流量重定向至攻击者的8080端口
如果前期完成了arp欺骗,劫持了受害者的所有流量,则直接通过防火墙修改本机的流量转发规则即可
# 将eth0网卡的所有访问80和443流量转发至8080端口 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 # 只转发指定IP的流量 iptables -t nat -A PREROUTING -s 192.168.243.128 -p tcp --dport 80 -j REDIRECT --to-ports 8080 iptables -t nat -A PREROUTING -s 192.168.243.128 -p tcp --dport 443 -j REDIRECT --to-ports 8080
重定向后,受害者访问流量即可被我们抓获
还可以拦截请求,修改请求
如果前期完成了DNS劫持,那么我们还需要将要劫持的域名进行dns重写
重写后,受害者访问指定域名的流量就可以被我们劫持
只需要在防火墙配置时,修改相应端口即可,如:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8443 -j REDIRECT --to-port 8080
只要客户端信任其内置的证书颁发机构,Mitmproxy
即可即时解密加密的流量。通常,这意味着必须在客户端设备上安装mitmproxy CA
证书。
到目前为止,安装mitmproxy
证书的最简单方法是使用内置的证书安装应用程序。为此,只需启动mitmproxy并使用正确的代理设置配置目标设备。
现在启动设备上的浏览器,并访问 mitm.it
。您应该会看到类似以下内容的内容:
单击相关图标,按照所用平台的设置说明进行操作,一切顺利。
有时无法选择使用快速安装应用程序-想到Java或iOS Simulator-或出于某些其他原因而只需要手动进行操作即可。以下是一些通用平台的手动证书安装文档的指针列表。mitmproxy CA
证书位于~/.mitmproxymitmproxy
的首次启动后,位于该文件夹位置。
由mitmproxy
在.mitmproxy
目录中创建的文件如下:
双击证书文件,导入本地计算机
选根证书
导入成功后即可发现红锁以及提示消失了
使用powershell可以直接在没有弹窗提示的情况下完成证书导入(需要管理员权限)
CertUtil -enterprise -f -addstore Root .\mitmproxy-ca-cert.cer
不忽略提醒强行上网,同时加强对根证书的管控,不安装可疑的根证书
Windows中证书存储于注册表中,使用火绒等hips工具做好对相关注册表的监控与防护即可
当前用户的证书 HKEY_CURRENT_USER\Software\Microsoft\SystemCertificates
本地计算机证书 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates