实验内容
- 运行
Ettercap,扫描在线主机,对目标主机进行禁止上网、DNS欺骗攻击,查看目标主机状态。 - 通过
WireShark抓包工具,捕获ARP欺骗攻击的数据包,分析ARP攻击的原理。 - 基于
Winpcap编写程序,对指定的目标IP地址进行ARP欺骗攻击。
实验过程
“禁止上网”攻击
Kali攻击机利用arp欺骗后不进行IP转发对靶机CentOS进行“禁止上网”攻击
打开两台虚拟机,利用命令ifconfig查看Kali的网络接口、ip等信息:Kali网络接口为
eth0,IP地址为192.168.88.130。
利用命令ifconfig和route查看CentOS的IP地址和网关:CentOS的IP地址为
192.168.88.131,网关为192.168.88.2。

攻击机利用Ettercap嗅探目标主机的IP地址和网关,网络接口选择eth0:嗅探到目标主机IP地址为
192.168.88.131,网关为192.168.88.2,符合。

利用命令行
echo 0 > /proc/sys/net/ipv4/ip_forward关闭Kali的IP转发,利用命令行arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host即arpspoof -i eth0-c host -t 192.168.88.131 -r 192.168.88.2得到靶机发送的消息。
使用CentOS ping 百度网址www.baidu.com发现无法连接百度,不能上网。

利用Ctrl+C使Kali退出arp欺骗。

使用CentOS ping 百度网址www.baidu.com发现没有丢包,可以上网。

“DNS欺骗”攻击
利用命令
/etc/init.d/apache2 start打开kali自带的Apache服务。

对
etter.dns文件进行修改如下:
Kali利用
Ettercap进行Unified sniffing嗅探网络接口选择eth0,并在Hosts下选择Scan for hosts,然后选择Hosts list列出主机。
在
Mitm中选择Arp Poisoning,勾选Sniff remote connections开启嗅探。
在
Plugins下打开Manage the plugins,将dns_spoof插件双击选中。
选择CentOS的IP点击
Add to Target1,接着选择CentOS的网关点击Add to Target2,然后点击Start sniffing,DNS欺骗完成。
使用CentOS ping百度地址www.baidu.com,发现ping到的IP地址为
192.168.88.130,即Kali的IP地址,使用浏览器输入淘宝域名www.taobao.com,进入到Kali的localhost页面,表明DNS欺骗攻击成功。

由于在修改etter.dns文件时只修改了*.com/.rog/.net,因此只能欺骗.com/.org/.net的域名,如可以正常访问www.leeyuxun.tk

分析ARP攻击原理
在Kali通过Ettercap嗅探CentOS的同时,通过WireShark抓包工具,捕获ARP欺骗攻击的数据包,分析ARP攻击的原理。
利用命令行
echo 1 > /proc/sys/net/ipv4/ip_forward开启Kali的IP转发, 利用命令行arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host即arpspoof -i eth0 -c host -t 192.168.88.131 -r 192.168.88.2作为靶机消息转发的中间人。
利用WireShark抓包工具抓取ARP包。

双击打开其中一条ARP报文,根据ARP报文格式分析如下。


ARP报文是由14位的以太网首部和28位的ARP请求/应答构成:
- 以太网首部如下
- 目标以太网地址(6字节):
00:50:56:ef:ad:4f - 源以太网地址(6字节):
00:0c:29:10:f5:75 - 帧类型(2字节):
0x0806,表示ARP协议帧
- 目标以太网地址(6字节):
- ARP请求/应答如下
- 硬件类型(4字节):
Ethernet(1) / (0x0001), 表示以太网 - 协议类型(4字节):
IPv4 / (0x0080), 表示上层协议是IPv4协议 - 硬件地址长度(1字节):
6 / (0x06), 表示硬件(MAC)地址长度为6字节 - 协议地址长度(1字节):
4 / (0x04), 表示协议地址长度为4字节,即IPv4协议 - 操作码:
reply(2) / (0x0002),1表示ARP请求,2表示ARP应答,3表示RARP请求,4表示RARP应答 - 源硬件地址(6字节):
00:0c:29:10:f5:75, 表示发送方MAC地址 - 源IP地址(4字节):
192.168.88.131 / (0xc0a85883), 表示发送方IP地址 - 目的硬件地址(6字节):
00:50:56:ef:ad:4f, 表示接收方MAC地址 - 目的IP地址(4字节):
192.168.88.2 / (0xc0a85802), 表示接收方IP地址
- 硬件类型(4字节):
- 以太网首部如下
ARP攻击原理
- 电脑A发送ARP请求,请求IP地址为
192.168.88.131的电脑B的MAC地址; - 攻击者截获该请求并向电脑A发送一个伪造的ARP响应,告诉电脑A:IP地址为
192.168.88.130的电脑B的MAC地址是00:0c:29:01:f5:75(攻击者的MAC地址); - 电脑A将这个对应关系写入自己的ARP缓存表中,以后发送数据时,将本应该发往电脑B的数据发送给了攻击者;
- 同样的,攻击者向电脑B也发送一个伪造的ARP响应,告诉电脑B:电脑A的IP地址
192.168.88.130对应的MAC地址是00:0c:29:01:f5:75,电脑B也会将数据发送给攻击者。
- 电脑A发送ARP请求,请求IP地址为
Winpacp实现ARP欺骗
基于Winpcap编写程序,对指定的目标IP地址进行ARP欺骗攻击。
设计思路

