草庐IT

ARP欺骗与中间人攻击

Zovt 2023-03-28 原文

一、实验目的

  1. 掌握ARP欺骗攻击

  2. 掌握ARP欺骗攻击全过程

  3. 学会防范ARP欺骗

二、实验环境

  1. 系统环境:Windows环境,kail环境,XP环境

  2. 软件工具:packEth

三、实验原理

ARP缓存

1.在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如下图所示是window7主机的ARP缓存表:

在上图所示的ARP缓存表中,IP地址192.168.70.129映射的MAC地址为00-50-56-2b-68-41,下面我们以主体X(192.168.70.129)向主机Y(192.168.70.134)发送数据为例,说明ARP工作过程。

当主机X发送数据时,它会在自己的ARP缓存表中寻找是否有主机Y的IP地址。如果找到了,也就知道了主机Y的MAC地址,直接把目标MAC地址写入数据包里面发送就可以了;如果在ARP缓存表中没有找到主机Y的IP地址,主机X就会在网络上发送一个广播,目标MAC地址是“FF-FF-FF-FF-FF-FF”,这个表示向同一网段内的所有主机发出这样的询问:192.168.70.129的MAC地址是什么?网络上其他主机并不响应ARP询问,只有主机Y接收到这个数据包时,才会向主机X做出这样的回应:192.168.70.129的MAC地址是00-50-56-2b-68-41。这样,主机X就知道了主机Y的MAC地址,他就可以向主机Y发送信息了,同时它还更新了自己的ARP缓存表,下次再向主机Y发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

2.ARP欺骗定义

从前面的介绍可以看出,ARP的致命缺陷是:他不具备任何的认证机制,当有个人请求某个IP地址的MAC时,任何人都可以用MAC地址进行回复,并且这种响应也会被认为是合法的。
ARP并不只在发送了ARP请求后才接收ARP应答。当主机接收到ARP应答数据包的时候,就会对本机的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存表中。此外,由于局域网中数据包不是根据IP地址,而是按照MAC地址进行传输的。所有对主机实施ARP欺骗就成为可能。

3.ARP常用命令:

arp -a 用于查看缓存表中的所有项目
arp -a ip 只显示包含指定IP的缓存表项目
arp -s ip mac 向ARP缓存表中添加静态目录,该项目在计算机启动过程中一直有效
arp -d ip 删除ARP缓存表中静态项目

四、实验步骤

下面PC2要对PC1进行ARP欺骗攻击,目标是更改PC1缓存表中网关的MAC地址更新为aa:aa:aa:aa:aa:aa实施欺骗,导致PC1无法正常上网

更新前:PC1的缓存表如下图所示网关IP:192.168.70.2对应的MAC地址是:00-50-56-e5-d2-ff

此时PC1是可以正常上网的如下图所示:

打开Windows7将packEth压缩包解压成文件夹后,找到packEth.exe文件双击打开

打开packEth.exe文件,选择第二个网卡,选择ARP packet模式

发送方IP和MAC填写网关的真实IP地址和此处修改MAC地址为aa:aa:aa:aa:aa:aa以达到欺骗效果,选择Arp packet功能以及ARP reply 应答包,MAC Header处填写目标真实MAC地址(此处为PC1的MAC地址),源MAC地址填写修改的MAC地址(此处为aa:aa:aa:aa:aa:aa)设置好后点击Send开始发包

更新后:此时我们返回到PC1里使用命令arp -a 查看网关的MAC地址成功被我们修改成了aa:aa:aa:aa:aa:aa

此时我们再次验证PC1是否能正常上网,发现已经无法正常上网了,如下图所示:

PC2向PC1发送一个自己伪造的ARP应答包,而这个应答数据中发送方IP地址是网关的192.168.70.2映射的MAC更新为aa:aa:aa:aa:aa:aa(网关的MAC地址本来应该是00-50-56-e5-d2-ff,此时已经被我们伪造了)。当PC1收到PC2伪造的ARP应答,就会更新本地的ARP缓存表(PC1不知道MAC已经被伪造了),而且PC1不知道这个ARP应答包是从PC2发送过来的。这样PC1发送给网关的数据包都变成了发给PC2了。PC1对所发生的变化一点儿都没有意识到,但是接下来的事情就让PC1产生了怀疑,因为它无法正常上网了,这是因为PC2只是接收PC1发给网关的数据,并没有转发给网关。

