kali Linux 渗透测试 | ARP 欺骗
目录
ARP协议:
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
ARP欺骗:
地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
实验原理
ARP协议是工作在网络层的协议,它负责将IP地址解析为MAC地址,在局域网上的主机使用物理地址(Mac 地址)通信。每台主机中都有一张ARP表,它记录着主机的IP地址和MAC地址的对应关系,并且ARP缓存表不是实时更新的,因此我们可以伪造IP地址和MAC地址实现ARP欺骗。
如果在网络中产生大量的ARP通信量,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。攻击者向电脑A发送一个伪造的ARP响应,告诉电脑A:电脑B的IP地址192.168.0.2对应的MAC地址是00-aa-00-62-c6-03,电脑A信以为真,将这个对应关系写入自己的ARP缓存表中,以后发送数据时,将本应该发往电脑B的数据发送给了攻击者。同样的,攻击者向电脑B也发送一个伪造的ARP响应,告诉电脑B:电脑A的IP地址192.168.0.1对应的MAC地址是00-aa-00-62-c6-03,电脑B也会将数据发送给攻击者。至此攻击者就控制了电脑A和电脑B之间的流量,他可以选择被动地监测流量,获取密码和其他涉密信息,也可以伪造数据,改变电脑A和电脑B之间的通信内容
因此,在局域网中,攻击者经过收到的ARP Request广播号,能够偷听到其它节点的 (IP, MAC) 地址, 黑客就伪装为A,告诉B (受害者) 一个假地址,使得B在发送给A 的数据包都被黑客截取,而A, B 浑然不知。
ARP 欺骗
本次测试采用物理机(Windows 10)与虚拟机(kali Linux)测试。
1.选择攻击对象,使用 nmap 工具获取对方的 ip
- nmap -sP 192.168.0.1/24 //-sP后面根据自己网络填网段
2. 使用 arpspoof 工具进行 arp 欺骗
- arpspoof -i eth0 -t 目的ip 网关
- echo 1 >/proc/sys/net/ipv4/ip_forward //开启端口转发
3. 使用 driftnet 工具捕获图片
- driftnet -i etho
4.使用 ettercap 工具抓取登录名与密码
- ettercap -Tq -i eth0
1、工具安装
在进行测试之前需要安装一部分工具,以便于我们进行测试。
安装 nmap 工具
nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。
安装命令如下:(已安装)
apt-get install nmap

安装 dsniff 工具
Dsniff是—个著名的网络嗅探工具包、高级口令嗅探工具、综合性的网络嗅探工具包。
dsniff 是网络审计和渗透测试工具的集合。
1、 dsniff; filesnarf, mailsnarf, msgsnarf, urlsnarf和 webspy被动地监控网络中的数据(密码,电子邮件,文件等)
2、 arpspoof, dnsspoof 和 macof 有助于拦截攻击者通常不可用的网络流量(例如,由于第2层交换)
3、 sshmitm 和 webmitm 通过利用ad-hoc PKI 中的弱绑定来实施针对重定向SSH和 Https 会话的主动中间人攻击
4、其它工具,包括 tcpkill, tcpnice.
本实验主要用到 arpspoof 工具,安装 dsniff 工具包命令如下:
apt-get install dsniff

安装 Driftnet 工具
driftnet是—个监听网络流量并从它观察到的TCP流中提取图像的程序。
driftnet是一款从网络流量捕获图像并将其显示在X窗口中的软件
driftnet是一款简单而使用的图片捕获工具,可以很方便的在网络数据包中抓取图片。该工具可以实时和离线捕获指定数据包中是图片。
安装命令如下:
apt-get install driftnet

安装 ettercap 工具
ettercap是一款现有流行的网络抓包软件,他利用计算机在局域网内进行通信的ARP协议的缺陷进行攻击,在目标与服务器之间充当中间人,嗅探两者之间的数据流量,从中窃取用户的数据资料。
安装命令如下:(已安装)
apt-get install ettercap-graphical

2、获取基本信息
在此实验中需要获取 本机 ip、网关 ip、与目的主机(物理机)ip。
获取本机 ip 地址
通过 ifconfig 命令查看本机 ip 地址

