1. 组策略基本介绍

组策略可以控制用户帐户和计算机帐户的工作环境。它提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。有本机组策略和域的组策略。本机组策略用于计算机管理员统一管理本机以及所有用户,域内的组策略用于域管统一管理域内的所有计算机以及域用户。在本文中侧重点讲的是域内的组策略,并借机学一下域环境搭建

2. SYSVOL 漏洞(MS14-025)

SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL 文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL 在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个SYSvOL 目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:\Windows\SYSVOL\DOMAIN\Policies 目录中。

在一般的域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加人域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。但是当通过组策略统一修改密码,虽然密码强度会有所提高,这就造成了所有机器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码。

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

\\<DOMAIN>\SYSVOL\<DOMAIN>\

所有域内主机都能访问,里面保存组策略相关数据,包含登录脚本配置文件等。

例如,测试主机所在域为test.yhy,可访问共享文件夹\\test.yhy\SYSVOL\test.yhy,如下图:

Windows组策略提权实验_java

在早期的版本,某些组策略首选项可以存储加密过的密码,加密方式为AES 256,虽然目前AES 256很难被攻破,但是微软选择公开了私钥,地址:https://msdn.microsoft.com/en-us/library/cc422924.aspx

Windows组策略提权实验_java_02

如下几个组策略首选项文件中会存在可选的密码cpassword 属性:

  • Groups\Groupsx.xml

  • Services\Services.xml

  • ScheduledTasks\ScheduledTasks.xml

  • Printers\Printers.xml

  • Drives\Drives.xml

  • DataSources\DataSources.xml

3. 漏洞复现

3.1 域环境搭建

3.1.1 环境要求

环境:Windows Server 2008 R2

网络:NAT模式

Windows组策略提权实验_java_03

更改管理员Administrator 密码为强密码,例如:test.yhy@123

Windows组策略提权实验_java_04

3.1.2 添加域

点击左下角开始按钮旁边的服务器管理器,角色 ---> 添加角色

Windows组策略提权实验_java_05

选中 Active Directory 域服务

Windows组策略提权实验_java_06

一直下一步,安装即可,完成后打开“服务器管理器”,找到Active Directory安装向导,点击安装

Windows组策略提权实验_java_07

Windows组策略提权实验_java_08

Windows组策略提权实验_java_09

因为前面没配置静态IP(前面应该配置为静态IP的,不过这个环境无所谓了),这里选择是

Windows组策略提权实验_java_10

Windows组策略提权实验_java_11

点击是,下一步,设置密码:test.yhy@123,然后一直下一步,等待安装完成,之后重启电脑。

重启后,测试一下:net user /domain, ok

Windows组策略提权实验_java_12

3.1.3 安装FTP服务

虚拟机不知道为啥装不上VMware Tools,没办法拖文件,这里打开FTP服务,使用FTP上传文件。

还是点击左下角开始按钮旁边的服务器管理器,角色 ---> 添加角色

Windows组策略提权实验_java_13

选择Web服务(IIS),下一步,最下边选择FTP服务器

Windows组策略提权实验_java_14

一直下一步,直至安装完成。完成后,点击开始按钮,所有程序 ---> 管理工具 ---> Internet 信息服务(IIS)管理器

右键添加FTP站点

Windows组策略提权实验_java_15站点名称随意,物理路径,这里选择了C盘下新建文件夹,

Windows组策略提权实验_java_16

Windows组策略提权实验_java_17

Windows组策略提权实验_java_18

然后完成即可, 这时候使用FTP连接工具即可,连不上通过控制面板,关闭防火墙即可

Windows组策略提权实验_java_19

3.2 创建组策略,批量修改域中机器的本地管理员密码

3.2.1创建组策略

Win + R 打开运行 ,输入gpmc.msc ,进入组策略管理。Windows组策略提权实验_java_20        右击组策略 ---> 新建:

Windows组策略提权实验_java_21

        右击test(刚刚创建好的组策略对象)--->编辑,来到如下位置:

Windows组策略提权实验_java_22

右击本地用户和组--->新建--->本地用户

Windows组策略提权实验_java_23

其中设置的密码为hackyhy.123

回到组策略管理,设置组策略的对象,添加Domain Computers到组策略组中:

Windows组策略提权实验_java_24

查看组策略对象test的详细信息:

Windows组策略提权实验_java_25

至此,组策略配置完成,域内主机重新登录。

管理员在域中新建一个组策略后,操作系统会自动在SYSVO共享目录中生成一个XML文件,即Groups.xml,该文件中保存了该组策略更新后的密码。

Windows组策略提权实验_java_26

根据test的ID 去访问\\test.yhy\SYSVOL\test.yhy\Policie或者本地的C:\Windows\SYSVOL\domain\Policies相对应的策略。

打开,访问\Machine\Preferences\Groups,找到文件Groups.xml

Windows组策略提权实验_java_27

其中的关注点为cpasswordfjomcrwPmyEFuKDFM1WGGDUe8Ap1iGL/RsEuyDABYBI

3.2.2 漏洞利用

介绍两种简单的利用方式

  • Kali 下,将cpassword 字段复制到kali中,使用gpp-decrypt 进行破解

Windows组策略提权实验_java_28

  • msf 模块

    使用msf后渗透模块

    run post/windows/gather/credentials/gpp

    当拿到目标的session后(这里直接将msf生成的马,通过ftp上传,并执行)

Windows组策略提权实验_java_29

4. 组策略首选项提权的防御措施

在用于管理组策略的计算机上安装 KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。

此外,针对Everyone访问权限进行设置,具体如下:

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

  2. 将包含组策略密码的 XML 文件从 SYSVOL 目录中删除

  3. 不要把密码放在所有域用户都有权访问的文件中

  4. 如果需要更改域中机器的本地管理员密码,建议使用LAPS