在你的红队或渗透测试活动中,升级到 Windows 机器上的SYSTEM 始终是期望的目标。SYSTEM 用户是具有最高权限的特殊操作系统用户,许多后期利用技术都需要这种类型的访问权限。
当然,为了获得 SYSTEM 权限,你必须成为管理员组的一部分,或者使用一些特殊的令牌窃取/模仿技术(例如: 孤独的土豆),或者只是利用一些未修补的漏洞……
如果你有管理员权限,有很多技巧或工具可以帮助你提升权限。最常见的是 Sysinternals 的著名实用程序“psexec”,但也有其他依赖于命名管道或令牌模拟的工具。我想你们每个人都使用过 meterpreter 控制台中的“getsystem”命令😉
在本文中,我将向您展示如何使用“父进程”技术。当然,这并不是什么新鲜事,但我只是想将所有内容尽可能地放在一个 powershell 脚本中。(您知道这有多重要)。
首先介绍一点理论。通常,当一个进程启动一个子进程时,它就成为子进程的父进程。但是从 Windows Vista 开始,可以改变这种行为。如果我们创建一个新进程,同时设置父进程属性,子进程将继承指定父进程的令牌并模拟这个进程。因此,如果我们创建一个新进程,将父 PID 设置为 SYSTEM 拥有的进程,我们就成功了!
当然,我们需要拥有提升的权限才能从父进程句柄创建进程,通常是管理员拥有的seDebugPrivilege(注意:如果普通用户也拥有此权限,那么他就拥有了王国的钥匙!)。请记住,此权限仅在提升的命令提示符下可用。只需使用以下命令检查它:
PS> whoami /priv
理论就是这样,现在我们必须使用 Windows API 来完成我们的任务。
首先,我们需要在 STARTUPINFO 结构中创建一个属性,获取父 SYSTEM 进程句柄并指示 CreateProcess ()调用使用这些附加信息。
在 C++ 或 C# 中执行此操作相对容易,但在 powershell 中可能是一项棘手的任务,所以我决定将 C# 嵌入到我的 .ps1 脚本中。如您所知,可以从 powershell 执行 C# 代码,反之亦然。
该脚本可以在这里找到: https://github.com/decoder-it/psgetsystem
要执行它,请从提升的 Powershell 提示符启动:
PS> . .psgetsys.ps1
PS> [MyProcess]::CreateProcessFromParent(<system_pid>,<command_to_execute>)
我们还可以在脚本末尾添加“自动调用”:
Add-Type -TypeDefinition $mycode
[MyProcess]::CreateProcessFromParent($args[
0
],$args[
1
])
并调用它:
.
psgetsys
.ps1
808
c
:
windows
system32
cmd
.exe
最后但同样重要的是,如果 SeDebugPrivilege 存在但未启用怎么办?在 C# 中插入适当的指令并不难……不是吗?
就这样
Getting SYSTEM
https:
//decoder.cloud/2018/02/02/getting-system/
原文始发于微信公众号(Ots安全):红队活动 SYSTEM 权限提升
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论