• 前置知识


    本机用户密码 hash 放在 本地的SAM文件,域内用户密码 hash 放在 域控的NTDS.DIT文件。
    NTLM 验证的工作流程:
    t01652f775797dd2789
    1. 登录
    2. 协商,包含客户端支持和服务器请求的功能列表。
    3. 质询,包含服务器支持和同意的功能列表和 challenge
    4. 身份验证,使用用户 hash 和 chanllenge 进行加密得到 response(证明身份)
    5. 服务端和域控建立连接,把前三个消息转发给域控
    6. 域控有用户的 hash,可以加密验证

    另外 NTLM 不是单独的协议,而是嵌套在其他协议中的(http,smb等)
  • Pass the hash(哈希传递攻击)


    身份验证的 response 是之间用 hash 而不是明文密码攻击的,所有模拟用户登录的时候不需要明文密码。对应补丁 kb2871997(但只能缓解不能拿杜绝),kb2871997 对Administrator(rid500)和本地管理员组的域用户没有影响。
    这里发生作用的是远程访问上下文中的用户帐户控制(UAC)令牌筛选。
    在使用本地用户尽心远程登录时不会使用完全管理员权限(因为没过 UAC),但是在域用户被加入到本地管理员组之后,域用户可以使用完全管理员的 AccessToken 运行,且 UAC 不会生效。
    但是,如果 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy项存在(默认不存在)且配置为1,将授予来自管理员所有本地成员的远程连接完整的高完整性令牌。这意味着未过滤非RID 500帐户连接,并且可以成功传递哈希值!(可留作后门)。
    KB2871997的更改

    1. 支持“ProtectedUsers”组
      “ProtectedUsers”组是WindowsServer 2012 R2域中的安全组,“ProtectedUsers”组成员会强制使用 Kerberos 身份验证,并且对 Kerberos 强制执行 AES 加密。
    2. RestrictedAdmin RDP模式的远程桌面客户端支持
      避免将 Client 端的凭据暴露给远程系统,同时衍生出新的攻击方式(Passingthe Hash with Remote Desktop)。
    3. 注销后删除凭证
    4. 添加两个 SID
      1、本地帐户,LOCAL_ACCOUNT(S-1-5-113),所有本地帐户继承自此SID;
      2、本地帐户和管理组成员(所有本地Administrators组中的本地帐户),LOCAL_ACCOUNT_AND_MEMBER_OF_ADMINISTRATORS_GROUP(S-1-5-114),所有管理员组的本地用户继承此SID。
      

      1574139458_5dd37642a9658
    5. LSASS中删除了明文凭证
      注册表地址:HKEY_LOCAL_MACHINE\ System \ CurrentControlSet \ Control \ SecurityProviders \ WDigest
      如果UseLogonCredential值设置为0,则WDigest不会将凭据存储在内存中;
      如果UseLogonCredential值设置为1,WDigest将在内存中存储凭据。
  • 信息收集


    在质询阶段返回 Challenge 的过程中同时返回了操作系统类型,主机名,netbios名等等,可以通过给服务器发请求得到服务器信息。
  • ntlm relay


    t01f22f78b71df16680
    客户端计算完 response 之后,被中间人转发到服务端,最后服务端授予中间人访问权限。
    • Net-NTLM v1 的破解

      Responder.conf 中 的Challenge,设为 1122334455667788,在这种情况下先用使用ntlmv1-multi里面的 ntlmv1.py 转换 ,再用 https://crack.sh/get-cracking/ 就能破解了。
      其实有两种加密方式,由 NTLMSSPNEGOTIATEEXTENDED_SESSIONSECURITY 决定(0/1),其中的 NTLMSSPNEGOTIATEEXTENDED_SESSIONSECURITY 来自质询阶段。
      第一种加密(0的时候,Responder默认获取)
      1. 将 16字节的NTLM hash空填充为21个字节,然后分成三组,每组7字节
      2. 将三组(每组7字节)经过运算后作为DES加密算法的密钥(7字节凑一个奇偶叫用位补全)
      3. 加密Server Challenge
      4. 将这三个密文值连接起来得到response。

      第二种加密 (1的时候,Responder加--lm时获取)
      加密的内容不是 Server Challenge,而是 md5(server challeng+client challent) 的前8位。
    • Net-NTLM v2 的破解 & Relay

      hashcat 进行字典破解,大概率跑不出来,于是就要用 Relay 来搞了。
      1.Relay2SMB,直接 relay 到 smb 服务器,可以控制该服务器,分为两种情况
      • 工作组,不同机器没有信任关系,没什么用,攻击手段就是 reflect 回机器本身,ms08-068中有限制,在CVE-2019-1384(Ghost Potato)被绕过。
      • 域环境,如果没有限制某域用户登录到某台机器的时候,可以 relay,当然拿到了域控也可以 relay 到普通机器。

      2.Relay2EWS, relay 到 Exchange 上,从而能收发邮件,进行代理等,如果 Exchange开放在外网的话,可以直接从外网发起 relay。
      工具:https://github.com/Arno0x/NtlmRelayToEWS
      3.Relay2LDAP,三种情况:
      • 高权限用户发起 NTLM 请求,包括
        Enterprise admins
        Domain admins
        Built-in Administrators
        Backup operators
        Account operators
        

        那么就可以将任意用户拉进组,把它变成高权限用户。
      • 有 write-acl 权限,可以添加两台 acl,之后细说。
      • 普通用户权限,server2012 R2 之后,可以设置基于资源的约束委派。
  • 参考文献


标签: none

添加新评论