“Meterpreter的getsystem命令是非常nice的!在输入getsystem的命令之后,Meterpreter就会神奇的将权限从本地管理员提升为SYSTEM用户。”
到底发生了什么事?
getsystem命令包含有三种技术,前两个基于命名管道模拟,最后一个依靠令牌复制。
代码语言:javascript复制meterpreter > getsystem -h
Usage: getsystem [options]
Attempt to elevate your privilege to that of local system.
OPTIONS:
-h Help Banner.
-t The technique to use. (Default to '0').
0 : All techniques available
1 : Service - Named Pipe Impersonation (In Memory/Admin)
2 : Service - Named Pipe Impersonation (Dropper/Admin)
3 : Service - Token Duplication (In Memory/Admin)
让我们来了解一下原理:
················
技术 1
················
Meterpreter将创建一个命名管道,并且还创建并运行一个服务,该服务运行
代码语言:javascript复制cmd.exe /c echo “some data” > \.pipe[random pipe here]
生成的cmd.exe连接到Meterpreter的命名管道时,Meterpreter将有机会模拟该服务安全上下文(模仿客户端是一个命名管道功能),服务的上下文是SYSTEM权限,所以将获得SYSTEM权限。
················
技术 2
················
类似于技术1,它创建一个命名管道并模拟第一个客户端的服务安全上下文并与其连接。若要使用SYSTEM用户上下文创建客户端,此技术将DLL拖放到磁盘上,并将rundll32.exe安排为服务,以将DLL作为SYSTEM运行,然后将DLL连接到命名管道,获得SYSTEM权限。
感兴趣得可以看看elevate_via_service_namedpipe2在Meterpreter的源代码,研究一下这种技术。注意:该技术将文件拖放到磁盘上。这也是反病毒木马软件查杀的依据。
················
技术 3
················
该技术将假定当前能使用SeDebugPrivileges-getprivs,它将遍历所有打开的服务,以找到以SYSTEM身份运行且有权注入的服务。如果找到了,它将使用反射性DLL注入技术在找到的服务的内存空间中运行lifter.dll,这时候会将当前线程ID(来自Meterpreter)传递给lift.dll,lift.dll运行时,lifter.dll会获取SYSTEM令牌,在Meterpreter中打开主线程,然后尝试将SYSTEM令牌应用于该线程。该技术的实现仅限于x86环境,从隐藏的方面来讲,它不需要产生新的过程,它完全在内存中进行,动静很小。
················
专业名词参考链接
················
安全上下文:https://blog.csdn.net/lixinms/article/details/5148622
命名管道:https://www.anquanke.com/post/id/190207#h3-7
反射DLL注入:https://www.cnblogs.com/h2zZhou/p/7721797.html
此文章仅供学习参考,不得用于违法犯罪!
转载此文章,请标明出处。
关注此公众号,各种福利领不停,每天一个hacker小技巧
轻轻松松学习hacker技术!