> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/databases-for-juniors/puerto-3306-mysql.md).

# Puerto 3306: MySQL

**MySQL** es un sistema de gestión de bases de datos relacional de código abierto muy popular, utilizado en una amplia variedad de aplicaciones web y empresariales. MySQL es conocido por su rendimiento, fiabilidad y facilidad de uso. El puerto 3306 es el puerto predeterminado que utiliza MySQL para aceptar conexiones de clientes.

## <mark style="color:green;">Descripción de MySQL y el Puerto 3306</mark>

* <mark style="color:green;">**Protocolo**</mark><mark style="color:green;">:</mark> MySQL utiliza un protocolo propio sobre TCP/IP para la comunicación entre el cliente y el servidor. El puerto predeterminado para las conexiones MySQL es el 3306.
* <mark style="color:green;">**Funcionalidad**</mark><mark style="color:green;">:</mark> MySQL soporta una amplia gama de funcionalidades, incluyendo transacciones ACID, índices, vistas, triggers, procedimientos almacenados, y replicación. Es compatible con múltiples motores de almacenamiento, como InnoDB y MyISAM.
* <mark style="color:green;">**Seguridad**</mark><mark style="color:green;">:</mark> MySQL proporciona varias capas de seguridad, como autenticación basada en usuarios, SSL/TLS para cifrado de tráfico, y controles de acceso detallados.

## <mark style="color:green;">Relevancia en Pentesting</mark>

### <mark style="color:green;">**Importancia de MySQL en Pentesting**</mark><mark style="color:green;">:</mark>

* <mark style="color:green;">**Acceso No Autorizado**</mark><mark style="color:green;">:</mark> Configuraciones incorrectas de autenticación pueden permitir a los atacantes obtener acceso no autorizado a la base de datos.
* <mark style="color:green;">**Exposición de Datos**</mark><mark style="color:green;">:</mark> Las bases de datos expuestas sin cifrado pueden ser interceptadas por atacantes, exponiendo datos sensibles.
* <mark style="color:green;">**Enumeración de Objetos**</mark><mark style="color:green;">:</mark> Los pentesters pueden enumerar esquemas, tablas, y otros objetos para mapear la estructura de la base de datos y encontrar posibles vulnerabilidades.
* <mark style="color:green;">**Inyección SQL**</mark><mark style="color:green;">:</mark> MySQL es susceptible a inyecciones SQL si las consultas no están correctamente parametrizadas.

## <mark style="color:green;">Ejemplo de Escaneo de MySQL con Nmap</mark>

Para identificar servidores MySQL activos y recopilar información adicional sobre los servicios MySQL, se puede utilizar Nmap con scripts NSE específicos.

### <mark style="color:green;">**Comando Nmap**</mark>

```bash
nmap -p 3306 --script mysql-info target-ip
```

### <mark style="color:green;">**Explicación del Comando**</mark>

* `nmap`: Ejecuta el comando Nmap.
* `-p 3306`: Especifica que Nmap debe escanear el puerto 3306, el puerto predeterminado para MySQL.
* `--script mysql-info`: Utiliza el script NSE `mysql-info` para recopilar información sobre el servidor MySQL.
* `target-ip`: Especifica la dirección IP del objetivo.

## <mark style="color:green;">**Ejemplo de Salida de Nmap**</mark>

```plaintext
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-19 00:20 UTC
Nmap scan report for 192.168.1.220
Host is up (0.0012s latency).

PORT     STATE SERVICE
3306/tcp open  mysql
| mysql-info:
|   Protocol: 10
|   Version: 5.7.32-0ubuntu0.18.04.1
|   Thread ID: 5
|   Capabilities flags: 63487
|   Some Capabilities: SupportsCompression, FoundRows, IgnoreSpaceBeforeParenthesis, InteractiveClient, Speaks41ProtocolOld, LongColumnFlag, ConnectWithDatabase, Speaks41ProtocolNew, ODBCClient, Transactions, IgnoreSigpipes, SupportsLoadDataLocal, DontAllowDatabaseTableColumn, SupportsMultipleStatments, SupportsAuthPlugins, SupportsMultipleResults
|   Status: Autocommit
|   SSL: Not enabled
|   Uptime: 332480
|   Uptime (seconds): 332480
|   Uptime (hours): 92
|_  Uptime (days): 3

Nmap done: 1 IP address (1 host up) scanned in 8.72 seconds
```

## <mark style="color:green;">Interpretación de la Salida</mark>

* <mark style="color:green;">**Host is up**</mark><mark style="color:green;">:</mark> Indica que el sistema objetivo está en línea y responde.
* <mark style="color:green;">**3306/tcp open mysql**</mark><mark style="color:green;">:</mark> El puerto 3306 está abierto y el servicio MySQL está activo.
* <mark style="color:green;">**mysql-info**</mark><mark style="color:green;">:</mark> Proporciona información detallada sobre el servidor MySQL.
  * <mark style="color:green;">**Protocol**</mark><mark style="color:green;">:</mark> Versión del protocolo MySQL (`10`).
  * <mark style="color:green;">**Version**</mark><mark style="color:green;">:</mark> Versión del servidor MySQL (`5.7.32-0ubuntu0.18.04.1`).
  * <mark style="color:green;">**Thread ID**</mark><mark style="color:green;">:</mark> ID del hilo (`5`).
  * <mark style="color:green;">**Capabilities flags**</mark><mark style="color:green;">:</mark> Flags de capacidades (`63487`).
  * <mark style="color:green;">**Some Capabilities**</mark><mark style="color:green;">:</mark> Algunas capacidades soportadas (`SupportsCompression`, `FoundRows`, `InteractiveClient`, `Transactions`, etc.).
  * <mark style="color:green;">**Status**</mark><mark style="color:green;">:</mark> Estado actual del servidor (`Autocommit`).
  * <mark style="color:green;">**SSL**</mark><mark style="color:green;">:</mark> Estado de SSL (`Not enabled`).
  * <mark style="color:green;">**Uptime**</mark><mark style="color:green;">:</mark> Tiempo de actividad del servidor (`332480 seconds`, equivalente a 92 horas o 3 días).
