admin 管理员组文章数量: 887006
CATALOG
- 1.前言
- 2.windows命名管道
- 3.msf中getsystem原理
- 4.参考文章
1.前言
之前已经写过了winodws命名管道相关的知识,在我的由psexec远控的实现原理到windows命名管道这篇文章中,最近复习的时候又看到了,同时对其有了新的理解,进而又想起了msf中getsystem的原理发现两者刚好有所关联,于是有了这篇文章。
2.windows命名管道
首先我们需要明确的一点,命名管道基于smb协议通信,smb,smb。重要的事情说三遍。
它是用来让两个进程间进行通信的,这两个进程可以是本地进程,也可以是远程进程。命名管道有点类似于socket连接,是用来传输数据的,可以设置具体的权限让指定权限的进程才能连接命名管道,理论上每个程序都能连接命名管道,只是连接之后能做的事情不同,具体能做什么事跟服务端的配置有关系。
下面总结几点:
1.命名管道是C/S架构,必须让服务端某个进程先创建命名管道。
2.命名管道可以被任何符合权限的进程去访问,且何种权限可以访问是可以自定义的。
3.客户端可以是本地的某个进程或者远程的某个进程,本地进程访问命名管道方式为.\pipe\pipename,远程进程访问命名管道方法为\ip\pipe\pipename。
4.在powershell中使用dir .\pipe\ | select name可以查看当前所有命名管道的名称。
命名管道还有一个特点就是当服务端进程被客户端进程连接的时候,理论上说服务端进程有可能获取到客户端的权限。ImpersonateNamedPipeClient()这个api可以帮助我们进行实现,前提是我们当前用户具有SeImpersontePrivilege权限。
3.msf中getsystem原理
1.创建一个以system权限启动的程序,这个程序的作用是连接指定的命名管道。
2.创建一个进程,并让进程创建命名管道。
3.让之前的以system权限启动的程序启动并连接这个命名管道。
4.利用ImpersonateNamedPipeClient()函数生成system权限的token。
5.利用system权限的token启动cmd.exe。
我们模拟一下这个过程:
在一个拥有SeImpersonatePrivilege权限的用户(User组)启动一个进程,这个进程的作用是创建一个命名管道等待连接,连接成功后模拟客户端的权限,并用这个权限启动一个cmd窗口。
1.查看当前用户权限:
2.启动创建命名管道的脚本:
脚本下载地址:pipeserverimpersonate
3.在administrator组用户的cmd中连接test1用户创建的命名管道:
4.弹出一个新的cmd窗口,查看权限发现是administrator用户的:
4.参考文章
Windows Named Pipes & Impersonation
msf手册
版权声明:本文标题:msf的getsystem命令原理与windows命名管道 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1733296045h1572503.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论