浅谈PTH

   内网渗透阶段,攻击者利用MSF获取meterpreter或者CS获取bacon之后,首先就是要获取凭证或NTLM hash值。然而获取到Hash值然后破解hash难度很高,难以利用,故诞生了PTH,即获取了目标机器用户的NTLM Hash的情况下,可无需破解哈希直接使用目标的NTLM Hash来完成身份验证。从红队的视角来看,PTH攻击(哈希传递攻击)只是windows横向渗透的开始。下面仅谈谈PTH的相关原理。

一:windows 密码凭证

   windows系统使用两种方法对用户输入的密码进行加密处理:LM Hash以及NTLM Hash。
   LM Hash是windows最早使用的加密算法,其本质是DES加密,LM Hash算法较为脆弱。微软后期引入NTLM Hash,其本质是MD4 加密。操作系统密码转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash。个人版在Vista之后,服务版在windows 2003 之后windows系统认证均采用NTLM Hash加密。
   windows系统中密码凭证通常由LM Hash以及NTLM Hash两部分组成,结构如下:
用户名称:RID:LM-HASH值:NT-HASH值
   在域环境中,密码凭证存储在%SystemRoot%ntds\ntds.dilt路径下的ntds.dit二进制文件中。在工作组环境下,用户的密码凭证被存储在%SystemRoot%\system32\config\sam路径下的SAM文件中。在渗透测试中获取windows密码凭证可以利用mimikatz,Pwddump7,WCE,注册表以及MSF、CS框架模块等获取。

二:windows认证与NTLM协议

windows认证包括三个部分:

  • 本地认证:用户直接操作计算机登陆账户

  • 网络认证:远程连接到工作组中的某个设备

  • 域认证:登陆到域环境中的某个设备(Kerberos协议)

    本地认证流程较为简单:windows登录进程(winlogon.exe)接收用户输入的密码,系统根据密码计算出NTLM Hash(lsass.exe),与SAM数据库中该用户的Hash值进行比对,匹配则登陆成功,不匹配则登陆失败。
    网络认证则需要使用到NTLM协议。NTLM是一种网络认证协议,它是基于挑战(Challenge)/响应(Response)认证机制的一种认证模式。这个协议只支持Windows。
    协议的认证分为三步:

  • 协商:主要用于确认双方协议版本

  • 质询:
    1.客户端向服务器端发送请求,其中包含用户信息;
    2.服务器接收到请求,判断本地账户列表是否有该用户,如果有,则生成一个16位的随机数“Challenge”, 然后使用该用户对应的NTLM Hash对Challenge值进行加密, 生成一个Net-NTLM Hash存在内存中,同时将Challenge发送给客户端。
    3.客户端接收到Challenge后,使用登录用户所对应的NTLM Hash加密Challenge生成一个Response,然后将Response发送至服务器端。
    验证: 服务器端收到客户端的Response后,比对Net-NTLM Hash与Response是否相等,若相等,则认证通过。

三:PTH原理及利用

   NTLM Hash登录时需要challenge,而在NTLM协议的质询流程中,服务器端会将challenge发送给客户端(用户),使得我们无需构造challenge,所以只需要获取用户名和NTLM Hash即可通过验证。故PTH攻击可以分为两步:

  • NTLM-Hash获取
    成功入侵了一台机器后,可获取受害主机或与受害主机处于同一网络的机器Hash值,在渗透测试中获取windows密码凭证可以利用mimikatz,Pwddump7,WCE,导出注册表以及MSF、CS框架模块等获取,在此不作过多描述。
  • 利用Hash完成攻击
    在认证的时候,我们直接提供hash值,不用提供密码,windows就会与保存的hash值对比,通过认证。PTH攻击常用于SMB,PsExec,WMI,RPC,RDP等各种协议登录绕过。

猜你喜欢

转载自blog.csdn.net/weixin_47731659/article/details/120650587