ARP欺骗实验
文章目录
- ARP欺骗实验
- Cloud云设备
- 连接本机网卡
- ARP欺骗实验
- Cain基本设置
- 主机发现
- ARP欺骗的原理
- 实现
- Cain干了啥
- DNS欺骗实验
- Cain干了啥
- 欺骗转发
- 实验
Cloud云设备
想查一下华为官方使用手册,看看云到底是个啥,但是查不到.
在ensp模拟器中云设备这篇博客上这样写的:
eNSP工具中的云代表通过各种网络技术连接起来的计算机网络环境,目前可实现的功能包括:仿真设备之间建立映射关系、绑定网卡与仿真设备之间进行通信,以及通过开放UDP端口方式与外部程序进行通信。
然后实例给出的云的用法
试图让两个PC相互ping通
云上是这样设置的:
云上有两个端口,这两个端口只能对UDP协议提供服务,其他的包它不管
端口映射表明,凡是从1口进入的UDP包,直接无脑从2口出去
反过来同样
也就是说云屏蔽了下面的实现细节,给我们的看到的是,一个双向的无条件UDP通道
确实是可以ping通的
下面将PC2换成HTTP server,将PC1换成Client,试试发一个基于TCP的HTTP请求,能否通过云呢?
server已经设置好了HTTP服务,并在80端口上开放
Client也是可以ping通HTTPserver@192.168.1.3的
然后尝试获取192.168.1.3/login.html(事先写好了的)这个文件
竟然也可以成功
在Cloud朝向Client1的那个接口上抓包
TCP包竟然也可以通过
连接本机网卡
网络拓扑长这样
Cloud1要连接到本机的一块网卡上,其Ethernet 0/0/1端口朝向PC1,PC2这个子网
Ethernet0/0/2朝向本机上的一块网卡VMnet8
Ethernet 0/0/2这个端口上绑定的是"VMware Network Adapter VMnet8"这块网卡.这个网卡是个啥呢?
VMware中,给NAT网络建立的网卡,宿主机也就是本机,在192.168.191.1上
VMware还创建了VMnet1网卡,用于桥接
以太网适配器 VMware Network Adapter VMnet8:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8
物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-08
DHCP 已启用 . . . . . . . . . . . : 否
自动配置已启用. . . . . . . . . . : 是
本地链接 IPv6 地址. . . . . . . . : fe80::8c3f:c867:124c:937%6(首选)
IPv4 地址 . . . . . . . . . . . . : 192.168.191.1(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : 889213014
DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-29-56-AF-A7-84-A9-38-F4-9B-69
TCPIP 上的 NetBIOS . . . . . . . : 已启用
kali虚拟机在192.168.191.129上
方便期间,可以在kali上安装open-sshserver,然后在主机终端上ssh连接kali虚拟机进行控制,就像wsl一样
┌──(root💀kali)-[/home/kali]
└─# route 130 ⨯
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.191.2 0.0.0.0 UG 100 0 0 eth0
192.168.191.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
下面配置R1路由器开启DHCP服务,给PC1和PC2分配192.168.191.0/24网段中的地址
<Huawei>
<Huawei>sys
Enter system view, return user view with Ctrl+Z.
[Huawei]un in en
Info: Information center is disabled.
[Huawei]sysname router
#设置E0端口ip地址
[router]int E0/0/0
[router-Ethernet0/0/0]ip address 192.168.191.254 24
[router-Ethernet0/0/0]dhcp enable
Info: The operation may take a few seconds. Please wait for a moment.done.
#配置dhcp地址池
[router]ip pool swimmingpool
Info:It's successful to create an IP address pool.
[router-ip-pool-swimmingpool]network 192.168.191.0 mask 24
[router-ip-pool-swimmingpool]lease day 5 hour 5
[router-ip-pool-swimmingpool]gateway-list 192.168.191.254#设置网关为dns地址
[router-ip-pool-swimmingpool]dns-list 192.168.191.254 8.8.8.8#设置dns服务器为路由器地址
[router-ip-pool-swimmingpool]disp this
#
ip pool swimmingpool
gateway-list 192.168.191.254
network 192.168.191.0 mask 255.255.255.0
lease day 5 hour 5 minute 0
dns-list 192.168.191.254 8.8.8.8
#
return
#E0端口上使用dhcp地址池
[router-ip-pool-swimmingpool]int E0/0/0
[router-Ethernet0/0/0]dhcp select global
[router-Ethernet0/0/0]disp this
#
interface Ethernet0/0/0
ip address 192.168.191.254 255.255.255.0
dhcp select global
#
return
[router-Ethernet0/0/0] User interface con0 is available
然后PC2使用DHCP服务,ipconfig已经获取到了ip地址
PC1同理
目前网络拓扑长这样
实际上这里的云可以这样理解:画个图意思意思
现在测试网络通断
kali可以ping通所有设备
主机也可以ping通所有设备
PC1也可以ping通所有设备
到此准备工作完毕
ARP欺骗实验
实际上win11主机就可以通过一些软件,实现ARP欺骗,装kali不装无所谓
如果将win11作为攻击机,可以用Cain这个软件
Cain&Abel,该隐和亚伯,哥俩是亚当和夏娃的孩子
Cain嫉妒父母对Abel的偏爱,就给Abel弄死了,于是Cain成为世界上所有的恶人的祖先
用到子网中十分贴切,可以理解为子网中的邻居就是Abel,攻击者就是Cain
Cain长这样子,关键部件已经框出,
Cain基本设置
首先要设置Cain使用哪块网卡
由于主机上有很多网卡,需要给Cain指定其中一个,也就是VMnet 8这个网卡
在菜单栏的Configure菜单中sniffer嗅探器选项卡,选择一个网卡
但是这里的网卡都是内核对象id的形式,不方便区分哪一块是VMnet8
可以打开注册表编辑器去查
计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
根据注册表中的IPAddress键值找到192.168.191.1对应的这块网卡,其id为{30b09604-410c-4077-bae0-5636555317b2}
然后在Cain中选择这块网卡确定
主机发现
下面要做的是主机扫描,看看哪些邻居在线,实际上类似于nmap 主机发现的功能
扫描192.168.191.0/24网段中的所有ip地址(除去0和255两个特殊地址)
扫描结果显示在下面的列表里
这里扫发现了
kali@192.168.191.129,
router@192.168.191.254,
PC1@192.168.191.253,
PC2@192.168.191.252,
VMnet8默认网关@192.168.191.2,
win7@192.168.191.134
这几个主机
ARP欺骗的原理
现在是知道了邻居都是谁了,在整蛊邻居之前,首先了解ARP欺骗的原理
ARP协议
以太网中的数据传输使用链路层协议,源主机需要知道目的主机的MAC地址,才能向目的主机发送报文
可以使用arp -a查看本机缓存,arp -d <ip地址>可以删除目标地址的缓存
如果源主机没有缓存目的主机的MAC地址,在发送数据之前,首先会在子网内广播ARP报文,意图寻找目的主机的MAC地址
正常情况下,非目的主机不会多管闲事,事不关己就不会回应,只有目的主机在收到ARP广播后会回应,此后目的主机和源主机都会更新自己的arp缓存,记录彼此的MAC地址
这个过程可以抓包观察,还是这个拓扑,在PC1@192.168.191.253的唯一网卡上抓包,
首先在PC1上arp -d *
删除其所有的arp缓存,此举保证下一次ping的时候必然会首先发送ARP广播询问目的MAC地址
然后ping 192.168.191.252
第90和第91两帧就分别是广播的ARP请求和单播的ARP回应
此时PC1的ARP缓存中就记录了PC2@192.168.1.252的MAC地址54-89-98-ED-53-0C
PC>arp -a
Internet Address Physical Address Type
192.168.191.252 54-89-98-ED-53-0C dynamic
192.168.191.2 00-50-56-F5-46-91 dynamic
此后的ICMP ping报文才可以在链路层顺利发送
ARP欺骗
在描述ARP协议时有这么一句
正常情况下,
非目的主机不会多管闲事,事不关己就不会回应,
只有目的主机在收到ARP广播后会回应,
此后目的主机和源主机都会更新自己的arp缓存,记录彼此的MAC地址
非目的主机不会多管闲事,这是个君子协定,
就好比老师上课的时候,学生不应该随便说话,但是就算是学生随便说话,老师也不能怎么样.
关键是,我突然站起来就说,声如洪钟盖过了老师,有些傻蛋学生居然就听信了我说的,比如老师说1+1=2, 我非得说1+1=王.这个傻蛋学生就记住了1+1=王
这就是ARP欺骗的道理
你PC1@192.168.191.253不是要广播找192.168.191.252的MAC吗?
我win11@192.168.191.1也听见你的广播了,并且我不是君子,我是小人,我也可以张嘴说"我就是192.168.191.252",并且我还得喋喋不休地使劲说,让你根本没有机会收到PC2的回复.
好了,你PC1听信了我的谗言,现在就认为,192.168.191.252这个逻辑地址对应的MAC地址是我win11网卡的地址了
此后在链路层通信时,你发往192.168.1.252的包,实际上使用链路层协议,都会发往我win11这里来
下面就在Cain上实现这一点
实现
这里有两个框,其作用就是让谁把谁当成谁,要看一下上面的警告
APR enables you to hijack IP traffic between the selected host on the left list and all selected hosts on the right list in both directions.
APR使你可以双向劫持左侧主机和右侧主机的IP路由
If a selected host has routing capabilities WAN traffic will be intercepted as well.
如果所选主机具有路由功能,则 WAN 流量也会被拦截。
Please note that since your machine has not the same performance of a router you could cause DoS if you set APR between your Default Gateway and all other hosts on your LAN.
请注意,因为你的机器没有路由功能,因此当你将自己的网卡作为网关欺骗其他主机的时候,会导致拒绝服务
下面欺骗192.168.191.252和192.168.191.253,让他们尝试获取对方的MAC地址时,实际得到win11的MAC地址
在PC1和PC2唯一的网卡上抓包,之后开始欺骗
现在我们站在被害人PC1,PC2的视角上,它啥也不知道,不知道win11@192.168.191.1在发坏
首先arp -d *
清理一下各自的arp的缓存,然后PC1 ping PC2,甚至不用ping,他们会定期发ARP报文建立缓存
然后在PC1上就发生了下面一幕:
PC>arp -a
Internet Address Physical Address Type
192.168.191.253 00-50-56-C0-00-08 dynamic
192.168.191.252 00-50-56-C0-00-08 dynamic
192.168.191.1 00-50-56-C0-00-08 dynamic
这里三个MAC地址都是00-50-56-C0-00-08,正是win11的VMnet8网卡的地址,
甚至PC1认为192.168.191.253这个自己的ip地址都应该对应win11.VMnet8网卡的MAC地址
以太网适配器 VMware Network Adapter VMnet8:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8
物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-08
...
下面到win11上抓VMnet8的包,用PC1再ping PC2,看看win11能否收到
收到了,明明是192.168.191.253和192.168.191.252之间的通讯,结果发到192.168.191.1上了
下面到PC2上抓包再用PC1 ping PC2看看PC2能否收到
PC2也收到了并且有回复
Cain干了啥
在win11的VMnet8网卡上抓包,过滤只关心ARP协议,可以发现这种东西
明明没有任何ARP请求的广播,win11缺一个劲地给PC1@192.168.191.253和PC2@192.168.191.252发送ARP回复报文,
win11告诉PC1@192.168.191.253,说:听我的,"192.168.191.252"的MAC地址就是00-50-56-C0-00-08
win11告诉PC2@192.168.191.253,说:听我的,"192.168.191.253"的MAC地址就是00-50-56-C0-00-08
也就是说Cain一直在伪造ARP回复报文,并将本机网卡MAC地址作为目标MAC地址
DNS欺骗实验
基于ARP欺骗的原理,还可以用Cain进行DNS欺骗
在win11上Cain的DNS欺骗功能受了点影响,即使设置了DNS欺骗,也不会对DNS查询报文做出回复,就导致了域名无法解析错误
于是从win7@192.168.191.134上使用Cain继续实验
先前我们骗了192.168.191.252和253两个终端,这一次更加严重,需要欺骗网关
PC1@192.168.191.253这个终端本来的网关和DNS服务器都是192.168.191.2,
也就是说,当PC1尝试访问外网或者尝试使用DNS协议时,都会首先和网关@192.168.191.2进行通讯
现在win7@192.168.191.134要进行一个中间人攻击,通过ARP攻击,让PC1认为win7的网卡地址就是网关的网卡地址.
让网关认为win7的网卡地址就是PC1的网卡地址
而PC1的DNS服务器ip地址也会解析到win7的网卡地址上,显然windows正常情况下是不具备DNS解析能力的,但是win+Cain可以
在win7上用Cain设置假的DNS解析
也就是说,只要有关于baidu.com和www.baidu.com的dns解析请求发到win7上了,win7就会返回dns回复报文,将域名解析到192.168.191.1上,而这正是win11的ip地址
受害者是PC1@192.168.191.253,从PC1上尝试ping baidu.com,发现ip地址被解析到192.168.191.1了
在win11@192.168.191.1:80上开启微软IIS http服务器
在拓扑中添加一个HTTP终端,同样来这么一套,观察其访问baidu.com获取到的HTTP服务是谁提供的
终端尝试访问http://baidu.com
确实是在访问微软IIS服务器的主页
Cain干了啥
可想而知,Cain监听到baidu的dns请求报文后会乱回应dns相应,解析到错误的ip地址
欺骗转发
欺骗转发是个什么事情呢,画个图意思意思,为了方便表达报文的传送方向,省略了二层交换机,连线就是报文的传播方向
也就是说,攻击者欺骗了邻居,让邻居认为攻击者才是网关,于是邻居任何访问外网的数据包都会先经过攻击者.
至于网关是将包发给攻击者再转发给邻居还是说网关能够正确地将包发给邻居,这已经不重要了
为了让邻居不发现,攻击者需要让邻居的包再转发到真正的网关,
攻击者自己呢,就像一个检查站一样,可以过目邻居的每一个访问外网的数据包.
如果有些网站的用户名和密码是明文传送的,或者是比较容易破解的加密传送,就可以被监听到
并且邻居的所有上网行为,包括浏览了什么网站,都会被看的一清二楚
下面使用kali虚拟机作为攻击者实现这一实验
实验
首先在kali上安装武器,dsniff
kali换apt下载源
vim /etc/apt/sources.list
中科大镜像
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
apt install dsniff
然后看一下kali在子网中的网卡是哪一个
┌──(root💀kali)-[/home/kali]
└─# ifconfig 1 ⨯
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.191.129 netmask 255.255.255.0 broadcast 192.168.191.255
...
是eth0
下面就是ARP欺骗了
┌──(root💀kali)-[/home/kali]
└─# arpspoof -i eth0 -t 192.168.191.253 -r 192.168.191.2
0:c:29:89:6:49 54:89:98:62:11:26 0806 42: arp reply 192.168.191.2 is-at 0:c:29:89:6:49
0:c:29:89:6:49 0:50:56:f5:46:91 0806 42: arp reply 192.168.191.253 is-at 0:c:29:89:6:49
0:c:29:89:6:49 54:89:98:62:11:26 0806 42: arp reply 192.168.191.2 is-at 0:c:29:89:6:49
0:c:29:89:6:49 0:50:56:f5:46:91 0806 42: arp reply 192.168.191.253 is-at 0:c:29:89:6:49
0:c:29:89:6:49 54:89:98:62:11:26 0806 42: arp reply 192.168.191.2 is-at 0:c:29:89:6:49
...
这条命令的意思是,将自己eth0网卡的信息作为网关信息,欺骗192.168.191.253
执行之后,观察PC1的arp缓存,已经上当了
PC>arp -a
Internet Address Physical Address Type
192.168.191.134 00-0C-29-BB-FE-E5 dynamic
192.168.191.2 00-0C-29-89-06-49 dynamic
PC1此时ping baidu是不会通的
此后kali的这个终端将会一直进行ARP欺骗,可以另开一个终端做别的事情
在另一个终端上开启路由转发
┌──(root💀kali)-[/home/kali]
└─# echo 1 >/proc/sys/net/ipv4/ip_forward
也就是在/proc/sys/net/ipv4/ip_forward这个文件里写了一个1,表示打开
此后再在PC1上ping百度
通了
同样的道理,先用arpspoof -i eth0 -t 192.168.191.10 -r 192.168.191.2
欺骗终端,然后从终端上尝试访问baidu.com
立刻就访问到了百度首页
同时kali上也抓到了终端的请求
这里110.242.68.66就是baidu的ip地址