获取网关 ip 地址
使用 route -n 命令查看网关 ip

获取目的 ip 地址
- 在物理机上打开 cmd 命令窗口输入
ipconfig查看目标 ip 地址与 其网关地址

- 在Linux 上使用
nmap命令检测局域网内的 ip (需要等待一段时间)

ARP 欺骗测试
原理: 使目标主机认为攻击者的网卡是网关,从而将数据包都发给攻击者的网卡,攻击者的网卡再开启转发,将数据包传到真正网关,实现目标不断网。而如果攻击者直接将数据包丢弃(不开启转发),即是断网攻击。
1、arp 断网攻击测试
arpspoof 是一款进行arp欺骗的工具,攻击者通过毒化受害者arp缓存,将网关mac替换为攻击者mac,然后攻击者可截获受害者发送和收到的数据包,可获取受害者账户、密码等相关敏感信息。
使用 arpspoof 命令,-i 、网卡、目标(target)ip、网关 ip
arpspoof -i en0 -t 192.168.0.104 192.168.0.1
出现以下信息并不断更新表示,已经完成了第一步,目标主机现在已经无法正常连接互联网

打开浏览器并此时访问百度主页,打开 cmd 命令窗口尝试 ping 百度官网

此时,在Linux 中使用Ctrl+C中断欺骗,物理机又可以正常访问互联网了。

2、arp 欺骗测试
在 Linux 中开启端口转发功能(默认关闭),否则的话对方机器会出现断网的情况。
# 开启ip转发,关闭的话把1改为0。该命令的意思是把 1 写入 /proc/sys/net/ipv4/ip_forward 文件中
echo 1 >/proc/sys/net/ipv4/ip_forward
# 查看端口转发是否成功,如果显示1则表示开启成功,显示0则开启失败
cat /proc/sys/net/ipv4/ip_forward
开启IP转发后,物理机的流量会经过 kali 的主机而后再转发的网关,所以这时开启 arpspoof 那么目标就不会断网,因为流量通过了kali主机那么我们就可以拦截相关数据。

理论上,物理机已经被欺骗,并且可以正常上网,但是经测试,物理机还是不能正常上网

Linux 虚拟机是连接自物理机,通过桥接的方式连接 wifi,相当于是共享了物理机的网络,通过查阅资料发现可以通过修改 arp 欺骗的命令。arpspoof -i en0 -t 192.168.0.104 192.168.0.1 ,一般来说,arpspoof -t 命令后面先是 目的ip ,再是网关,我们把顺序调换一下,改成先写 网关 再写目标 ip。
现在目的主机可以正常通信了。
arp 欺骗——抓取图片
语法: driftnet [options] [filter code]
| 选项 | 描述 |
|---|---|
| -b | 捕获到新的图片时发出嘟嘟声 |
| -i | interface 选择监听接口 |
| -f | file 读取一个指定pcap数据包中的图片 |
| -p | 不让所监听的接口使用混杂模式 |
| -a | 后台模式:将捕获的图片保存到目录中(不会显示在屏幕上) |
| -m | number 指定保存图片数的数目 |
| -d | directory 指定保存图片的路径 |
| -x | prefix 指定保存图片的前缀名 |
开启 arp 欺骗并在新的 shell 上执行 driftnet -i 网卡 命令,该命令会自动打开一个 shell 窗口并获取目的主机所浏览的图片。


arp 欺骗——获取账号密码
利用 ettercap 来抓取账号密码。在终端输入
ettercap -Tq -i eth0 //这条命令表示监控eth0网卡的流量
-T 文本模式运行 -q 安静模式 -i 网卡,后接网卡名
ettercap 参数及常用操作
| 选项 | 描述 |
|---|---|
| -l | 显示可用网卡接口设备 |
| -i | 选择接口 |
| -t | 协议选择,tcp/udp/all,默认为all |
| -p | 不进行毒化攻击,用于嗅探本地数据包 |
| -L | 载入过滤器文件 |
| -V | text 将数据包以文本形式显示在屏幕上 |
| -L | filename 把所有的数据包保存下来(保存后的文件只能用etterlog显示) |
在物理机上找一个网站,输入用户名和密码登录。

