题记
【PS:本实验都是在虚拟环境下进行,非真实环境,恶意攻击是违法的】
- hacker
A hacker is any highly skilled computer expert. - script kiddie
A script kiddie is an unskilled individual who uses scripts or programs developed by others to attach computer systems and networks and deface websites
上期回顾
通过上期分享,我们已经了解了ARP协议其实就是 映射 逻辑地址 和 物理地址 的 数据链路层 协议,它是工作在 操作系统 内核之中的。
它有非常大的 安全漏洞 ,以太网中的 任意 一台主机,如果收到一个 ARP应答报文,即使该报文不是该主机 所发送 的ARP 请求的 应答报文,该主机也会将ARP报文中的发送者的MAC地址和IP地址更新或加入到ARP高速缓存中。
ARP欺骗
ARP 欺骗攻击就利用了 这点,攻击者主动发送ARP回复报文,发送者的MAC地址为攻击者主机的MAC地址,发送者的IP地址为被攻击主机的IP地址。
通过不断发送这些 伪造 的ARP报文,让 以太网 上所有的主机和网关ARP表,其对应的MAC地址均为攻击者的MAC地址,这样所有的 网络流量 都会发送给 攻击者主机。由于ARP欺骗攻击导致了主机和网关的ARP表的 不正确,这种情况我们也称为ARP毒化。
根据ARP 欺骗者 与 被欺骗者 之间的角色关系的不同,通常可以把ARP 欺骗攻击分为如下 两种:
-
主机型
ARP欺骗
欺骗者 主机冒充 网关设备 对 其他主机 进行欺骗 -
网关型
ARP欺骗
欺骗者 主机冒充 其他主机 对 网关设备 进行欺骗
其实很多时候,攻击者都是进行 双向欺骗,既 欺骗主机 又 欺骗网关。
Coding
-
构造网络中活动主机的
IP和MAC映射
可以通过上篇分享的ARP探测发现网络中活动主机的IP和MAC -
构造
ARP欺骗数据包
我们需要导入scapy
- get_if_hwaddr
为获取本机网络接口的函数 - getmacbyip
是通过ip地址获取其Mac地址的方法 - ARP
是构建ARP数据包的类 - Ether
用来构建以太网数据包 - sendp 在第二层发送数据包的方法
关于各个数据包构造的参数,本文就不在继续啰嗦啦,请参考arp探测
- 定向欺骗
现在来构造数据包就很容易了,我们可以随机选择一个区域网的主机进行毒化。告诉192.168.3.5这台 主机 网关地址为192.168.3.17所在的主机,构造的 数据包 应该是这样的: 上面的代码我们不论是以太网数据包还是ARP数据包,我们都明确指定了 来源 和 目标,在ARP数据包中,我们将3.17的Mac地址和网关的IP地址进行了绑定,op 取值为 2,作为一个 响应包 被3.5接到,这样3.5会更新自己的ARP缓存表,造成 中毒 ,从而3.5发往网关的数据包都会被发往3.17。
那么我们如果要 欺骗网关,只需要将3.5和3.17的IP和MAC分别改为网关和欺骗主机的IP和MAC,根据上面的代码稍作修改即可:
ARP响应包,其实发送 请求 包也可以进行毒化,请求包毒化的 原理 是,我们请求时候使用假的源IP和MAC地址,目标主机同样会更新自己的 ARP表。
ARP 请求的方式欺骗主机,构造的ARP包如下:
我们看到构造ARP请求和响应的主要区别在 op 的值。
目前我们欺骗的方式都是 一对一 欺骗的,事实上我们可以发送 广播 包,对 所有主机 进行欺骗。
-
广播欺骗
广播欺骗,首先以太网数据包直接构造一个广播包,ARP包不用填写 目标主机 的信息即可。下面是
ARP广播响应包的构造方式: 最后综合定下和广播欺骗的方式,我们总结一个公式出来: -
发送数据包
数据包构造完成之后,我们要做的就是发送了,发送数据包这里我们使用sendp方法,该方法描述如下: 和sendp方法类似的还有一个send方法,两个方法不同的是,sendp方法工作在第二层,send方法工作在第三层。发送构造好的数据包就很简单了: -
ARPSPOOF
其实Kali Linux上有一款常用的ARP欺骗工具叫arpspoof。
笔者会专门开设一个专题专门讲这些工具的使用,工具的使用都是script kiddie,授之于鱼不如授之于渔,明白原理永远才是 王道。
关注笔者公众账号[mindev],并回复arp欺骗,就能得到毒化源码哟~~
愿意与大家分享交流各种技术,个人公众账号[mindev],以及 知识星球[ 极客世界 ]