搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程

利用ICMP请求报文探测主机操作系统

1) 根据icmp地址掩码请求探测sun操作系统

对于icmp地址掩码请求,只有少数操作系统会产生相应的应答,这些系统
包括ultrix openvms, windows 95/98/98 se/me, nt below sp 4, 和 sun
solaris机器。但其中sun机器对碎片icmp地址掩码请求(fragmented icmp
address mask requests)的应答不一样,所以允许远程用户来鉴定sun主
机操作系统。

下面是通过由alfredo andres omella写的sing(http://sourceforge.net/
projects/sing)对sun solaris2.7机器正常的地址掩码请求:

# ./sing -mask ip_address
singing to ip_address (ip_address): 12 data bytes
12 bytes from ip_address: icmp_seq=0 ttl=236 mask=255.255.255.0
12 bytes from ip_address: icmp_seq=1 ttl=236 mask=255.255.255.0
12 bytes from ip_address: icmp_seq=2 ttl=236 mask=255.255.255.0
12 bytes from ip_address: icmp_seq=3 ttl=236 mask=255.255.255.0
12 bytes from ip_address: icmp_seq=4 ttl=236 mask=255.255.255.0

--- ip_address sing statistics ---
5 packets transmitted, 5 packets received, 0% packet loss

操作系统会回答一个icmp的地址掩码请求并带有其响应的网络地址掩码。

下面我们来看我们发送一些碎片请求,下面的例子是通过发送8字节的ip数
据碎片到同样上面操作的sun solaris2.7机器上,就可以看到我们获得的
回应和刚才的不一样了(-c 2是允许sing发送两个icmp地址掩码请求):

# ./sing -mask -c 2 -f 8 ip_address
singing to ip_address (ip_address): 12 data bytes
12 bytes from ip_address: icmp_seq=0 ttl=241 mask=0.0.0.0
12 bytes from ip_address: icmp_seq=1 ttl=241 mask=0.0.0.0

--- ip_address sing statistics ---
2 packets transmitted, 2 packets received, 0% packet loss

如果用tcpdump监听,有如下输出:

20:02:48.441174 ppp0 > slip139-92-208-21.tel.il.prserv.net > host_address:
icmp: address mask request (frag 13170:8@0+)
 4500 001c 3372 2000 ff01 50ab 8b5c d015
 xxxx xxxx 1100 aee3 401c 0000
20:02:48.442858 ppp0 > slip139-92-208-21.tel.il.prserv.net > host_address:
(frag 13170:4@8)
 4500 0018 3372 0001 ff01 70ae 8b5c d015
 xxxx xxxx 0000 0000
20:02:49.111427 ppp0 < host_address > slip139-92-208-21.tel.il.prserv.net:
icmp: address mask is 0x00000000 (df)
 4500 0020 3618 4000 f101 3c01 xxxx xxxx
 8b5c d015 1200 ade3 401c 0000 0000 0000

20:02:49.441492 ppp0 > slip139-92-208-21.tel.il.prserv.net > host_address:
icmp: address mask request (frag 13170:8@0+)
 4500 001c 3372 2000 ff01 50ab 8b5c d015
 xxxx xxxx 1100 ade3 401c 0100
20:02:49.442951 ppp0 > slip139-92-208-21.tel.il.prserv.net > host_address:
(frag 13170:4@8)
 4500 0018 3372 0001 ff01 70ae 8b5c d015
 xxxx xxxx 0000 0000
20:02:50.011433 ppp0 < host_address > slip139-92-208-21.tel.il.prserv.net:
icmp: address mask is 0x00000000 (df)
 4500 0020 3619 4000 f101 3c00 xxxx xxxx
 8b5c d015 1200 ace3 401c 0100 0000 0000

这样你就可以看到sun solaris回应的网络地址掩码是0.0.0.0。

我们可以使用下面的方法解决这个问题:

ndd -set /dev/ip ip_respond_to_address_mask_broadcast 0
ndd -set /dev/ip ip_respond_to_echo_broadcast 0
ndd -set /dev/ip ip_respond_to_timestamp 0
ndd -set /dev/ip ip_respond_to_timestamp_broadcast 0
ndd -set /dev/ip ip_forward_directed_broadcasts 0


2、利用icmp时间戳请求报文探测windows 98/98 se/me/2000操作系统

microsoft windows 98/98 se/me/2000 profressional/2000 server操作
系统对于将代码(code)段置为0的icmp时间戳请求报文将不产生任何应
答报文。

根据这个特性,可以通过两种格式的icmp时间戳请求探测并确定microsoft
windows的操作系统类型。首先是正常的请求报文,不产生应答报文的
windows主机的操作系统类型为microsoft windows 95、microsoft windows
nt 4.0 workstation with sp6a(及以下版本)。其它的操作系统(包括
unix系列)则会产生相应的应答报文。接着发送定制格式的时间戳请求icmp
报文,其中的代码(code)段置为非零值,windows98/98 se/me/2000
profressional/2000 server等较新版本的操作系统将不产生应答报文,
而其它操作系统则根据此请求回复正确的应答报文。

涉及(经过测试)的操作系统:
linux kernel 2.4t2; linux kernel 2.2.14; freebsd 4.0, 3.4;
openbsd 2.7 & 2.6; solaris 2.5.1, 2.6, 2.7 & 2.8; hp-ux 10.20;
aix 4.1; ultrix; microsoft windows 95 / 98 / 98se / me / nt 4 sp3,
sp4, sp6a wrst & server / 2000 professional & server.


参考:

1)sing可以到以下网址下载:

http://download.sourceforge.net/sing/sing-1.0b7.tgz

2)相关链接:

http://www.sys-security.com
http://sourceforge.net/projects/sing

()

相关文章:
© 2006   www.java-asp.net