在虚拟机中开启 ARP 欺骗,并输入命令 ettercap -Tq -i eth0 监测密码和账号

登录后便可抓取到账号和密码,并以明文的方式显示到屏幕上。
arp 缓存表对照
经测试,虚拟机作为攻击者,物理机作为被攻击者
- 虚拟机 Mac地址为 00:0c:29:2a:f9:ce
- 网关的 Mac地址为 c8:3a:35:2b:67:80
- windows Mac地址为 68-EC-C5-C6-33-0B
出问题了:在进行 arp 欺骗后,windows 系统的 arp 缓存表中,网关对应的 Mac 地址 应该被替换成 虚拟机的 Mac 地址,但经过实际测试后,在Windows 系统(物理机)上的 arp 缓存表中,网关对应的 Mac 地址 却被替换成了 物理机的Mac 地址。
虚拟机(攻击者 kali Linux 系统)的ARP 缓存:

虚拟机Mac 地址:可以使用cat /sys/class/net/eth0/address 命令查看或者使用ifconfig命令

问题分析
1. 使用命令 arpspoof -i eth0 -t 192.168.0.104 192.168.0.1
arpspoof -i 网卡 -t 目的ip 网关
在物理机上,被ARP 欺骗前后的 ARP缓存对照,windows 系统使用 arp -a 命令查看 arp 缓存,Linux 系统上用 arp 命令查看。
物理机(被攻击的Windows系统)ARP欺骗前:

物理机(被攻击的Windows系统)ARP欺骗后:

物理机(Window 系统)的Mac地址,用命令 ipconfig/all 查看

经过对比发现,通过 arpspoof 命令,最终把网关 Mac 修改成了物理机的 Mac(在 arp 表中),而我们期望的是把网关的 Mac 修改成 攻击者(虚拟机)的Mac,这样才能实现流量在虚拟机中中转进而实现截取流量的目的。分析,可能是虚拟机共享了物理机的网络(虚拟机设定为桥接模式)的原因所致,具体原因尚不清楚,
mark标记
2. 使用命令 arpspoof -i eth0 -t 192.168.0.1 192.168.0.104
arpspoof -i 网卡 -t 网关 目的ip
经测试,物理机的 Mac 地址(物理机的 arp 表中)未改变,但物理机可以正常通讯,并且后续测试可以顺利完成。说明 arp 欺骗成功。

猜想,可能是 arpspoof 命令修改了网关处设备的 arp 表,具体原因暂时不知,
mark 标记
3. 更换设备测试,更换目的主机为虚拟机下另一台 Linux 主机,使用命令 arpspoof -i eth0 -t 192.168.0.115 192.168.0.1测试
arpspoof -i 网卡 -t 目的ip 网关

