一 前言 网上关于ipc$入侵的文章可谓多如牛毛而且也不乏优秀之作攻击步骤甚至可以说已经成为经典的模式因此也没人愿意再把这已经成为定式的东西拿出来摆弄 不过话虽这样说但我个人认为这些文章讲解的并不详细对于第一次接触ipc$的菜鸟来说简单的罗列步骤并不能解答他们的种种迷惑(你随便找一个hack论坛搜一下ipc$看看存在的疑惑有多少)因此我参考了网上的一些资料教程以及论坛帖子写了这篇总结性质的文章想把一些容易混淆容易迷惑人的问题说清楚让大家不要总徘徊在原地! 注意本文所讨论的各种情况均默认发生在win NT/环境下win将不在此次讨论之列而鑒于win Xp在安全设置上有所提高个别操作并不适用有机会将单独讨论 二 什么是ipc$ IPC$(Internet Process Connection)是共享命名管道的资源它是为了让进程间通信而开放的命名管道通过提供可信任的用户名和口令连接双方可以建立安全的通道并以此通道进行加密数据的交换从而实现对远程计算机的访问IPC$是NT/的一项新功能它有一个特点即在同一时间内两个IP之间只允许建立一个连接NT/在提供了ipc$功能的同时在初次安装系统时还打开了默认共享即所有的逻辑共享(c$d$e$……)和系统目录winnt或windows(admin$)共享所有的这些微软的初衷都是为了方便管理员的管理但在有意无意中导致了系统安全性的降低 平时我们总能听到有人在说ipc$漏洞ipc$漏洞其实ipc$并不是一个真正意义上的漏洞我想之所以有人这么说一定是指微软自己安置的那个后门空会话(Null session)那么什么是空会话呢? 三 什么是空会话 在介绍空会话之前我们有必要了解一下一个安全会话是如何建立的 在Windows NT 中是使用挑战响应协议与远程机器建立一个会话的建立成功的会话将成为一个安全隧道建立双方通过它互通信息这个过程的大致顺序如下 )会话请求者(客户)向会话接收者(服务器)传送一个数据包请求安全隧道的建立 )服务器产生一个随机的位数(实现挑战)传送回客户 )客户取得这个由服务器产生的位数用试图建立会话的帐号的口令打乱它将结果返回到服务器(实现响应) )服务器接受响应后发送给本地安全验证(LSA)LSA通过使用该用户正确的口令来核实响应以便确认请求者身份如果请求者的帐号是服务器的本地帐号核实本地发生如果请求的帐号是一个域的帐号响应传送到域控制器去核实当对挑战的响应核实为正确后一个访问令牌产生然后传送给客户客户使用这个访问令牌连接到服务器上的资源直到建议的会话被终止 以上是一个安全会话建立的大致过程那么空会话又如何呢? 空会话是在没有信任的情况下与服务器建立的会话(即未提供用户名与密码)但根据WIN的访问控制模型空会话的建立同样需要提供一个令牌可是空会话在建立过程中并没有经过用户信息的认证所以这个令牌中不包含用户信息因此这个会话不能让系统间发送加密信息但这并不表示空会话的令牌中不包含安全标识符SID(它标识了用户和所属组)对于一个空会话LSA提供的令牌的SID是S这就是空会话的SID用户名是ANONYMOUS LOGON(这个用户名是可以在用户列表中看到的但是是不能在SAM数据库中找到属于系统内置的帐号)这个访问令牌包含下面伪装的组 Everyone Network 在安全策略的限制下这个空会话将被授权访问到上面两个组有权访问到的一切信息那么建立空会话到底可以作什么呢? 四 空会话可以做什么 对于NT在默认安全设置下借助空连接可以列举目标主机上的用户和共享访问everyone权限的共享访问小部分注册表等并没有什么太大的利用价值对作用更小因为在Windows 和以后版本中默认只有管理员和备份操作员有权从网络访问到注册表而且实现起来也不方便需借助工具从这些我们可以看到这种非信任会话并没有多大的用处但从一次完整的ipc$入侵来看空会话是一个不可缺少的跳板因为我们从它那里可以得到户列表这对于一个老练的黑客已经足够了以下是空会话中能够使用的具体命令 首先我们先建立一个空会话(需要目标开放ipc$) 命令net use \\ip\ipc$ /user: 注意上面的命令包括四个空格net与use中间有一个空格use后面一个密码左右各一个空格 查看远程主机的共享资源 命令net view \\IP 解释建立了空连接后用此命令可以查看远程主机的共享资源如果它开了共享可以得到如下类似类似结果 在 \\****的共享资源 资源共享名 类型 用途 注释
NETLOGON Disk Logon server share SYSVOL Disk Logon server share 命令成功完成 查看远程主机的当前时间 命令net time \\IP 解释用此命令可以得到一个远程主机的当前时间 得到远程主机的NetBIOS用户名列表(需要打开自己的NBT) nbtstat A IP 用此命令可以得到一个远程主机的NetBIOS用户名列表(需要你的netbios支持)返回如下结果 Node IpAddress: [****] Scope Id: [] NetBIOS Remote Machine Name Table Name Type Status
SERVER <00> UNIQUE Registered OYAMANISHIH <00> GROUP Registered OYAMANISHIH <1C> GROUP Registered SERVER <20> UNIQUE Registered OYAMANISHIH <1B> UNIQUE Registered OYAMANISHIH <1E> GROUP Registered SERVER <03> UNIQUE Registered OYAMANISHIH <1D> UNIQUE Registered __MSBROWSE__<01> GROUP Registered INet~Services <1C> GROUP Registered IS~SERVER<00> UNIQUE Registered MAC Address = BAD 以上就是我们经常使用空会话做的事情好像也能获得不少东西哟不过要注意一点建立IPC$连接的操作会在EventLog中留下记录不管你是否登录成功 好了那么下面我们就来看看ipc$所使用的端口是什么? 五 ipc$所使用的端口 首先我们来了解一些基础知识 SMB:(Server Message Block) Windows协议族用于文件打印共享的服务 NBT:(NETBios Over TCP/IP)使用(UDP)(UDP)(TCP)端口实现基于TCP/IP协议的NETBIOS网络互联 在WindowsNT中SMB基于NBT实现而在Windows中SMB除了基于NBT实现还可以直接通过端口实现 有了这些基础知识我们就可以进一步来讨论访问网络共享对端口的选择了 对于win客户端来说 如果在允许NBT的情况下连接服务器时客户端会同时尝试访问和端口如果端口有响应那么就发送RST包给端口断开连接用端口进行会话当端口无响应时才使用端口如果两个端口都没有响应则会话失败 如果在禁止NBT的情况下连接服务器时那么客户端只会尝试访问端口如果端口无响应那么会话失败由此可见禁止了NBT后的win 对win NT的共享访问将会失败 对于win服务器端来说 如果允许NBT 那么UDP端口 TCP 端口 将开放 如果禁止NBT那么只有端口开放 我们建立的ipc$会话对端口的选择同样遵守以上原则显而易见如果远程服务器没有监听或端口ipc$会话是无法建立的 六 ipc$连接在hack攻击中的意义 就像上面所说的即使你建立了一个空的连接你也可以获得不少的信息(而这些信息往往是入侵中必不可少的)如果你能够以某一个具有一定权限的用户身份登陆的话那么你就会得到相应的权限显然如果你以管理员身份登陆嘿嘿那你可就了不得了基本上可以为所欲为了不过你也不要高兴的太早因为管理员的密码不是那么好搞到的虽然会有一些粗心的管理员存在弱口令但这毕竟是少数而且现在不比从前了随着人们安全意识的提高管理员们也愈加小心了得到管理员密码将会越来越难的因此今后你最大的可能就是以极小的权限甚至是没有权限进行连接甚至在主机不开启ipc$共享时你根本就无法连接你会慢慢的发现ipc$连接并不是万能的所以不要奢望每次连接都能成功那是不现实的 是不是有些灰心?倒也不用关键是我们要摆正心态不要把ipc$入侵当作终极武器不要认为它战无不胜它只是很多入侵方法中的一种你有可能利用它一击必杀也有可能一无所获这些都是正常的在黑客的世界里不是每条大路都能通往罗马但总有一条路会通往罗马耐心的寻找吧! 七 ipc$连接失败的常见原因 以下是一些常见的导致ipc$连接失败的原因 IPC连接是Windows NT及以上系统中特有的功能由于其需要用到Windows NT中很多DLL函数所以不能在Windows x/Me系统中运行也就是说只有nt//xp才可以相互建立ipc$连接 |