IPC$入侵攻防完全解惑

来源:互联网 发布:python 结束程序 linux 编辑:程序博客网 时间:2024/05/22 09:40


IPC$入侵攻防完全解惑

摘自“黑客X档案"     原作者:iqst

1,什么是IPC$?
IPC$(Internet Process Connection)是共享“命名管道”的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可建立安全通道,并以此通道进行加密数据的交换,从而实现对远程计算机的访问。IPC$是winNT/2000的一项新功能,它有一个特点,即在同一时间内,两个IP之间只允许建立一个连接,winNT/2000在提供了IPC$功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(c$,d$,e$...),所有这些,微软的初衷都是为了方便管理员的管理,但在有意无意中,导致了系统安全性的降低。
  平时我们总能听到有人在说IPC$漏洞,其实IPC$并不是一个真正意义上的漏洞,我想之所以有人这么说,一定是指微软自己安置的那个“后门”,空会话(Null session),那么什么是空会话呢?

2,什么是空会话?
在介绍空会话之前,我们有必要了解一下一个安全会话是如何建立的,在windowsNT 4.0中,是使用挑战响应协议与远程机器建立一个会话的,建立成功的会话将成为一个安全隧道,建立双方通过它互通信息,这个过程的大致顺序如下:
1,会话请求者(客户)向会话接受者(服务器)传送一个数据包,请求安全隧道的建立。
2,服务器产生一个随机的64位数(实现挑战)传送回客户。
3,客户取得这个由服务器产生的64位数,用试图建立会话的帐号的口令打乱它,将结果返回到服务器(实现响应)。
4,服务器接受响应之后,发送给本地安全验证(LSA),LSA通过使用该用户正确的口令来核实响应,以便确认请求者身份。如果请求者的帐号是服务器的本地帐号,核实本地发生,如果请求帐号是一个域的帐号,响应传送到域控制器去核实。当对挑战的响应核实为正确后,一个访问令牌产生,然后传送给客户。客户使用这个访问令牌连接到服务器上的资源,直到建议的会话被终止。
  以上是一个安全会话建立的大致过程,那么空会话又如何呢?
   空会话是在没有信任的情况下与服务器建立的会话(即未提供用户名和密码),但根据win2000的访问控制模型,空会话的建立同样需要提供一个令牌,可空会话在建立过程中并没有经过用户信息的认证,所以这个令牌中不包含用户信息,因此,这个会话不能让系统间发送加密信息,但这并不表示空会话的令牌中不包含安全标示符SID(它标示了用户和所属组),对于一个空会话,LSA提供的令牌的SID是S-1-5-7,这就是空会话的SID,用户名是:ANONYMOUS LOGON(这个用户名可在用户列表中看到,但不能在SAM数据库中找到,属于系统内置的帐号),这个访问令牌包含下面伪装的组:
Everyone
Network

在安全策略的限制下,这个空会话将被授权访问到上面两个组有权访问到的一切信息。那么建立空会话到底可以作什么呢?
  对于winNT,在默认安全设置下,借助空连接可列举目标主机上的用户和共享,访问Everyone权限的共享,访问小部分注册表等,并没有什么太大的利用价值,对windows2000的作用更小,因为在windows2000和以后的版本中,默认只有管理员和备份操作员有权从网络访问到注册表,而且实现起来也不方便,需借助工具,从这些我们可以看到,这种非信任会话并没多大用处,但从一次完整的IPC$入侵来看,空会话是一个不可缺少的跳板,因为我们从它那里可得到用户列表,而大多数弱口令扫描工具就是利用这个用户列表来进行口令猜解的,成功的导出用户列表大大增加了猜解的成功率,仅从这一点足以说明空会话所带来的安全隐患,因此说空会话毫无用处是不正确的,以下是空会话中能使用的一些具体命令:

1,首先,我们建立一个空会话(当然,这需要目标开放IPC$),命令如下:
c:/net use //目标IP/ipc$ "" /user:""
命令成功完成。

以上命令包含四个空格,net与use中间有一个,use后面一个,密码左右各一个空格。

2,查看远程主机的共享资源。
前提是建立了空连接后,用net view //对方IP  命令可查看远程主机的共享资源,如果它开了共享,可得到结果,但此命令不能显示默认共享。

3,查看远程主机的当前时间,这个大家应该都会。用net time命令

4,得到远程主机的NetBIOS用户名列表(需要打开自己的NBT)
以上是我们经常使用空会话做的事情,好像也能获得不少东西,不过要注意一点:建立IPC$连接的操作会在Event Log中留下记录,不管你是否登录成功。