可以明显的看到,在受害者主机上的 arp 表中,网关的 Mac 地址被修改为 攻击者的 Mac 地址。
tips:防止ARP攻击是比较困难的,修改协议也是不大可能。但是有一些工作是可以提高本地网络的安全性。
如定期删除ARP缓存表、建立静态的ARP表、安装ARP防火墙等,来提高电脑的安全系数。
kali Linux 渗透测试 | ARP 欺骗的更多相关文章
- kali Linux 渗透测试 | ettercap图形界面(ARP 欺骗 + DNS欺骗)
上次我们使用 arpspoof 工具在命令行中完成了 arp 欺骗实验,今天我们用另一种工具 ettercap 工具来实现.ettercap支持图形化操作,对新手非常友好,并且操作非常简单, ette ...
- Kali linux渗透测试常用工具汇总1
1.ProxyChains 简介:代理工具.支持HTTP/SOCKS4/SOCK5的代理服务器,允许TCP/DNS通过代理隧道. 应用场景:通过代理服务器上网. 配置:/etc/proxychains ...
- kali Linux渗透测试技术详解
kali Linux渗透测试技术详解 下载:https://pan.baidu.com/s/1g7dTFfzFRtPDmMiEsrZDkQ 提取码:p23d <Kali Linux渗透测试技术详 ...
- Kali linux渗透测试的艺术 思维导图
Kali Linux是一个全面的渗透测试平台,其自带的高级工具可以用来识别.检测和利用目标网络中未被发现的漏洞.借助于Kali Linux,你可以根据已定义的业务目标和预定的测试计划,应用合适的测试方 ...
- Kali Linux渗透测试实战 1.1 Kali Linux简介
1.1 Kali Linux简介 如果您之前使用过或者了解BackTrack系列Linux的话,那么我只需要简单的说,Kali是BackTrack的升级换代产品,从Kali开始,BackTrack将成 ...
- Kali Linux渗透测试实战 1.2 环境安装及初始化
1.2 环境安装及初始化 目录(?)[-] 环境安装及初始化 下载映像 安装虚拟机 安装Kali Linux 安装中文输入法 安装VirtualBox增强工具 配置共享目录和剪贴板 运行 Metasp ...
- Kali Linux 渗透测试手册(1.1)安装虚拟机
翻译来自:掣雷小组 成员信息: thr0cyte, Gr33k, 花花, 小丑, R1ght0us, 7089bAt, 一.配置KALI Linux和渗透测试环境 在这一章,我们将覆盖以下内容: 在W ...
- Kali Linux渗透测试实战 2.2 操作系统指纹识别
目录 2.2 操作系统指纹识别 2.2.1 Banner抓取 2.2.2 TCP 和 ICMP 常规指纹识别技术 TCP数据报格式 ICMP首部格式 TTL与TCP窗口大小 FIN探测 BOGUS f ...
- Kali Linux渗透测试实战 2.1 DNS信息收集
目录 2.1 DNS信息收集1 2.1.1 whois查询3 2.1.2 域名基本信息查询4 Dns服务器查询4 a记录查询4 mx记录查询5 2.1.3 域名枚举5 fierse 5 dnsdict ...
随机推荐
- CVE-2022-22947 Spring Cloud Gateway SPEL RCE复现
目录 0 环境搭建 1 漏洞触发点 2 构建poc 3 总结 参考 0 环境搭建 影响范围: Spring Cloud Gateway 3.1.x < 3.1.1 Spring Cloud Ga ...
- eclipse gradle创建java项目
参考: https://blog.csdn.net/weixin_33733810/article/details/92438913 一 : 需要在 https://gradle.org/releas ...
- bower install 报错fatal: unable to access 'https://github.com/angular/bower-angular-touch.git/'类错误解决方法
bower install时出现很多unable to access 'https://github.com/angular/bower-angular-touch.git/'类似的错误, 方法一:( ...
- Java 替换PDF中的字体
文档中可通过应用不同的字体来呈现不一样的视觉效果,通过字体来实现文档布局.排版等设计需要.应用字体时,可在创建文档时指定字体,也可以用新字体去替换文档中已有的字体.下面,以Java代码展示如何来替换P ...
- redirect route 路由传参
return redirect()->route('exams.sign',['token'=>$token,'id'=>$result['id']]); // 签到页面 Route ...
- 关于php接受xml的一些问题,simplexml_load_string收不到数据
接受xml数据一般使用这两种方法 方法1: file_get_contents('php://input'); 方法2: simplexml_load_string($GLOBALS['HTTP_RA ...
- PHP pdf转png windows版本
链接:https://pan.baidu.com/s/1Bli-2HkucRTYTeujkcsmjg&shfl=sharepset 提取码:2une 1.php_imagick扩展 (1)下载 ...
- vue3-动态组件的要点
<!--动态组件--> <!--缓存,只缓存about和home组件--> <keep-alive exclude="about" > < ...
- TypeError: put() missing 1 required positional argument: 'item'问题分析
今天博主在练习带参数线程池的时候与到了如下问题: 翻译过来,就是缺少位置参数. 一.错误1 如果此时你的代码高亮是这样: 解决办法:在init魔法方法下的Queue没有加括号,即 self.q = Q ...
- python 之 matplotlib 练习
import numpy as npimport matplotlib.pyplot as plt x = np.linspace(0,10,1000)# 自变量y = np.sin(x) + 1 # ...