windows认证机制以及常见密码获取工具分析

概述

  • 先来了解一下lsass进程。
    Local Security Authority Subsystem Service (LSASS) is a process in Microsoft Windows operating systems that is responsible for enforcing the security policy on the system. It verifies users logging on to a Windows computer or server, handles password changes, and creates access tokens.link
  • NTLM
  • Kerberos

    SAM

  • SAM security account manager 账户安全管理。存放位置
    1
    2
    %SystemRoot%/system32/config/SAM
     HKEY_LOCAL_MACHINE\SAM

Windows一旦启动 无法读取,但是可以通过读取内存的方法进行读取。

  • 这里有个点就是rid劫持(修改F键中值F5位F4)
    rid劫持参考

    LM hash、NTLM hash和NetNTLM

  • 在Windows系统中,比较常见是从系统导出来的NTLM hash,通过Hashcat能够破解出明文密码。

  • Hashcat支持超过200种高度优化的hash算法,其中和NTLM hash相关的有4个,分别为NetNTLMv1、NetNTLMv1+ESS、NetNTLMv2和NTLM。Hashcat支持的哈希算法:https://hashcat.net/wiki/doku.php?id=example_hashes

  • 自Windows Vista和Windows Server 2008开始,Windows取消LM hash,但某些工具的参数需要填写固定格式LM hash:NT hash,可以将LM hash填0(LM hash可以为任意值),即00000000000000000000000000000000:NT hash

  • NTHash (又称作NTLM),现代操作系统都是用的这种格式密码,我们可以通过dump SAM文件或者使用mimikatz获取到,此外它还存在于域控机器的NTDS文件中。这些哈希值可以用来进行哈希传递攻击。
    算法是 MD4(UTF-16-LE(password)) NTLM哈希长度为32位。

  • Net-NTMLv1/v2 是指网络环境下NTLM认证中的哈希,也可使用hashcat进行破解。

  • Net-NTLM hash在渗透测试中,通常有以下两种利用方法
    1.使用中间人攻击的方式来获取Net-NTLM hash,常用工具为Responder和Inveigh,方法见How to use responder tool to perform exploitation in windows environment by stealing NTLMv2 hashes.
    2.通过多种方式强制目标客户端向伪造的服务器发起SMB连接,在伪造的服务器上捕获数据包,获得Net-NTLM hash
    Windows下的密码hash-NTLM-hash和Net-NTLM-hash介绍
    How to steal NTLMv2 hashes using file download vulnerability in web application
    Capture NTLM Hashes using PDF (Bad-Pdf)

    获取明文密码的几种方式

  • 虽然在内网中可以通过PTH或者PTK就可以进行横向渗透,但是只能通过命令行进行操作,但当你有了明文密码时候就可以可以直接登录web、vpn、远程桌面等。

    GPP

  • Group Policy Preference,
    参考

    mimikatz的lsass mimidumps

  • 首先可以使用ProcDump工具将lsass进程内存dump出来,使用mimikatz也可以直接获取用户明文密码或哈希,但是可能会被杀软给查杀。此外在windows高版本(NT6)上还可以通过任务管理器中的创建存储文件进行lsass进程内存dump。
  • 通过mimikatz导入dump的内存文件,进行解密.



    WDigest

  • Digest认证最早出现在windows XP中,主要用来HTTP和SASL认证.aspx),它会在本地保存明文密码。在2014年微软打了个补丁用来去禁止保存用户密码,但是很多服务器和PC并没有禁止WDigest。

    可逆加密

  • NTLM

    NTLM协议

  • NTLM认证是Challenge – Response 模式
    在使用NTLM协议时,客户端发送用户名到服务器端;服务器生成一个challenge并发送给客户端;客户端使用用户的密码来加密这个challenge,然后发送response到服务器端。如果该账号是一个本机账号,那么服务器使用Security Account Manager来验证用户;如果账号是一个域账号,那么服务器把这个response请求转送到域控制器(DC)上来让域控制器调用组安全策略来做用户认证,然后服务器就可以构建一个安全令牌并建立一个session。

    kerberos

    协议

  • Kerberos认证提供一种服务器和客户端相互认证的机制。Kerberos包含了三个关键组件:Key Distribution Center (KDC),客户端用户,和一个运行所需服务的服务器。KDC是域控制器的一部分,它执行两个任务:认证服务(AS)和票据许可服务(TGS)。当客户端用户登录到网络上时,它会向用户所在域的AS去请求一个“票据请求票据”(TGT)。然后,当客户端想要访问网络上的某个资源的话,它就出示以下东西:TGT,认证码,Server Principal Name(SPN);有了这些东西,客户端就可以从服务所在的域中的TGS获得session票据。使用这个session票据,客户端就可以和网络上的服务进行交流,该服务会验证“认证码”然后创建一个访问令牌给客户端用户,接下来客户端就可以登录上该服务了。
  • 相比kerberos,https可能更为熟悉一点,通过证书和非对称加密的方式,让客户端可以安全的访问服务端,但这仅仅是客户端安全,通过校验,客户端可以保证服务端是安全可靠的,而服务端却无法得知客户端是不是安全可靠的。这也是互联网的一种特性。而kerberos可以支持双向认证,就是说,可以保证客户端访问的服务端是安全可靠的,服务端回复的客户端也是安全可靠的。
  • klist 命令显示 Kerberos 凭证高速缓存或密钥表的内容。

    SPN(service principal name) 扫描

  • Kerberos是一种支持票证身份验证的安全协议。如果客户端计算机身份验证请求包含有效的用户凭据和服务主体名称 (SPN),则 Kerberos 身份验证服务器将授予一个票证以响应该请求。然后,客户端计算机使用该票证来访问网络资源。在内部网络中,SPN扫描通过 查询向域控制器执行服务发现。这对于红队而言,可以帮助他们识别正在运行重要服务的主机,如终端、交换机、微软SQL等,并隐藏他们。此外,SPN的识别也是kerberoasting攻击的第一步。

    Golden Ticket

  • 先假设这么一种情况,原先已拿到的域内所有的账户hash,包括krbtgt这个账户,由于有些原因导致域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置krbtgt密码,基于此条件,我们还能利用该票据重新获得域管理员权限,利用krbtgt的HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于Kerberos认证的任何服务.
  • 在后渗透阶段,攻击者一般会导出golden ticket,当在“丢失”域控权限的时候(比如修改了域管的账号密码但没有修改krbtgt账号密码)就可以通过注入golden ticket的方式再次拿下并控制域控服务器。注:这个时候需要一台域内或者域外机器(域外机器需要配置dns为域控或域内dns服务器),此外由于票据中都是以域名为区分的,所以在利用的时候也应该使用域名,而不能是IP地址。
  • 说到底还是利用了krbtgt的密码不发生改变的特性。

    Silver Ticket

  • 通过观察Kerberos协议的认证过程不难发现,如果我们获取了Server秘钥Ks(服务器口令散列值),就可以跳过KDC的认证,直接伪造票据和目标Server通信

    other

    Attacking Kerberos.pdf)
    kerberoast

    Crack

    Crack windows Admin Password and Sam Files
    The NTLM Authentication Protocol and Security Support Provider

    mimikatz

    内存导出

  • 从本地获取密码
  • 自动获取内存密码bat脚本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @echo off
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
    if '%errorlevel%' NEQ '0' (
    goto UACPrompt
    ) else ( goto gotAdmin )
    :UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
    "%temp%\getadmin.vbs"
    exit /B
    :gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
    mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit >> log.txt

mimikatz skeleton key

  • 这个主要用于域控权限维持。
  • Skeleton Key被安装在64位的域控服务器上,支持Windows Server2003—Windows Server2012 R2,能够让所有域用户使用同一个万能密码进行登录,现有的所有域用户使用原密码仍能继续登录,重启后失效。
  • 可以试试你们的域控是不是已经安装这个后门了哦;)

    视频链接

    mimikatz 绕过cmd、regedit、taskmgr限制

  • 如果管理员禁用了cmd、regedit、taskmgr的话,可以分别使用misc::cmd、
    misc::regedit、misc::taskmgr进行绕过。

    dump sam

    1
    2
    3
    4
    privilege::debug
    token::whoami
    token::elevate
    lsadump::sam

other