中间人攻击之ARP欺骗
学习自–>FreeBuf.com
原理介绍
什么是中间人攻击?
中间人攻击(Man-in-the-MiddleAttack,简称"MITM攻击"),是一种"间接"的入侵攻击,这种攻击模式是通过各种技术手段将攻击者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为"中间人"。
什么是arp?
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。通俗的说,DNS是域名与IP对应的协议,而arp是IP与MAC对应的协议,DNS常用于主机与外网机器连接时进行地址转换,而arp多用于内网机器通信时地址的转换。
什么是arp欺骗?
arp欺骗就是通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可以让攻击者获取局域网上的数据流量报甚至可以嗅探、篡改数据包,且可以让网络上特定计算机或所有计算机无法正常连线。
一般的arp攻击流程如下图:
正常的网络通信:
进行arp攻击后的网络通信:
arp欺骗原理简介
首先,进行arp的前提是攻击机与受害机处于同一内网。攻击机开启流量嗅探,只要它嗅探到两个主机的arp Request(一般其中有一台是网关),假设为**[ip1, mac1],[ip2, mac2]便可以开始arp攻击。攻击机[ip3, mac3]返还一个arp Reply数据包给受害机,其中的内容为[ip1, mac3],受害机收到arp Reply数据包后,更新它自己的arp表为[ip1, mac3]**。于是,原本正常的网络请求是主机将外网请求包发送给网关(路由器),再由网关将数据包转发给外网,被arp欺骗后,变成了主机将外网请求包发送给攻击机,在这种情况下,攻击机便可以拦截,嗅探或修改数据包以达到不同的攻击目的。
实验准备
Kali Linux虚拟机(攻击机)
win7虚拟机(受害机)
disniff(用于自动化完成arp欺骗)
nbtscan(用于主机发现)
wirshark(用于嗅探受害机的网络流量包)
1.更新Kali软件列表:apt-get update
2.下载安装dsniff:apt-get install dsniff
nbtscan介绍
应用环境:Linux
工具介绍:
这是一款用于扫描Windows网络上NetBIOS名字信息的程序。该程序对给定范围内的每一个地址发送NetBIOS状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,NBTScan列出它的IP地址、NetBIOS计算机名、登录用户名和MAC地址。但只能作用于局域网,NBTScan可以获取到PC的真实IP地址和MAC地址,如果有"ARP攻击",可以找到装有ARP攻击的PC的IP和MAC地址。
命令:
nbtscan -r 192.168.131.0/24 //搜索整个192.168.131.0/24网段
nbtscan 192.168.131.2-250 //搜索192.168.131.2-250网段。输出结果第一列是IP地址,最后一列是MAC地址
实验开始
第一阶段:
首先查看工具机的IP:ifconfig
,查看内网IP。
接着扫描内网网段:nbtscan -r 192.168.216.0/24
这里不知道为什么我没有扫到,用nmap来扫吧:nmap -r 192.168.216.0/24
可以看到扫到了受害机:IP为192.168.216.131
接下来登录受害机,查看网络的连通性:ping www.qq.com
可以看到,在进行arp欺骗之前,受害机的网络连接正常。
接下来,进行arp欺骗:
在Kali终端输入:arpspoof -i eth0 -t 192.168.126.131 192.168.216.2
其中,-i
参数指定攻击机的某一张网卡来进行攻击,-t
参数后第一个IP为受害机的IP,第二个IP为内网网关(一般来说是路由器的IP)。第一个IP参数可通过扫描确定,第二各参数可以在攻击机中输入netstat -rn
来查看:
开始arp欺骗,返回受害机,查看:
可以看到,ping不到之前可以访问的域名了。
至此,我们完成了arp欺骗的第一个目的:使目标机器断网。且开启本地防火墙并不能拦截我们的arp欺骗:
防火墙一直都未关闭。
第二阶段:
在现实的攻击中,第一阶段的攻击(让受害者断网)对攻击者来说,没有什么益处,最多就是恶心一下受害者而已,然而这并不能满足我们强烈的渗透欲望(手动狗头+奸笑)。
想要达到目的,我们就要使得我们的Kali具备类似路由器的功能,将受害机发来的网络请求包发给真实的网关,再由真实的网关转发到外网,接收返回包的过程同理。
使用如下命令暂时开启Kali的路由转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
可以查看是否开启路由转发功能。(0代表着不开启路由转发功能,1代表开启)
再次进行ping命令查看网络连接:
此时可以看到受害机的网络恢复正常了,说明我们的攻击机的路由转发开启成功。
此时,受害机所有的网络请求包都会流经攻击机,我们可以进入wireshark查看,进入arp欺骗时所选择的网卡(eth0),让受害机随便访问一个登录界面并输入:
账户:haixian 密码:123456 进行登录。
回到攻击机,在wireshark中查看受害机的流量包:
由于登录的流量包走的一般都是HTTP协议,并且是以POST方式提交表单,所以我们采用过滤器来缩小范围。最终可以看到我们登录的用户、密码验证码。
到这,我们完成了一次模拟arp欺骗攻击,并且成功达到了让目标主机断网、嗅探目标主机网络数据包的目的。
防范措施
之前的原理中提到过,arp欺骗本质在于修改了受害机的arp表,那么我们直接在arp中把网关的IP与MAC地址写死(也就是改为静态)那么就可以免遭arp攻击的"毒手"。
首先查看其网关IP与MAC地址:
可以看到为动态的,这时时可以被arp欺骗的。
win7中绑定IP与MAC地址较为复杂,首先输入:netsh i i show in
找到本地连接的IDX,然后:netsh -c "i i" add neighbors 11 网关IP MAC地址
,这里11是IDX号。
再查看arp表:arp -a
,发现其记录变为静态。
不是win7系统的话,绑定就较为简单,使用:arp -s ip mac
即可绑定IP与MAC地址。