通过NetBIOS入侵
所有的入侵都涉及到以root或admin权限登录到某一计算机或网络。入侵的第一步往往是对目标计算机或的端口扫描(portscan)。建立在目标计算机开放端口上的攻击是相当有效的。N T机器的端口信息的显示和UNIX的不同。因此,一般能区分出目标计算机所运行的是哪个操作系统。
攻击NT为基础的网络时,NetBIOS是首选的进攻点。
使用端口扫描软件,比如Sam,看看目标计算机的端口139是否打开。139端口是"NetBIOS session"端口,用来进行文件和打印共享的,是NT潜在的危险。注意:运行SAMBA的Linux和UNIX系统的139端口也是打开的,提供类似的文件共享。找到了这样的目标计算机后,接下来是使用" nbtstat"命令。
NBTSTAT命令是用来询问有关NetBIOS的信息的,也能清除NetBIOS 缓冲区能的内容和将LMHOSTS文件预先装入其中。通过运行这一命令能得到许多有用信息。
NBTSTAT命令解释:nbtstat [-a RemoteName] [-A IP_address] [-c] [-n] [-R] [-r] [-S] [-s] [interval]开关: -a 列出给定主机名的远程计算机的名字表(name table) -A 列出给定IP地址的远程计算机的名字表 -c 列出远程名字缓冲区(name cache),包括IP地址 -n 列出本地NetBIOS 名字 -r 列出通过广播(broadcast)和WINS解析的名字
-R 清除和重新装入远程的缓冲的名字表
-S 列出和目标IP地址会话的表
-s 列出会话表转换
NBTSTAT命令的输出的每一栏都有不同的含义,它们的标题有下面几个,含义也在下面做了相应的解释:
Input
接收到的字节数。
Output
发送的字节数。
In/Out 这个连接是来自该计算机(outbound)还是来自另外的系统(inbound)。
Life
在你的计算机清除名字表之前存在时间。
Local Name
连接时本地的名字。
Remote Host
远程计算机的名字或IP地址。
Type
一个名字可以有两种类型: unique 或group。
NetBIOS名字的最后16个字符经常代表一些内容。因为同样的名字可以在同一计算机出现几次。 该类型表示名字的最后一个字节(用16进制表示)。
State
你的NetBIOS连接将是下面几个状态之一:
State MeaningAccepting 正在处理一个进入的连接Associated 一个连接的端点已经建立,你的计算机与它以一个IP地址相关Connected 你已经联系到了远程资源。Connecting 你的会话正试图对目标资源进行名字到IP地址的解析Disconnected 你的计算机发出一个断开请求,正在等待远程计算机的响应Disconnecting 正在结束你的连接
Idle 远程计算机在当前会话已经打开,但目前不接受连接
Inbound 一个inbound会话正试图连接
Listening 远程计算机可以使用了
Outbound 你的会话正在建立一个TCP 连接
Reconnecting 如果第一次失败,它会在重新连接时显示这一信息下面是一个NBTSTAT命令的实例:
C:\nbtstat -A x.x.x.x NetBIOS Remote Machine Name Table
Name Type Status
----------------------------------------------------------------------
DATARAT UNIQUE Registered
R9LABS GROUP Registered
DATARAT UNIQUE Registered
DATARAT UNIQUE Registered
GHOST UNIQUE Registered
DATARAT UNIQUE Registered
MAC Address = 00-00-00-00-00-00
上面的输出是什么意思呢?尤其是Type这一栏,代表的是什么呢。再看看下面的表,它能告诉你什么?
Name Number Type Usage===================================================== 00 U Workstation Service 01 U Messenger Service 01 G Master Browser 03 U Messenger Service
06 U RAS Server Service
1F U NetDDE Service
20 U File Server Service
21 U RAS Client Service
22 U Exchange Interchange
23 U Exchange Store
24 U Exchange Directory
30 U Modem Sharing Server Service
31 U Modem Sharing Client Service
43 U SMS Client Remote Control
44 U SMS Admin Remote Control Tool
45 U SMS Client Remote Chat
46 U SMS Client Remote Transfer
4C U DEC Pathworks TCPIP Service
52 U DEC Pathworks TCPIP Service
87 U Exchange MTA
6A U Exchange IMC
BE U Network Monitor Agent
BF U Network Monitor Apps
03 U Messenger Service
00 G Domain Name
1B U Domain Master Browser
1C G Domain Controllers
1D U Master Browser
1E G Browser Service Elections
1C G Internet Information Server
00 U Internet Information Server
[2B] U Lotus Notes Server
IRISMULTICAST [2F] G Lotus Notes
IRISNAMESERVER [33] G Lotus Notes
Forte_$ND800ZA [20] U DCA Irmalan Gateway Service
Unique (U): 名字(name )可能只分配了一个IP地址。在一个网络设备上,多次出现一个名字已经被注册,但后缀是唯一的,从而整个条目就是唯一的。
Group (G): 普通的组(group),同一个名字可能存在多个IP地址。Multihomed (M): 名字(name)是唯一的,但由于在同一计算机上有多个网络接口,这个配置在允许注册时是必须的。地址的数目最多25个。Internet Group (I): 这是组名字的一个特殊配置,用于WinNT的域名的管理。Domain Name (D): NT 4.0里新增的。
这个表是对NBTSTAT输出中Type的解释。通过详细分析NBTSTAT命令的输出,就能收集到目标计算机的许多信息。通过分析,就能发现目标计算机正在运行什么服务,甚至可以分析安装的软件包是什么。从而就能找到空隙可以利用。下一步就是从远程计算机收集可能的用户名。一个网络登录分成两个部分:用户名和口令。一旦一个入侵者知道了用户名,他就等于成功了一半。
通过分析NBTSTAT的命令输出,入侵者就能得到任何登录到那台计算机上的用户名。在NBTSTAT输出里,类型(Type)为的就是用户名或计算机名。类型(Type)为的就表示它是一个共享的资源。
IPC$(Inter-Process Communication)共享是NT计算机上的一个标准的隐含共享,它是用于服务器之间的通信的。NT计算机通过使用这个共享来和其他的计算机连接得到不同类型的信息的。入侵者常常利用这一点来,通过使用空的I PC会话进行攻击。
有一个一个比较好的IPC会话工具:RedButton。 它是个很灵巧的程序,能登录到NT系统而不会显示用户名和口令。这个工具运行环境是NT。运行这个程序,将看到任何可能的共享,包括任何隐藏的a dmin共享(ie, shares以"$"结束。默认的,有几个这样的可以得到的共享...C$,WINNT$,IPC$等等)。
注意:IPC$共享不是一个目录,磁盘或打印机意义上的共享。你看到的"$",它是默认的在系统启动时的admin共享。IPC是指"interproce ss communications"。IPC$共享提供了登录到系统的能力。注意,你试图通过IPC$连接会在EventLog中留下记录。不管你是否登录成功。
入侵者使用下面的命令对IPC$实施攻击:
c:\net use \\[目标机器的IP地址]\ipc$ /user:
当这个连接建立后,要将username和password送去加以确认。如果你以"Administrator"登录,则需要进行口令猜测。
可以重复使用'net'命令,进行username和password猜测:
c:\net use \\xxx.xxx.xxx.xxx\ipc$ /user:
也可以使用脚本语句:
open(IPC, "net use \\xxx.xxx.xxx.xxx\ipc$ /user: | ");
NAT工具能自动完成上述功能。NAT是通过读取字典文件中的口令,进行重复登录,从而获取帐号。当然,可以编写一个脚本来实现NAT的功能。
Perl是一种很好的语言,是解释性的,如Java,但运行速度比Java快。同时,Unix系统能解释它。现在,95和NT版的Perl也已经推出。
下面这个脚本程序可以用来进行帐号和口令猜测。
----- begin script -----
# ipcchk.plx
# 该脚本从一个文本文件读入单词,并将该单词作为用户名和口令,进行
# IPC$连接。成功的连接保存到一个log文件。该脚本不检查输入参数的
# 有效性,因此必须输入目标机器的合法的IP地址。
#
# 用法: c:\perl ipcchk.plx [目标机器的IP地址]
open(TEST, "names.txt") | | die "Could not open file.";
open(LOG,"ipc.log") | | die "Could not open log.";
if (length($ARGV[0]) == 0) {
print "Usage: perl ipcchk.plx [ipaddr]";
exit(0);
}