MySQL
Last updated
Last updated
MySQL
Es un sistema de gestión de bases de datos relacionales SQL de código abierto, desarrollado y respaldado por Oracle. Una base de datos es simplemente una colección estructurada de datos, organizada para facilitar su uso y recuperación. El sistema de base de datos puede procesar rápidamente grandes cantidades de datos con alto rendimiento. Dentro de la base de datos, el almacenamiento de datos se realiza de forma que ocupe el mínimo espacio posible. La base de datos se controla mediante el . MySQL funciona según el estándar client-server principle
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 en sí. Se encarga del almacenamiento y la distribución de los 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, wordpress.sql
.
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 mediante el lenguaje de bases de datos SQL. Por lo tanto, MySQL es ideal para gestionar diversas bases de datos a las que los clientes pueden enviar múltiples consultas simultáneamente. Según el uso de la base de datos, se puede acceder a ella a través de una red interna o de la red pública de Internet.
Uno de los mejores ejemplos del uso de bases de datos es el CMS WordPress. WordPress almacena todas las publicaciones, nombres de usuario y contraseñas creadas 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 , también existen estructuras de bases de datos distribuidas en varios servidores.
MySQL es ideal para aplicaciones como [ dynamic websites
nombre del servidor], donde una sintaxis eficiente y una alta velocidad de respuesta son esenciales. Suele combinarse con Linux, PHP y un servidor web Apache, y también se conoce en esta combinación como (Linux, Apache, MySQL, PHP), o al usar Nginx, como . En un alojamiento web con base de datos MySQL, sirve como instancia central donde se almacena el contenido requerido por los scripts PHP. Entre estos se encuentran:
Encabezados
Textos
Metaetiquetas
Formularios
Clientes
Nombres de usuario
Administradores
Moderadores
Direcciones de correo electrónico
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 simple; sin embargo, generalmente los scripts PHP los cifran de antemano mediante métodos seguros como .
Una base de datos MySQL traduce internamente los comandos a código ejecutable y realiza las acciones solicitadas. La aplicación web informa al usuario si se produce un error durante el procesamiento, que SQL injections
puede ser provocado por diversas causas. A menudo, estas descripciones de error contienen información importante y confirman, entre otras cosas, que la aplicación web interactúa con la base de datos de forma distinta 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 puede consistir en 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 permiten mostrar, modificar, agregar o eliminar filas en las tablas. Además, SQL permite cambiar la estructura de las tablas, crear o eliminar relaciones e índices, y administrar usuarios.
MariaDB
, que suele asociarse con MySQL, es una bifurcación del código MySQL original. Esto se debe a que el desarrollador principal de MySQL dejó la empresa MySQL AB
tras su adquisición 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, al que llamó MariaDB.
La gestión de bases de datos SQL y sus configuraciones es un tema muy amplio. Es tan complejo que profesionales como [nombre del departamento] database administrator
se dedican prácticamente exclusivamente a bases de datos. Estas estructuras se expanden rápidamente y su planificación puede complicarse. Entre otras cosas, la gestión de bases de datos es una competencia fundamental para [nombre del departamento], software developers
pero también [ information security analysts
nombre del departamento]. Abordar este tema en su totalidad excedería el alcance de este módulo. Por lo tanto, recomendamos configurar una instancia de MySQL/MariaDB para experimentar con las distintas configuraciones y comprender mejor la funcionalidad y las opciones de configuración disponibles. Veamos la configuración predeterminada de MySQL.
Ajustes
Descripción
user
Establece bajo qué usuario se ejecutará el servicio MySQL.
password
Establece la contraseña para el usuario MySQL.
admin_address
La dirección IP en la que se escucharán las conexiones TCP/IP en la interfaz de red administrativa.
debug
Esta variable indica la configuración de depuración actual
sql_warnings
Esta variable controla si las instrucciones INSERT de una sola fila producen una cadena de información si ocurren advertencias.
secure_file_priv
Esta variable se utiliza para limitar el efecto de las operaciones de importación y exportación de datos.
Las configuraciones user
, password
y admin_address
son importantes para la seguridad, ya que las entradas se crean en texto plano. Con frecuencia, los permisos del archivo de configuración del servidor MySQL no se asignan correctamente. Si encontramos otra forma de leer archivos, o incluso un shell, podemos ver el archivo, el nombre de usuario y la 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, así como la información de los clientes, las direcciones de correo electrónico, las contraseñas y los datos personales.
Hay muchas razones por las que se puede acceder a un servidor MySQL desde una red externa. Sin embargo, no es la mejor práctica, y siempre podemos encontrar bases de datos accesibles. A menudo, estas configuraciones eran temporales, pero los administradores las olvidaban. Esta configuración del servidor también podría utilizarse como solución temporal ante un problema técnico. Normalmente, el servidor MySQL se ejecuta en [nombre del puerto] TCP port 3306
y podemos escanear este puerto con [nombre del puerto] Nmap
para obtener información más detallada.
Como en todos nuestros análisis, debemos ser cuidadosos con los resultados y confirmar manualmente la información obtenida, ya que parte de ella podría resultar un falso positivo. El análisis anterior es un excelente ejemplo de ello, 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:
Por ejemplo, si usamos una contraseña que hemos adivinado o encontrado a través de nuestra investigación, podremos iniciar sesión en el servidor MySQL y ejecutar algunos comandos.
También es information schema
una base de datos que contiene metadatos. Sin embargo, estos metadatos se obtienen principalmente de la system schema
base de datos. La razón de su existencia es el estándar ANSI/ISO establecido. System schema
Es un catálogo de sistema de Microsoft para servidores SQL y contiene mucha más información que el information schema
.
Algunos de los comandos que debemos recordar y anotar para trabajar con bases de datos MySQL se describen a continuación en la tabla.
Dominio
Descripción
mysql -u <user> -p<password> -h <IP address>
Conéctese al servidor MySQL. No debe haber ningún espacio entre el indicador '-p' y la contraseña.
show databases;
Mostrar todas las bases de datos.
use <database>;
Seleccione una de las bases de datos existentes.
show tables;
Mostrar todas las tablas disponibles en la base de datos seleccionada.
show columns from <table>;
Mostrar todas las columnas de la tabla seleccionada.
select * from <table>;
Mostrar todo en la tabla deseada.
select * from <table> where <column> = "<string>";
Busca lo necesario string
en la tabla deseada.
Muchos aspectos de MySQL pueden estar mal configurados. Podemos consultar con más detalle la para determinar qué opciones se pueden configurar en el servidor. Las principales opciones relevantes para la seguridad son:
La configuración debug
y sql_warnings
proporciona información detallada en caso de errores, esencial para el administrador, pero que no debe ser vista por otros. Esta información suele contener contenido sensible, que podría detectarse mediante ensayo y error para identificar posibles ataques. Estos mensajes de error suelen mostrarse directamente en las aplicaciones web. Por consiguiente, las inyecciones SQL podrían manipularse incluso para que el servidor MySQL ejecute comandos del sistema. Esto se explica y se muestra en el módulo y .
Si analizamos 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 de MySQL.
Necesitamos saber cómo 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. El manual de referencia también incluye una sección ampliamente abordada , que describe las mejores prácticas para proteger servidores MySQL. Deberíamos usarla al configurar nuestro servidor MySQL para comprender mejor por qué algo podría no funcionar.