登录后台

页面导航

本文编写于 275 天前,最后修改于 65 天前,其中某些信息可能已经过时。

Windows协议

NTLM协议

  • NTLM:身份验证协议
  • SSPI:接口
  • SSP:key 不同ssp,身份验证机制不同
  • LM Hash: DES,分为两组处理 2008开始默认禁用 明文密码14位以内,LM Hash aad3b。。。。说明空值或被禁用
  • NTLM Hash:

    • 基于md4,转十六进制 转Unicode md4
    • 存储在C:\Windows\system32\config\SAM中
    • winlogon.exe接受输入后,交给lasass.exe,其中存储一份明文密码
  • NTLM协议认证:质询响应

    • 协商 质询 认证 NTLMv1 v2 Challenge值和加密算法不同 都是用NTLMHash加密
    • Negotiate包 客户端发送启动NTLM认证
    • Challenge包 返回Chanllenge 码 16B字符串
    • Authenticate包 关键 NTLMv2 Response=NTProofStr+blob

      • LM,NTLMv1,。。。。。选择方式由LmCompatibility-Level决定
      • NTLM v2 Hash=HMAC-MD5(unicode(hex(upper(Username)+DomainName)),NTLM Hash)
      • NTProofStr=HMAC-MD5(challenge+blob,NTLMv2 Hash)
      • MIC
      • Net-NTLM v2 格式 username:domain:challenge:HMAC-MD5(指response):blob
  • 安全问题 PTH NTLM Relay

    • Net-NTLM v1 Hash破解 域控只发送NTLM响应,使用responsed监听,利用打印机漏洞或Petitpotam漏洞触发强制认证,接受v1hash,用ntlmv1获取NTLMHash,在http://crack.sh/get-cracking/解密,使用secretsdump导出所有域用户身份凭证

Keberos协议

  • 三个角色

    • 客户端 服务端 KDC(服务账户krbtgt,是创建活动目录时系统自动创建的账户,密码系统随机,运行在域控上)
    • 认证模块:AS_REQ&AS_REP和TGS_REQ&TGS_REP,拓展模块S4U(委派)PAC
  • PAC

    • 辨别用户身份权限
    • 好处是在之后的资源访问中,服务端不需要借助KDC提供完整的授权信息完成对用户权限的判断,直接根据PAC与本地的ACL比较
    • PAC顶部结构里面会有BUFFER数组
    • PAC_INFO_BUFFER装有Logon Info Client Info Type等
    • Logon Info中的PAC_LOGON_INFO包含客户端凭证信息,由KERB_VALIDATION_INFO中经过NDR编码来的,有y用户名,RID等值
    • 签名:PAC_SERVER_CHECKSUM(服务密钥签名)和PAC_PRIVSVR_CHECKSUM(KDC密钥签名)
    • KDC验证PAC,主机如果配置验证KDC PAC签名,服务端将客户端发来的ST中的PAC发给KDC校验, RPC通信,白银票据攻击
  • AS_REQ&AS_REP

    • 向KDC的AS请求TGT,身份验证通过后,KDC发放TGT
    • req中字段PA-DATA pA-ENC-TIMESTAMP用用户密码Hash加密的时间戳发送给KDC的AS,KDC查出Hash,解密,在一定范围内,认证通过,可以进行PTH。 预认证,还可以用用户密码的AES Key加密
    • 请求用户名cname,用户名和密码正确均会影响响应包内容
    • 包含请求的服务名sname
    • rep中主要两部分是ticket(也就是TGT,里面有enc-part(内部,用krbtgt的密码Hash进行加密,如果有其hash,可以自己做ticket,也就是黄金票据))和enc-part(外部)
    • TGT中的enc-part里面还有加密的Logon Session Key,以及PAC(主要通过RID,UID来辨别权限),KDC生成PAC的过程,收到req之后,取出cname,查询ad库,找到cname对应的字段,用该身份生成PAC
    • 外部的enc-part是用户hash加密的Logon Session Key,用于下阶段通信
  • TGS_REQ&TGS_REP

    • 客户端收到后,用hash解密logon_session key,本地缓存TGT和key,发送TGT票据和logonsessionkey加密的时间戳(authenticator),保护安全
    • KDC中的TGT收到后,进行三个验证

      • 用krbtgt密钥解密TGT加密的部分,得到logonsesssionkey和PAC,解密成功则说明TGT是KDC颁发
      • 验证PAC签名,正确证明未经篡改
      • 用logonsessionkey解密authenticator,解密成功,且在有效范围内,验证会话的安全性
      • rep不验证客户端是否有权限访问服务端,,只要TGT正确,都会返回ST
      • rep中主要是ST(主要也是encpart内部(service sessionkey和PAC))和encpart(外部,logonkey加密的sevicesessionkey)
      • 正常非S4u2Self请求的TGS,ST和TGT中PAC相同
  • AP-REQ&AP-REP

    • 收到TGS的rep后,用缓存的logonsessionkey解密servicekey,同时缓存拿到的ST
    • req时会携带ST,servicekey加密的时间戳(authenticator)
    • 服务端收到后会用服务密钥解密ST,得到sessionkey和pac,用session解密authenticator,成功且在一定范围内,则成功验证,从PAC中取出用户权限数据,对比ACL,生成访问令牌,检测mutual-required的值决定是否返回响应
  • 委派

    • s4u2self:任意用户请求针对自身的ST
    • s4u2proxy:用上一步获得的ST以用户的名义请求针对其他指定服务的ST
  • 攻击点

    • as-req:pth,域内用户枚举,密码喷洒
    • as-rep:黄金票据(有krbrgt密码hash,制作TGT),as-rep roasting(域用户设置不需要预认证,域控直接把tgt和hash加密的logonsessionkey返回,解密得到明文)
    • s4u:委派攻击
    • tgs-rep:白银票据(有服务的hash,构造ST)Kerberoasting攻击(TGT正确,均会返回ST,解密得到服务HASH)
    • pac:ms14-068

LDAP

  • 标准目录访问协议,面向对象
  • 对象属性:独一无二的DN,RDN是DN中用逗号分隔的表达式
  • 认证:匿名,简单密码,SASL认证
  • CLDAP:匿名访问,非详细信息
  • 可在powershell查询主机域,或用go语言编写