【文章标题】: ARP攻击工具DIY
【文章作者】: Root
【作者邮箱】: cppcoffee@gmail.com
【作者主页】: http://hi.baidu.com/cppcoffee/home
【软件名称】: ARP攻击工具 by Root
【下载地址】: 附件
【编写语言】: WTL、WinPcap
【软件介绍】: IP地址冲突攻击、网关欺骗攻击
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  菜鸟的作品,大牛请飘过:)
首先感谢下Debug0's 大牛的文章,不会让我在寻找ARP攻击资料的google的海量结果中淹没
Debug0's 大牛的文章传送门:http://hi.baidu.com/yinyi_k/blog/ite...d7f3e6fe2.html
   由于上次重装系统,不小心将自己的一些源码删除了 - -b,这些天抽了点时间将ARP攻击工具重写下,重温下WinPcap的使用,俗话说:有舍才有得。心态要摆好,嘿嘿:)
  先说下源码(见附件)的编译环境:使用的是WTL和WinPcap。
  为了保证文章的完整,这里还是需要介绍下ARP的相关信息和原理,可以略过:P

  ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个 主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发 送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。 
   
  每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的。下面就ARP数据包的各种类型作个简要说明。

  下面给出实体的ARP例子,ARP分为请求包和相应包,ARP的封包包含了【物理帧头】和【ARP帧】,这样就组成了一个完整的ARP包。
  下图是用Wireshark捕获到的ARP请求包数据(文字的颜色尽量跟图片的颜色相同)
  
  格式解析如下,末尾的[x/y]表示x是数据包的起始位置,y是数据包的长度(以字节为单位)。
  【物理帧头】
  接收方MAC:    
FF:FF:FF:FF:FF:FF[0/8]    
  发送方MAC:    