2.PC2做“maninthemiddle”(中间人),进行ARP重定向。打开自己的IP转发功能,将PC1发送过来的数据包转发给网关,就好比一个路由器一样,而网关接收到数据包完全认为是PC1发送过来的。不过,网关发送的数据包又直接传递给PC1,倘若再次进行对网关的ARP欺骗,那么PC2就完全成为PC1和网关的中间桥梁,对于PC1与网关的通讯就可以了如指掌了(如果你被人ARP监控了,想想是不是很可怕)

启动kali虚拟机,打开终端,输入命令:ettercap -G 如图所示:

在进行中间人攻击之前首先需要扫描当前局域网中存在的活动主机,确认攻击目标机器,点击Unified sniffing开启嗅探,如下图所示:

选择当前网卡eth0,点击OK进入嗅探,如下图所示:

点击菜单中的Hosts,选中Scan for hosts 扫描和本机(kali)同网关所有的主机,如下图所示:

点击菜单Hosts,选中Host list 列出同网关所有互动的主机,扫描结果如下图所示:192.168.70.133为Windows7主机的IP地址,192.169.70.2为网关IP地址

接下来选择攻击目标,右键Windows目标IP点击Add to Target 1,选择第二个攻击目标IP(网关),右键网关目标IP点击Add to Target 2,如下图所示:

然后确定攻击方式,此处点击菜单Mitm,选中ARP posoning采用ARP欺骗的攻击方式,如下图所示:

勾选Sniff remote connections,点击确认按钮,如下图所示:

点击菜单start,选中Start sniffing,开始监听

在Windows7虚拟机中,打开cmd命令控制窗口,输入arp -a查看arp缓存表,结果发现网关(192.168.70.2)的MAC地址变成了和kali主机的MAC地址相同,如下图所示:

到此为止我们开始验证ARP中间人欺骗是否成功了
返回到Windows7虚拟机,打开浏览器访问一个登录界面,输入登录用户名和密码,点击确认登陆,如下图所示:

返回到kali主机我们已成功获取到Windows7主机访问某网站已经登录的用户名和密码,如下图所示:

五、ARP攻击防范:

1.双向绑定:
一般来说,在小规模网络中,比较推荐使用双向绑定,也就是在路由器和终端上都进行IP-MAC绑定的措施,它可以对ARP欺骗的两边,伪造网关 和截获数据,都具有约束的作用。这是从ARP欺骗原理上进行的防范措施,也是最普遍应用的办法。它对付最普通的ARP欺骗是有效的。

2.ARP防火墙:
在一些杀毒软件中加入了ARP防火墙的功能,它是通过在终端电脑上对网关进行绑定,保证不受网络中假网关的影响,从而保护自身数据不被窃取的措施。ARP防火墙使用范围很广,但也会有问题,如,它不能保证绑定的网关一定是正确的。如果一个网络中已经发生了ARP欺骗,有人在伪造网关,那么,ARP防火墙上来就会绑定这个错误的网关,这是具有极大风险的。

3.VLAN和交换机端口绑定:
通过划分VLAN和交换机端口绑定来防范ARP,也是常用的防范方法。做法是细致地划分VLAN,减小广播域的范围,使ARP在小范围内起作 用,而不至于发生大面积影响。同时,一些网管交换机具有MAC地址学习的功能,学习完成后,再关闭这个功能,就可以把对应的MAC和端口进行绑定,避免了病毒利用ARP攻击篡改自身地址。也就是说,把ARP攻击中被截获数据的风险解除了。

