zoukankan      html  css  js  c++  java
  • APR欺骗


    ARP欺骗简介

      ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据监听、篡改、重放、钓鱼等攻击方式。


    ARP原理

      ARP是地址转换协议,它是一个链路层协议,工作在OSI模型的第二层,在本层和硬件接口间进行联系,同时对上层(网络层)提供服务。我们知道二层的以太网交换设备并不能识别32位的IP地址,它们是以48位以太网地址(MAC地址)传输以太网数据包的。也就是说IP数据包在局域网内部传输并不是靠IP地址而是靠MAC地址来识别目标的,因此IP地址与MAC地址之间就必须存在一种对应关系,而ARP协议就是用来确定这种对应关系的协议。

      ARP工作时,首先请求主机会发送一个含有所希望到达的IP地址的以太网广播数据包,然后目标IP的所有者会以一个含有IP和MAC地址对的数据包应答请求主机。这样请求主机就能获得要到达的IP地址对应的MAC地址,同时请求主机会将这个地址对放入自己的ARP表缓存起来,以节约不必要的ARP通信。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除。


    ARP欺骗原理

      攻击者主动发送ARP报文,发送的MAC地址为攻击者主机的MAC地址,发送者的IP地址为被攻击主机的IP地址。通过不断发送这些伪造的ARP报文,让局域网上所有的主机和网关ARP表,其对应的MAC地址均为攻击者的MAC地址,这样所有的网络流量都会发送给攻击者主机。由于ARP欺骗攻击导致了主机和网关的ARP表的不正确,这种情况我们成为ARP中毒。


    Scapy库

    1. get_if_hwaddr()  获取本机网络接口的函数
    2. getmacbyip()    通过IP地址获取MAC地址
    3. sendp                在第二层发送数据包

     Ether参数:

      dst  :  DestMACField  =  (None)

      src  :  SourceMACField  =  (None)

      type  :  XShortEnumField  =  (36864)

      构造一个以太网数据包通常需要指定目标和源MAC地址,如果不指定,默认发出的就是广播包。

      ARP类构造函数的参数列表:

      hwtype  :  XShortField  =  (1)      # 为1 代表以太网

      ptype  :  XShortEnumField  =  (2048)  # 0x0800为要映射的IP协议类型

      hwlen  :  ByteField  =  (6)

      plen  :  ByteField  =  (4)

      op  :  ShortEnumField  =  (1)       # 1代表ARP请求,2代表ARP响应

      hwsrc  :  ARPSourceMACField  =  (None)

      psrc  :  SourceIPField  =  (None)

      hwdst  :  MACFiled  =  ('00:00:00:00:00:00')

      pdst  :  IPField  =  ('0.0.0.0')


    定向欺骗

      192.168.1.23和192.168.1.18进行通信,我们想告诉192.168.1.23这台主机网关地址为192.168.1.102所在的主机,构造数据包:

      pkt = Ether(src=[1.102的MAC],dst=[1.18的MAC]) / 

          ARP(hwsrc=1.102的MAC,psrc=1.18地址,hwdst=1.18MAC, pdst=1.18 IP地址,op=2)

      上面的代码我们不论是以太网数据包还是ARP数据包,我们都明确指定了来源和目标,在ARP数据包中,我们将1.102的MAC地址和网关的IP地址进行了绑定,op取值为2,作为一个响应包被1.18接到,这样1.18会更新自己的ARP缓存表,造成中毒,从而1.18发往网关的数据包都会被发往1.102.

      如果要欺骗网关,把网关发往1.18的数据包都发送到1.102上,根据上面的代码稍作修改即可:

      pkt = Ether(src=[1.102的MAC],dst=[网关的Mac]) /

          ARP(hwsrc=1.102的MAC,psrc=1.18地址,hwdst=网关MAC,pdst=网关IP地址,op=2)

      上面构造的两个数据包都是ARP响应包,其实发送请求包也可以进行毒化,请求毒化的原理是,我们请求时候使用假的源IP和MAC地址,目标主机同样会更新自己的路由表。

      ARP请求的方式欺骗主机,构造ARP包如下:

      pkt = Ether(src=[1.102的MAC],dst=[1.18的Mac]) /

           ARP(1.102的MAC,网关IP地址,hwdst=1.18 MAC, pdst=1.18 IP地址,op=1)

      ARP请求的方式欺骗网关,构造ARP包如下:

      pkt = Ether(src=[1.102的MAC], dst=[网关的MAC])/

          ARP(1.102的MAC,1.18的地址,hwdst=网关MAC,pdst=网关IP地址,op=1)


    广播欺骗

      广播欺骗,首先以太网数据包直接构造一个广播包,ARP包不用填写目标主机的信息即可。

      ARP广播响应包的构造方式:

      pkt = Ether(src=mac, dst='ff:ff:ff:ff:ff:ff')/ARP(hwsrc=mac, psrc=args[0],op=2)

      

      广播欺骗公式:

      pkt = Ether(src=攻击者MAC,dst=被欺骗主机(或网关)MAC) / 

        ARP(hwsrc=毒化记录中的MAC,psrc=毒化记录中的IP,hwdst=被欺骗主机MAC,pdst=被欺骗主机IP地址, op =1 (或2))


    参考链接

    http://www.cnblogs.com/xuanhun/p/5802573.html

  • 相关阅读:
    第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树
    POJ1050 To the Max 最大子矩阵
    POJ1259 The Picnic 最大空凸包问题 DP
    POJ 3734 Blocks 矩阵递推
    POJ2686 Traveling by Stagecoach 状态压缩DP
    iOS上架ipa上传问题那些事
    深入浅出iOS事件机制
    iOS如何跳到系统设置里的各种设置界面
    坑爹的私有API
    业务层网络请求封装
  • 原文地址:https://www.cnblogs.com/blacksunny/p/7018190.html
Copyright © 2011-2022 走看看