Ir al contenido

Herramientas y automatización para MySQL

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

El workflow MySQL separa handshake, identidad aportada, cuenta autorizada y privilegios. El cliente oficial es la referencia para confirmar lo que una herramienta preautenticación infiere.

Pregunta Herramienta Señal
¿habla MySQL o un protocolo compatible? mysql-info handshake y capacidades
¿qué TLS y plugin negocia? cliente mysql estado de sesión
¿qué ve una cuenta? consultas SQL grants y objetos
¿por qué difieren dos resultados? cliente con --verbose fase y código del servidor
Identificar el handshake
nmap -sV -p 3306 --script mysql-info TARGET_IP

mysql-info no autentica ni prueba el parche efectivo. Un proxy o MariaDB puede anunciar una cadena compatible. Confirma con una sesión.

--batch --raw --skip-column-names produce output estable para procesar. -e ejecuta una consulta y termina:

Recoger identidad y versión de forma reproducible
mysql -h TARGET_IP -u USERNAME -p \
--batch --raw --skip-column-names \
-e 'SELECT VERSION(), USER(), CURRENT_USER();'

No añadas la contraseña detrás de -p. Para pipelines, usa un archivo de opciones con permisos restrictivos y bórralo al cerrar.

--connect-timeout=SECONDS limita cuánto espera el cliente al establecer la conexión. No limita una consulta que ya está ejecutándose. --protocol=TCP evita que un nombre local seleccione un socket Unix y permite comparar el mismo transporte que usa una herramienta remota. --sdoc-mode=VERIFY_IDENTITY exige TLS, una cadena de confianza válida y coincidencia del hostname. Por ello necesita un FQDN y el archivo de la autoridad certificadora indicado por --sdoc-ca:

Verificar identidad TLS y producir output estable
mysql --host=FQDN --user=USERNAME --password \
--protocol=TCP --connect-timeout=10 \
--sdoc-mode=VERIFY_IDENTITY --sdoc-ca=CA_FILE \
--batch --raw --skip-column-names \
--execute="SELECT VERSION(), USER(), CURRENT_USER(); SHOW STATUS LIKE 'Ssl_cipher';"

La señal esperada son una fila con la versión y las dos identidades, seguida del estado Ssl_cipher. Un fallo de hostname no prueba que el servicio esté caído. Conserva el error y compara VERIFY_CA solo para separar validación de cadena y validación de identidad. No rebajes el modo TLS en la receta final.

mysql-databases, mysql-users, mysql-variables y mysql-query necesitan credenciales o material de autenticación compatible. Sus resultados dependen de grants. mysql-enum y mysql-brute realizan intentos de cuentas y no pertenecen al reconocimiento inicial. Revisa scripts y argumentos con:

Inspeccionar el catálogo MySQL instalado
nmap --script-help 'mysql-*'

No selecciones el glob para ejecutar. Fija un script, el puerto y la credencial por alias. Confirma datos sensibles mediante consultas equivalentes y conserva el SQL exacto.

Un error 1045 apunta a autenticación o regla de host. 1049 indica una base desconocida. Fallos de plugin pueden significar cliente antiguo. Si la IP falla y el FQDN funciona, compara validación TLS, resolución y reglas user@host. Si Nmap responde y el cliente no, comprueba proxy, requisito TLS y compatibilidad del plugin.