有关ARP欺骗与中间人攻击的更多相关文章

  1. 什么是0day漏洞?如何预防0day攻击? - 2

    什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相

  2. ruby - 如何在数组中间插入一个数组? - 2

    我有一个Ruby数组[1,4]。我想在中间插入另一个数组[2,3],这样它就变成了[1,2,3,4]。我可以使用[1,4].insert(1,[2,3]).flatten实现这一点,但是有更好的方法吗? 最佳答案 您可以通过以下方式进行。[1,4].insert(1,*[2,3])insert()方法处理多个参数。因此,您可以使用splat运算符*将数组转换为参数。 关于ruby-如何在数组中间插入一个数组?,我们在StackOverflow上找到一个类似的问题:

  3. ruby-on-rails - 如何在关闭 cache_classes 的情况下使用来自中间件的域对象? - 2

    在rails开发环境中,cache_classes是关闭的,所以你可以修改app/下的代码,不用重启服务器就可以看到变化。不过,在所有环境中,中间件只会创建一次。所以如果我有这样的中间件:classMyMiddlewaredefinitialize(app)@app=appenddefcall(env)env['model']=MyModel.firstendend我在config/environments/development.rb中执行此操作:config.cache_classes=false#thedefaultfordevelopmentconfig.middleware.

  4. ruby-on-rails - 保存 PDFKit 中间件显示的 PDF 文件 - 2

    如果有人有兴趣将PDF文件保存在PDFKit中间件gem显示的文件系统中,那么这里是...重写middleware.rb文件的call方法。在覆盖中只需替换这一行:body=PDFKit.new(translate_paths(body,env),@options).to_pdf与pdf=PDFKit.new(translate_paths(body,env),@options)file=pdf.to_file('Your/file/name/path')Mymodel.my_method()#Youcanwriteyourmethodheretousethatfilebody=pdf

  5. ruby-on-rails - Rack 中间件和线程安全 - 2

    我的Rails4应用程序使用了一个自定义Rack中间件。如果客户端未提供有效信息(我'正在开发API)。因此,在每个请求之前它会更改这些header,并且在每个请求之后它会添加一个带有自定义媒体类型信息的自定义X-Something-Media-Typeheader。我想切换到Puma,因此我有点担心这种中间件的线程安全性。我没有使用实例变量,除了我们在每个中间件中遇到的常见@app.call一次,但即使在这里我也复制了一些我在RailsCasts的评论中读到的内容:definitialize(app)@app=appenddefcall(env)dup._call(env)endde

  6. ruby-on-rails - rails delete_if 使用哈希忽略当前文章(中间人) - 2

    我为你们准备了一个简单的。我想要一个特色内容部分,其中排除了当前文章所以这可以通过delete_if使用MiddlemanBlog:但是我使用的是中间人代理,所以我无法访问current_article方法...我有一个YAML结构,其中包含以下模拟数据(以及其他数据),文件夹设置如下:data>site>caseStudy>RANDOM-ID423536.yaml(由CMS生成)在每个yaml文件中,您会发现如下内容::id:2k1YccJrQsKE2siSO6o6ac:title:Heyplace我的config.rb看起来像这样data.site.caseStudy.eachdo

  7. Ruby 正则表达式 - 用文本中间的空格替换点 - 2

    我有一个很长的文本,我想用空格替换其中的点,但只能在文本的中间。例如:Domain:...................google.com我需要这样:Domain:google.com我发现了这个用单个空格替换点的正则表达式:str.gsub!(/(?但这还不够,因为它会产生:Domain:google.com我需要保留与点一样多的空格。你会如何解决? 最佳答案 你快到了,你的正则表达式没问题,只需使用String#gsub的block版本计算替换匹配的长度:▶str='Domain:...................goo

  8. ruby - 使用 gem 自动添加 Rack 中间件 - 2

    我有一个提供一些Rack中间件的gem,让它工作的唯一方法是将它放在我的application.rb中config.middleware.use"TBBC::Editor::Middleware"当我的gem在应用程序Gemfile中使用时,如何才能自动使用此中间件? 最佳答案 如果您打算将您的gem用于Rails3,您可以提供一个Railtie。如果使用Rails,您可以自动加载它。假设您的gem名称是tbbc,将它放在lib/tbbc/railtie.rb中:moduleTBBCclassRailtie在lib/tbbc.rb中

  9. ruby-on-rails - 使用机架中间件捕获无效的 JSON 解析错误 - 2

    我正在使用Rails5,我正在尝试改进对我的API的无效JSON请求的错误处理。我尝试通过救援在Controller中解析来处理无效格式的JSON,但意识到如果用户将ContentType添加到他们的请求header,Rails中间件会在我的JSON请求到达Controller之前解析它。我遵循了以下指南:https://robots.thoughtbot.com/catching-json-parse-errors-with-custom-middleware但是,在启动服务器时出现以下错误:.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems

  10. ruby - 如何打乱字符串中每个单词的中间字母? - 2

    试图重现“只有聪明人才能读懂这篇文章”的模因。这是一个示例:Hradtoblveieetahtyoucluodaulacltyuesdnatnrdwahtyor’uerdanieg.Thephaonmnealpweorofthehmuanbairn,aoccdrnigtoarscheearchatCmabrigdeUinervtisy,sowhstahtitdeosn’tmttaerinwahtoredrtheltteersinawrodare,theolnyiprmoatnttihngistahtthefristandlsatltteerbeintherghitpclae.Thers

随机推荐