💻MySQL
MySQLes un sistema de gestión de bases de datos relacionales SQL de código abierto desarrollado y respaldado por Oracle.
Cómo funciona
Una base de datos es simplemente una colección estructurada de datos organizados para su fácil uso y recuperación. El sistema de base de datos puede procesar rápidamente grandes cantidades de datos con un alto rendimiento. Dentro de la base de datos, el almacenamiento de datos se realiza de manera que ocupe el menor espacio posible. La base de datos se controla utilizando el lenguaje de base de datos SQL .
MySQL funciona según el principio de cliente-servidor
y consta de un servidor MySQL y uno o más clientes MySQL. El servidor MySQL es el sistema de gestión de bases de datos real. Se encarga del almacenamiento y distribución de datos. Los datos se almacenan en tablas con diferentes columnas, filas y tipos de datos. Estas bases de datos suelen almacenarse en un único archivo con la extensión .sql
, por ejemplo, como wordpress.sql
.
Clientes MySQL
Los clientes MySQL pueden recuperar y editar los datos mediante consultas estructuradas al motor de base de datos. La inserción, eliminación, modificación y recuperación de datos se realiza utilizando el lenguaje de base de datos SQL. Por lo tanto, MySQL es adecuado para gestionar muchas bases de datos diferentes a las que los clientes pueden enviar múltiples consultas simultáneamente. Dependiendo del uso de la base de datos, el acceso es posible a través de una red interna o de la Internet pública.
Uno de los mejores ejemplos de uso de bases de datos es el CMS WordPress. WordPress almacena todas las publicaciones, nombres de usuario y contraseñas creados en su propia base de datos, a la que solo se puede acceder desde el host local. Sin embargo, como se explica con más detalle en el módulo Introducción a las aplicaciones web , existen estructuras de bases de datos que también se distribuyen en varios servidores.
Bases de datos MySQL
MySQL es ideal para aplicaciones como webs dinámicas
, donde la sintaxis eficiente y la alta velocidad de respuesta son esenciales. A menudo se combina con un sistema operativo Linux, PHP y un servidor web Apache y también se conoce en esta combinación como LAMP (Linux, Apache, MySQL, PHP), o cuando se usa Nginx, como LEMP . En un alojamiento web con base de datos MySQL, esto sirve como una instancia central en la que se almacena el contenido requerido por los scripts PHP. Entre estos están:
Encabezados | Textos | meta etiquetas | Formularios |
Clientes | Nombres de usuario | Administradores | Moderadores |
Correos electrónicos | Información del usuario | Permisos | Contraseñas |
Enlaces externos/internos | Enlaces a archivos | Contenidos específicos | Valores |
MySQL puede almacenar datos confidenciales, como contraseñas, en formato de texto sin formato; sin embargo, generalmente están cifrados de antemano mediante scripts PHP utilizando métodos seguros como One-Way-Encryption .
Vulnerabilidades - SQL Injections
💉SQL InjectionUna base de datos MySQL traduce los comandos internamente en código ejecutable y realiza las acciones solicitadas. La aplicación web informa al usuario si se produce algún error durante el procesamiento, que puede provocar diversas SQL Injections. A menudo, estas vulnerabilidades contienen información importante y confirman, entre otras cosas, que la aplicación web interactúa con la base de datos de una manera diferente a la prevista por los desarrolladores.
La aplicación web envía la información generada al cliente si los datos se procesan correctamente. Esta información pueden ser extractos de datos de una tabla o registros necesarios para su posterior procesamiento con inicios de sesión, funciones de búsqueda, etc. Los comandos SQL pueden mostrar, modificar, agregar o eliminar filas en las tablas. Además, SQL también puede cambiar la estructura de tablas, crear o eliminar relaciones e índices y administrar usuarios.
MariaDB
MariaDB, que a menudo está relacionado con MySQL, es una bifurcación del código MySQL original. Esto se debe a que el desarrollador jefe de MySQL abandonó la empresa MySQL AB
después de que ésta fue adquirida por Oracle
y desarrolló otro sistema de gestión de bases de datos SQL de código abierto basado en el código fuente de MySQL y lo llamó MariaDB.
Configuración predeterminada
La gestión de bases de datos SQL y sus configuraciones es un tema amplio. Es tan grande que profesiones enteras, como por ejemplo el Administrador de Bases de Datos
, se ocupan casi exclusivamente de bases de datos. Estas estructuras crecen rápidamente y su planificación puede resultar complicada.
Entre otras cosas, la gestión de bases de datos es una competencia básica para Desarrolladores de Software
pero también para Cybersecurity Analysts
. Cubrir esta área completamente iría más allá del alcance de este módulo. Por lo tanto, recomiendo configurar una instancia de MySQL/MariaDB para experimentar con las distintas configuraciones y comprender mejor la funcionalidad disponible y las opciones de configuración. Echemos un vistazo a la configuración predeterminada de MySQL.
Configuraciones peligrosas
Muchas cosas se pueden configurar mal con MySQL. Podemos mirar con más detalle la referencia de MySQL para determinar qué opciones se pueden realizar en la configuración del servidor. Las principales opciones relevantes para la seguridad son:
Ajustes | Descripción |
| Establece con qué usuario se ejecutará el servicio MySQL. |
| Establece la contraseña para el usuario de MySQL. |
| La dirección IP en la que escuchar las conexiones TCP/IP en la interfaz de red administrativa. |
| Esta variable indica la configuración de depuración actual. |
| Esta variable controla si las declaraciones INSERT de una sola fila producen una cadena de información si se producen advertencias. |
| Esta variable se utiliza para limitar el efecto de las operaciones de importación y exportación de datos. |
Los ajustes user
, password
y admin_address
son relevantes para la seguridad porque las entradas se realizan en texto plano. A menudo, los derechos para el archivo de configuración del servidor MySQL no están asignados correctamente. Si obtenemos otra forma de leer archivos o incluso un shell, podemos ver el archivo y el nombre de usuario y contraseña del servidor MySQL. Supongamos que no existen otras medidas de seguridad para evitar el acceso no autorizado. En ese caso, se puede ver e incluso editar toda la base de datos y toda la información, direcciones de correo electrónico, contraseñas y datos personales de los clientes existentes.
Las configuraciones debug
y sql_warnings
brindan información detallada en caso de errores, que son esenciales para el administrador pero que otros no deben ver. Esta información a menudo contiene contenido confidencial, que podría detectarse mediante prueba y error para identificar otras posibilidades de ataque. Estos mensajes de error suelen mostrarse directamente en las aplicaciones web. En consecuencia, las inyecciones de SQL podrían manipularse incluso para que el servidor MySQL ejecute comandos del sistema. Esto se analiza y muestra en el módulo de SQL Injections.
Enumeración del servicio
Hay muchas razones por las que se puede acceder a un servidor MySQL desde una red externa. Sin embargo, está lejos de ser una de las mejores prácticas y siempre podemos encontrar bases de datos a las que podemos acceder. A menudo, estas configuraciones solo estaban destinadas a ser temporales, pero los administradores las olvidaban. Esta configuración del servidor también podría usarse como solución alternativa debido a un problema técnico. Por lo general, el servidor MySQL se ejecuta TCP port 3306
y podemos escanear este puerto Nmap
para obtener información más detallada.
Nmap - Escaneando MySQL
Como ocurre con todos nuestros escaneos, debemos tener cuidado con los resultados y confirmar manualmente la información obtenida porque parte de la información podría resultar un falso positivo. Este escaneo anterior es un excelente ejemplo de esto, ya que sabemos con certeza que el servidor MySQL de destino no usa una contraseña vacía para el usuario root
, sino una contraseña fija. Podemos probar esto con el siguiente comando:
Interacción con el servidor MySQL
Por ejemplo, si utilizamos una contraseña que hemos adivinado o encontrado durante nuestra investigación, podremos iniciar sesión en el servidor MySQL y ejecutar algunos comandos.
Si miramos las bases de datos existentes, veremos que ya existen varias. Las bases de datos más importantes para el servidor MySQL son system schema
( sys
) y information schema
( information_schema
). El esquema del sistema contiene tablas, información y metadatos necesarios para la gestión. Puede encontrar más información sobre esta base de datos en el manual de referencia de MySQL.
También es information schema
una base de datos que contiene metadatos. Sin embargo, estos metadatos se recuperan principalmente de la system schema
base de datos. La razón de la existencia de estos dos es el estándar ANSI/ISO que se ha establecido. System schema
es un catálogo del sistema de Microsoft para servidores SQL y contiene mucha más información que el archivo information schema
.
Comandos MySQL
Algunos de los comandos que debemos recordar y anotar para trabajar con bases de datos MySQL se describen a continuación en la tabla.
Comando | Descripción |
| Conéctese al servidor MySQL. No debe haber un espacio entre el indicador '-p' y la contraseña. |
| Mostrar todas las bases de datos. |
| Seleccione una de las bases de datos existentes. |
| Mostrar todas las tablas disponibles en la base de datos seleccionada. |
| Mostrar todas las columnas de la base de datos seleccionada. |
| Muestra todo en la tabla deseada. |
| Buscar un |
Debemos saber interactuar con diferentes bases de datos. Por lo tanto, recomendamos instalar y configurar un servidor MySQL en una de nuestras máquinas virtuales para experimentar. También hay una sección de problemas de seguridad ampliamente cubierta en el manual de referencia que cubre las mejores prácticas para proteger los servidores MySQL. Deberíamos usar esto al configurar nuestro servidor MySQL para comprender mejor por qué algo podría no funcionar.
Última actualización