目录
前言
首先,这是一个过时的漏洞,2014年微软已经修复了,实战中也很少会出现这个漏洞。这里主要了解其原理与利用方式
一、组策略首选项提权
Windows 2008 Server引入了一项称为组策略首选项(Group Policy Preferences)的新功能,该功能使管理员可以部署影响域中计算机/用户的特定配置。通过在组策略管理控制台中配置的组策略首选项,管理员可以推出多种策略,例如,批量修改域内机器的本地管理员账号名称与密码。
二、组策略的发展
域环境下密码难题
在Windows server 2003中,想要批量修改域内主机本地管理员密码,常常通过配置组策略执行vbs脚本的方式,贴三好学生大佬的代码:
strComputer = "."Set objUser = GetObject("WinNT://" & strComputer & "/Administrator, user")
objUser.SetPassword "domain123!"
objUser.SetInfo
这种方式十分简便,但也存在着极大的弊端,弊端在于修改后的密码会明文保存在vbs脚本中 而该vbs脚本通常会保存在共享文件夹SYSVOL 这就存在一个隐患: 任何域用户都能读取该vbs脚本,也就能够获取脚本中保存的明文密码。
SYSVOL
SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,所有的认证用户都可以读取。SYSVOL包括登录脚本,组策略数据,以及其他域控所需要的域数据,这是因为SYSVOL能在所有域控里进行自动同步和共享。
c:\Windows\SYSVOL\domain\Policies
域内机器通过访问如下,就能访问到组策略存储位置
\\域控ip\SYSVOL\域名\Policies\
组策略偏好GPP
在2006年,微软收购了桌面标准的“PolicyMaker”,并重新借此与win2008发布了GPP(Group Policy Preferences)。其中GPP最有用的特性,是在某些场景存储和使用凭据,其中包括:
映射驱动(Drives.xml)创建本地用户数据源(DataSources.xml)打印机配置(Printers.xml)创建/更新服务(Services.xml)计划任务(ScheduledTasks.xml)更改本地Administrator密码
在一般域环境中所有机器都是脚本化批量部署的,数据量很大,为了方便对所有机器进行操作。网管会使用域策略进行统一的配置和管理,大多数组织在创建域环境后会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员的安全性,这些组织的网络管理员往往会修改本地管理员密码。
通过组策略修改密码,若攻击者获得一台机器的本地管理员密码,就相当于获取整个域中所有机器的本地管理员密码。
三、组策略首选项提权的实现
环境搭建—批量修改本地管理员密码
环境是很重要的,组策略首选项功能是Windows 2008 Server引入的,并且08之后的版本都已经打过该漏洞的补丁,所以我选择的实验域控机器为server 2008 R2服务器。这里我们直接针对整个域,将域内所有的机器的本地管理员密码都进行修改
- 域控:win2008 r2
- 域成员:win7
1. 创建组策略
在运行
中输入,gpmc.msc
,进入组策略管理。点击编辑
来到如下位置:
右击本地用户和组
–>新建
–>本地用户
:
操作
–>更新,其中的密码为654321
接着计算机运行“gpupdate"刷新策略,然后域内机器也运行“gpupdate"刷新策略
查看组策略对象test1
的详细信息,可到该组策略对应的ID为:xxxx84F9(因实验原因,下文的ID被修改了)
至此,组策略配置完成,域内主机win7重新登录本地管理员,本地管理员被修改为hacker,密码为654321。sid最后几位为500说明为内置管理员
管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,即
Groups.xml
,该文件中保存了该组策略更新后的密码。
可在目录下C:\Windows\SYSVOL\domain\Policies
查看ID相对应的策略。
继续查看,找到文件Groups.xml
,路径为:
点击查看,其中的关注点为cpassword
:
获取组策略的凭据
上面我们直接在域控中找到了Groups.xml文件,并找到了其加密密文。如果我们直接拿到的是域内主机的权限了?
因为任何域用户和域信任的用户均可对该共享目录进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账号、密码的本地管理员计算机。在SYSVOL中搜索,可以找到Groups.xml文件
dir \\域控ip\sysvol\域名\Policies
虽然域控的防火墙都开着,但还是一样可以访问
查看Groups.xml内容
type \\域控ip\sysvol\域名\Policies\{ID值}\Machine\Preferences\Groups\Groups.xml
此密码的加密方式为AES-256
。尽管此加密十分难以破解,但是微软公司将其加密的密钥公开了。所以破解还是很简单的
密码破解方式
kali中的gpp-decrypt
针对此密码,我们可以直接使用kali中自带的命令gpp-decrypt
进行破解
msf模块
该模块可以获取组策略中的密码,我们只需要获取域内任何一台以域用户权限登录的机器的权限即可。域防火墙需要关闭才能执行如下,否则会失败
run post/windows/gather/credentials/gpp
利用Get-GPPPassword.ps1
我们利用的是其中的Get-GPPPassword
模块。
检索通过组策略首选项推送的帐户的明文密码和其他信息。
powershell -exec bypass Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword
域控机器上执行如下
域内机器执行
Net-GPPPassword.exe
地址:https://github.com/outflanknl/Net-GPPPassword/releases/tag/v1
直接执行exe程序
权限提升
通过上面的方式,我们获取了账号密码(hacker/654321),下面尝试ipc进行登录。成功从域普通用户上升到管理员
四、防御
在用于管理组策略的计算机上安装 KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,针对Everyone访问权限进行设置,具体如下:
1、设置共享文件夹SYSVOL的访问权限
2、将包含组策略密码的 XML 文件从 SYSVOL 目录中删除
3、不要把密码放在所有域用户都有权访问的文件中
4、如果需要更改域中机器的本地管理员密码,建议使用LAPS
五、总结
- 漏洞原因:管理员可以通过在组策略首选项中一键给域中计算机下发策略,其策略信息如组策略数据、域数据存储在SYSVOL文件夹中,域用户都可以访问该文件夹。若通过组策略修改域内机器管理员密码,其密文信息会保存在SYSVOL文件夹内。攻击者如果获取了该密码信息就可以破解,相当于就获取到了管理员密码
- 局限性:win < = 2008r2或没有打 KB2962486补丁