00:0A:EB:ED:8E:4C[8/8]
  协议类型 :    0806[12/2]        // 这里的0x0806是ARP协议值
  【ARP帧】
  硬件类型:     0001[14/2]        // 以太网
  协议类型:     8000[16/2]
  硬件地址长度: 06[18/1]
  协议地址长度: 04[19/1]
  操作类型:     0001[20/2]        // 操作码1为请求包,2为应答包
  源物理地址:   00:0A:EB:ED:8E:4C[22/6]
  源IP地址:     192.168.0.1[26/4]    // C0A80001
  目标物理地址: 00:00:00:00:00:00[32/6]
  目标IP地址:   192.168.0.55[38/4]    // C0A80037
  额外数据:     18字节[42/18]
  从上面的数据得知,这个是一个请求包,来自网关192.168.0.1,网关询问谁拥有192.168.0.55这个IP地址。请注意:请求包的接收方MAC是FF:FF:FF:FF:FF:FF。

  下面用Wireshark捕获到的ARP应答包数据(这个包没有额外数据)
 
  
   【物理帧头】 
  接收方MAC:    00:0A:EB:ED:8E:4C[0/8]    
  发送方MAC:    B8:AC:6F:5B:DD:61[8/8]
  协议类型 :    0806[12/2]        // 这里的0x0806是ARP协议值
  【ARP帧】
  硬件类型:     0001[14/2]        // 以太网
  协议类型:     8000[16/2]
  硬件地址长度: 06[18/1]
  协议地址长度: 04[19/1]
  操作类型:     0002[20/2]        // 操作码1为请求包,2为应答包
  源物理地址:   B8:AC:6F:5B:DD:61[22/6]
  源IP地址:     192.168.0.123[26/4]    // C0A8007B
  目标物理地址: 00:0A:EB:ED:8E:4C[32/6]
  目标IP地址:   192.168.0.1[38/4]    // C0A80001
  额外数据:     无额外数据
  上面这个请求包来自192.168.0.123,发送给网关192.168.0.1,告诉网关192.168.0.123的MAC地址是B8:AC:6F:5B:DD:61,让网关更新ARP缓存表,这样就可以和网关进行通信了。
  以上两种数据包在局域网中很普遍,可以是网关和其他机器发起请求,本机应答。也可以是本机向网关或别的机器发起请求,网关或者别的机器应答。

  下面给出几个ARP攻击包的相关数据
   
  这个包是为了检查局域网中是否有与自己的IP有相同的计算机。如果局域网内有与自己相同的IP,就会发出应答包,也就是我们常看到的系统报告IP冲突。
  IP地址冲突ARP包
  【物理帧头】
  接收方MAC:    FF:FF:FF:FF:FF:FF[0/8]    
  发送方MAC:    00:0A:EB:ED:8E:4C[8/8]
  协议类型 :    0806[12/2]
  【ARP帧】
  硬件类型:     0001[14/2]
  协议类型:     8000[16/2]
  硬件地址长度: 06[18/1]
  协议地址长度: 04[19/1]
  操作类型:     0001[20/2]            // 这是一个请求包
  源物理地址:   00:0A:EB:ED:8E:4C[22/6]
  源IP地址:     192.168.0.123[26/4]    // 注意这里(源IP和目标IP相同) C0A8007B
  目标物理地址: 00:00:00:00:00:00[32/6]
  目标IP地址:   192.168.0.123[38/4]    // 注意这里(源IP和目标IP相同) C0A8007B
  额外数据:     18字节[42/18]
  以上的数据是让192.168.0.123的计算机出现地址冲突包。

  以下是伪造网关广播包,当然,这个功能只有网关才有,我们可以伪造一个出来。
 
  网关伪造广播包
  【物理帧头】
  接收方MAC:    FF:FF:FF:FF:FF:FF[0/8]    
  发送方MAC:    00:0A:EB:ED:8E:4C[8/8]    // 这里是网关的MAC
  协议类型 :    0806[12/2]
  【ARP帧】
  硬件类型:     0001[14/2]
  协议类型:     8000[16/2]
  硬件地址长度: 06[18/1]
  协议地址长度: 04[19/1]
  操作类型:     0001[20/2]            // 这是一个请求包
  源物理地址:   B8:AC:6F:5B:DD:61[22/6]    // 这里修改成我们自己的MAC,或者其他任意值(用来伪造网关的MAC)
  源IP地址:    192.168.0.1[26/4]        // 网关的IP
  目标物理地址: A0:12:DC:E9:2C:9D[32/6]    // 要欺骗计算机的MAC,这里是192.168.0.55的MAC
  目标IP地址:   192.168.0.55[38/4]
  额外数据:     18字节[42/18]
  这个包是告诉192.168.0.55网关的新MAC地址,让192.168.0.55刷新自身的ARP缓存。这样就达到了对192.168.0.55的网关攻击,发包后192.168.0.55将无法上网。因为它无法找到正确的网关了。
  因为这个攻击工具用的是请求包攻击,当然还有请求包攻击,这里为了不使文章过于太长,将相关的攻击信息放到附件中:)

  在这里贴下程序的工作流程:)
 
  
  
   自动攻击流程->设置自动攻击标志位->设置相关按钮和菜单的状态->启动定时器,定时发包:) 
  // ArpAttack 项目文件夹说明by Root
  .\                WTL生成的文件
  .\Thread          线程相关类
  .\Controls        扩展控件
  .\Dialog          对话框类
  .\Common          常用的类(如:ARP类,ARP结构体文件,ARP攻击者)


  // 类设计说明
  
  CAboutDlg         "关于"对话框类
  CArpCacheItemsDlg "ARP缓存项"对话框类
  CArpSender        包发送者,对WinPcap的封装
  CIpInfoListCtrl   网络IP地址列表ListCtrl
  CScanSegmentDlg   扫描网络段对话框类
  CSelAdapterDlg    网卡选择对话框类
  CAttacker         ARP攻击者,封装了攻击的函数

  CBaseThread       线程基类
 
    |
    -- CCapArpThread  捕获ARP包线程
    |
    -- CScanThread    扫描网段的发包线程


  // 通用文件
  
  DataStruct.h      包含了数据包的定义和Virtual ListCtrl数据的定义

--------------------------------------------------------------------------------
 
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2011年01月25日 16:49:42

上传的附件 ARP攻击工具 by Root.rar
ARP攻击相关资料.rar