搭建编程环境
下载安装
WinPcap运行库,下载解压WinPcap开发包。打开vs2017,新建
windows控制台应用程序。
打开
项目属性->配置属性->c/c++->预处理器->预处理器定义,在其中添加WPCAP、HAVE_REMOTE两个宏定义。
打开
项目属性->配置属性->链接器->输入->附加依赖项添加wpcap.lib和ws2_32.lib两个库。
打开
项目属性->配置属性->VC++目录->包含目录和同级的库目录分别添加之前下载解压的WinPcap开发包的Include目录和Lib目录路径。

调用相关的WinPcap库进行代码编写,设置Kali为靶机,查找攻击机,靶机和攻击机的IP地址、MAC地址(伪造地址是执行程序时输入的)。
1
2
3
4
5
6
7
8/* 确定IP地址和MAC地址 */
CONST UCHAR dst_mac[6] = { 0x00, 0x0C, 0x29, 0x01, 0xF5, 0x75 }; //被攻击方的MAC
CONST UCHAR gateway_mac[6] = { 0x00, 0x50, 0x56, 0xEF, 0xAD, 0x4F }; //网关的MAC
CONST UCHAR src_mac[6] = { 0xDE, 0x1A, 0x1A, 0xF3, 0x88, 0x83 }; //攻击者的MAC
CONST CHAR dst_ip[] = "192.168.88.130"; //被攻击方IP
CONST CHAR gateway_ip[] = "192.168.88.2"; //网关IP
CHAR forged_mac[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //伪造MAC
CHAR forged_ip[] = "0.0.0.0"; //伪造IP
数据结构
构造ARP数据包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/* 构造ARP包 */
typedef struct __arp_packet {
UCHAR ether_dhost[6]; //目标以太网地址
UCHAR ether_shost[6]; //源以太网地址
USHORT ether_type; //以太网类型
USHORT hardware_type; //硬件类型
USHORT protocol_type; //协议类型
USHORT hardware_protocol_len; //硬件地址和协议地址长度第一个字节时硬件地址长度,第二个字节时协议地址长度
USHORT opcode; //操作码
UCHAR src_hrd_addr[6]; //源硬件地址
ULONG src_ip; //源IP地址
UCHAR dst_hrd_addr[6]; //目标硬件地址
ULONG dst_ip; //目标IP地址
} ARP_PKT;获得本地计算机上所有的网络设备表
1
2/*获得本地计算机上所有的网络设备表*/
pcap_findalldevs(&alldevs, errbuf)打开网卡
1
2
3/* 打开网卡 */
pcap_open(d->name,65536,PCAP_OPENFLAG_PROMISCUOUS,1000,NULL,errbuf))释放设备列表
1
2/* 释放设备列表 */
pcap_freealldevs(alldevs)发送ARP数据包
1
2/* 发送ARP包 */
pcap_sendpacket(handle, (unsigned char *)&pkt, sizeof(ARP_PKT))
实验结果
ARP欺骗
打开靶机,利用命令行
arp -n查看ARP缓存。
打开程序,进行ARP欺骗(伪造的MAC地址为
1A-1A-1A-1A-1A-1A,伪造的IP地址为88.88.88.88,发送ARP包1000个,发送间隔100ms)。
攻击结束后再次利用命令行
arp -n查看ARP缓存,发现多了一条缓存,IP地址为88.88.88.88,MAC地址为1A-1A-1A-1A-1A-1A, 与伪造的相同,攻击成功。
禁止上网
用靶机打开www.taobao.com,并ping百度域www.baidu.com,可正常上网。


打开程序,进行禁止上网攻击(伪造MAC地址为
90-90-90-90-90-90,发送ARP包1000个,发送间隔100ms)
在攻击过程中打开www.taobao.com,并ping百度域www.baidu.com,无法上网。


在攻击过程中使用wareshark抓包。

分析ARP包结构,发现源MAC地址是伪造的MAC地址,ARP包没有错误。

IP冲突攻击
用靶机打开www.baidu.com,并ping百度域名www.baidu.com,
可正常上网。

打开程序,进行禁止上网攻击(发送ARP包
1000个,发送间隔100ms) 。
在攻击过程中打开www.baidu.com,并ping百度域名www.baidu.com,
无法上网。

在攻击过程中使用wareshark抓包, 分析ARP包结构,靶机的IP地址对应的是攻击机的MAC地址,由于无法查看网关上的ARP列表,根据接收的ARP包的信息和无法上网可以判断网关ARP列表上会出现靶机IP地址对应两个MAC地址的现象,一个靶机的MAC地址,一个攻击机的MAC地址,即实现了IP冲突攻击。


实验总结
ARP欺骗的原理是由于局域网的网络传输并不是通过IP而是通过mac地址,因此模拟出一个不存的mac地址进行收发数据,这样会导致不能正常的进行网络通信。本实验是基于WinPcaP的,实验过程熟悉了WinPcaP的安装配置方法。ARP攻击其实会导致很严重的后果,那么如何防范ARP攻击,这就是需要思考的问题,目前了解的方法有清空ARP缓存和指定ARP对应关系。
实验核心代码
1 | /* 选择网卡接口 */ |