# 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).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cppj/databases-for-juniors/puerto-3306-mysql.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
