CHQ1d 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 之前的文章《域渗透——Local Administrator Password Solution》分析了LAPS的利用率。使用LAPS最大的好处就是可以保证域内每台主机都有不同的密码,密码会定期更换。 那么,如果域中没有配置LAPS,如何批量设置域中主机的本地管理员密码?里面可以用什么? 本文将介绍如何使用SYSVOL恢复保存在组策略中的密码,分析技术细节,最后给出一些防御建议。 0x01 简介 本文将介绍以下内容: 域内共享文件夹\SYSVOL简介 一种域管理员批量修改域内主机本地管理员密码的方法 组策略中可以使用什么? 实物试验 辩护建议 0x02 域内共享文件夹\SYSVOL介绍 在域中,有一个默认的共享路径: \\\SYSVOL\\ 域中的所有主机都可以访问它,与组策略相关的数据(包括登录脚本配置文件)都存储在其中。 例如,测试主机的域是test.local,它可以访问共享文件夹\\test.local\SYSVOL\test.local,如下图所示 0x03 域管理员批量修改域内主机本地管理员密码的方法 1、测试Server 2003系统 对于server2003,如果要批量修改域中主机的本地管理员密码,通常会配置组策略来执行vbs脚本。 给出一个vbs脚本修改密码(实现方法不唯一),代码如下: strComputer=“.” set objUser=GetObject(' win nt://' str computer '/Administrator,User ') objUser。SetPassword 'domain123!' objUser。SetInfo 这种实现的最大缺点是修改后的密码将以明文形式存储在vbs脚本中。 vbs脚本通常保存在共享文件夹\SYSVOL中。 有一个隐患: 任何域用户都能读取该vbs脚本,也就能够获取脚本中保存的明文密码 2、测试Server 2008系统 关于server 2008,增加了一个新功能。您可以使用组策略首选项配置组策略批量修改用户的本地管理员密码。具体方法如下: 开始-管理工具-组策略管理 选择域test.local,右键,选择在此域创建GPO并链接到此处,如下图所示。 将名称设置为test6。 6-设置-右键-编辑-用户配置-首选项-控制面板设置-本地用户和组,如下图所示 更新,管理员(内置),设置密码,如下图所示 委托,设置权限 在详细栏中,可以看到该策略对应的ID为{ e 6424 f 10-c44b-4c 45-8527-740189 CBF 60e }。 如下图 此时,组策略配置完成,域中的主机再次登录,因此可以应用该策略。 在共享文件夹\SYSVOL中可以看到带有组策略对应ID的文件夹,如下图所示 由于我们刚刚在用户配置下修改了控制面板,我们可以在相应的文件夹下找到配置文件Groups.xml。具体路径如下: \ \ test . local \ SYSVOL \ test . local \ Policies \ { e 6424 f 10-C44B-4c 45-8527-740189 CBF 60 e } \ User \ Preferences \ Groups Groups.xml包含以下内容: ?xml版本='1.0 '编码='utf-8 '? - - 如下图 值得注意的是,cpassword项保存加密的内容“9 xlczcaj/kyldecku 6 LQ JX 3 Fe 9 gnshwkwlgan 1u” 加密方法是AES 256。虽然AES 256目前很难被破解,但微软选择公开AES 256加密的私钥。地址如下: https://msdn.microsoft.com/en-us/library/cc422924.aspx 在这个私钥的帮助下,我们可以恢复明文。 还原方法可以使用Chris Campbell @obscuresec的开源powershell脚本,地址如下: https://raw . githubusercontent . com/powershell mafia/PowerSploit/master/ex filtration/Get-GPP password . PS1 该脚本可以在域中的主机上执行,可以自动查询共享文件夹\SYSVOL中的文件,还原所有明文密码。 测试下图 当然,只是为了解密C Password=' 9 xlczcaj/kyldecku 6 LQ 1 qjx 3 Fe 9 gnshwkkwlgan1u ',我们可以简化一下上面powershell脚本的功能。 简化代码如下: 函数Get-DecryptedCpassword { [CmdletBinding()] 参数( [string] $Cpassword ) 尝试{ #根据字符串长度追加适当的填充 $Mod=($Cpassword.length % 4) 开关($Mod) { 1' {$Cpassword=$Cpassword。子字符串(0,$Cpassword。长度-1)} 2' {$Cpassword=('=' * (4 - $Mod))} 3' {$Cpassword=('=' * (4 - $Mod))} } $ base64 decoded=[Convert]:from base64 string($ Cpassword) #创建新的AES。NET加密对象 $AesObject=新对象系统。security . cryptography . AES cryptoserviceprovider [Byte[]] $AesKey=@(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8, 0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b) #将IV设置为全空,以防止动态生成IV值 $ AesIV=New-Object Byte[]($ AES Object。四.长度) $AesObject。IV=$ AesIV $AesObject。Key=$AesKey $DecryptorObject=$AesObject。CreateDecryptor() [Byte[]]$ OutBlock=$ decryptor object。transform final block($ base64 decoded,0,$Base64Decoded.length) 返回[系统。Text.UnicodeEncoding]:Unicode。GetString($OutBlock) } catch {Write-Error $Error[0]} } get-DecryptedCpassword ' 9 xlcz Caj/kyldecku 6l Q1 qjx 3 Fe 9 gnshwkkwlgan1 u ' 重置明文密码是域123!如下所示 0x04 组策略中可被利用的地方 组策略中可以使用的不仅是修改管理员密码的位置,还有以下内容: Services\Services.xml http://msdn . Microsoft . com/en-us/library/cc 980070(v=prot . 13) scheduled tasks \ scheduled tasks . XML http://msdn . Microsoft . com/en-us/library/cc 422920(v=prot . 13) http://msdn . Microsoft . com/en-us/library/DD 341350(v=prot . 13) http://msdn . Microsoft . com/en-us/library/DD 304114(v=prot . 13) 打印机\Printers.xml http://msdn . Microsoft . com/en-us/library/cc 422918(v=prot . 13) Drives\Drives.xml http://msdn . Microsoft . com/en-us/library/cc 704598(v=prot . 13) DataSources\DataSources.xml http://msdn . Microsoft . com/en-us/library/cc 422926(v=prot . 13) 注: 地点引自https://webcache.googleusercontent.com/search? q=cache:muno 5x 9 hs wuj:rew tdance . blogspot . com/2012/06/exploining-windows-2008-group-policy . html CD=6hl=enct=cln kgl=us 然而,上述位置并不是绝对的。配置时需要在组策略中填写用户名和密码,对应的Groups.xml会包含cpassword属性,可以用来恢复明文。 可以以调度任务为例,对应ScheduledTasks.xml 组策略配置的位置是:用户配置-首选项-控制面板设置-任务计划。 如下图 要创建一个新任务,需要选择运行标识,填写用户名和密码,如下图所示 否则,不包括cpassword属性,如下图所示。 现在填写一个测试密码(密码是testsuccess!假的),如下图 相应的ScheduledTasks.xml也包含cpassword属性,如下图所示 用powershell解密,密码是testsuccess! 至此,结论是: 域管理员在使用组策略批量管理域内主机时,如果配置组策略的过程中需要填入密码,那么该密码会被保存到共享文件夹\SYSVOL下,默认所有域内用户可访问,虽然被加密,但很容易被解密 这就造成了安全隐患。现实中,域管理员经常在组策略中使用域管理员密码,组策略配置文件中的密码很容易获取,导致权限提升。 为此,微软发布了补丁KB2962486,下载地址是: https://technet.microsoft.com/library/security/ms14-025 系统打补丁后,无法在组策略中设置用户名和密码,如下图所示。 当然,共享文件夹\SYSVOL下的xml文件将不再包含cpassword属性。 注: xml文件仍将与组策略同步。 0x05 防御 结合攻击方法,备选防御方法如下: 1.使用LAPS批量管理域中主机的本地管理员帐户。 2.域控制安装修补程序KB2962486 3.不要在组策略中使用域控制密码。 4.设置共享文件夹\SYSVOL的访问权限 5.使用PsPasswd批量修改域中主机的本地管理员密码。 0x06 小结 介绍了如何使用SYSVOL恢复组策略中保存的密码,并给出了一些防御建议。如果域用户的本地管理员密码被攻击者获取,默认情况下,该密码可用于域中的远程登录。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子