MySQL
MySQL es un sistema de gestiĆ³n de bases de datos relacional SQL de cĆ³digo abierto, desarrollado y soportado por Oracle. Una base de datos es simplemente una colecciĆ³n estructurada de datos organizada para un uso y recuperaciĆ³n fĆ”ciles. El sistema de base de datos puede procesar grandes cantidades de datos con alta eficiencia. 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 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 base 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 a menudo se almacenan en un solo archivo con la extensiĆ³n .sql, por ejemplo, como wordpress.sql
.
Clientes MySQL
Los clientes MySQL pueden recuperar y editar los datos utilizando consultas estructuradas al motor de base de datos. Insertar, eliminar, modificar y recuperar 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 Internet pĆŗblico.
Uno de los mejores ejemplos de uso de bases de datos es el CMS WordPress. WordPress almacena todas las publicaciones creadas, nombres de usuario y contraseƱas en su propia base de datos, que solo es accesible desde el localhost. 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 distribuidas en mĆŗltiples servidores tambiĆ©n.
Bases de Datos MySQL
MySQL es ideal para aplicaciones como sitios web dinĆ”micos, 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 utiliza 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 se encuentran:
Encabezados
Textos
Etiquetas meta
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
Datos sensibles como contraseƱas pueden almacenarse en su forma en texto plano por MySQL; sin embargo, generalmente se encriptan previamente por los scripts PHP utilizando mĆ©todos seguros como la encriptaciĆ³n unidireccional.
Comandos MySQL
Una 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 ocurre un error durante el procesamiento, lo que diversos ataques de inyecciĆ³n SQL pueden provocar. A menudo, estas descripciones de errores 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 que los desarrolladores habĆan previsto.
La aplicaciĆ³n web envĆa la informaciĆ³n generada de vuelta al cliente si los datos se procesan correctamente. Esta informaciĆ³n puede ser los extractos de datos de una tabla o registros necesarios para procesamiento adicional 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 las tablas, crear o eliminar relaciones e Ćndices, y gestionar usuarios.
MariaDB, que a menudo se asocia con MySQL, es un fork del cĆ³digo original de MySQL. Esto se debe a que el principal desarrollador de MySQL dejĆ³ la empresa MySQL AB despuĆ©s de que 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 extenso que existen profesiones enteras, como el administrador de bases de datos, que se ocupan casi exclusivamente de bases de datos. Estas estructuras pueden crecer rĆ”pidamente y su planificaciĆ³n puede volverse complicada. Entre otras cosas, la gestiĆ³n de bases de datos es una competencia central tanto para desarrolladores de software como para analistas de seguridad de la informaciĆ³n. Cubrir esta Ć”rea completamente irĆa mĆ”s allĆ” del alcance de este mĆ³dulo. Por lo tanto, recomendamos configurar una instancia de MySQL/MariaDB para experimentar con las diversas configuraciones y entender mejor la funcionalidad y las opciones de configuraciĆ³n disponibles. Veamos la configuraciĆ³n predeterminada de MySQL.
Configuraciones Peligrosas
Muchos aspectos pueden estar mal configurados en MySQL. Podemos consultar mĆ”s a fondo la referencia de MySQL para determinar quĆ© opciones se pueden configurar en el archivo de configuraciĆ³n del servidor. Las principales opciones relevantes para la seguridad son:
Las configuraciones user
, password
y admin_address
son relevantes para la seguridad porque los valores se introducen en texto plano. A menudo, los permisos para el archivo de configuraciĆ³n del servidor MySQL no se asignan correctamente. Si logramos acceder a estos archivos o incluso a una shell, podemos ver el archivo y el nombre de usuario y la contraseƱa del servidor MySQL. Si no hay otras medidas de seguridad para prevenir el acceso no autorizado, se puede ver y editar toda la base de datos y toda la informaciĆ³n de los clientes existentes, direcciones de correo electrĆ³nico, contraseƱas y datos personales.
Las configuraciones debug
y sql_warnings
proporcionan una salida de informaciĆ³n detallada en caso de errores, que es esencial para el administrador pero no deberĆa ser vista por otros. Esta informaciĆ³n a menudo contiene contenido sensible, que podrĆa ser detectado por prueba y error para identificar mĆ”s posibilidades de ataque. Estos mensajes de error a menudo se muestran directamente en las aplicaciones web. En consecuencia, las inyecciones SQL podrĆan ser manipuladas incluso para hacer que el servidor MySQL ejecute comandos del sistema. Esto se discute y se muestra en el mĆ³dulo Fundamentos de InyecciĆ³n SQL y Esenciales de SQLMap.
Huella del Servicio
Existen muchas razones por las que un servidor MySQL podrĆa ser accesible desde una red externa. Sin embargo, esto 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 estaban destinadas a ser temporales pero fueron olvidadas por los administradores. Esta configuraciĆ³n del servidor tambiĆ©n podrĆa usarse como una soluciĆ³n alternativa debido a un problema tĆ©cnico. Normalmente, el servidor MySQL se ejecuta en el puerto TCP 3306, y podemos escanear este puerto con Nmap para obtener informaciĆ³n mĆ”s detallada.
Escaneo del Servidor MySQL
Resultado del escaneo:
Como con todos nuestros escaneos, debemos tener cuidado con los resultados y confirmar manualmente la informaciĆ³n obtenida porque algunos datos podrĆan resultar ser falsos positivos. Este escaneo es un excelente ejemplo de esto, ya que sabemos con certeza que el servidor MySQL objetivo no utiliza una contraseƱa vacĆa para el usuario root, sino una contraseƱa fija. Podemos comprobar esto con el siguiente comando:
InteracciĆ³n con el Servidor MySQL
ConexiĆ³n Inicial
Error:
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.
Bienvenida:
Consultas Iniciales
Si revisamos las bases de datos existentes, veremos que ya hay varias. Las bases de datos mƔs importantes para el servidor MySQL son los esquemas del sistema (sys
) y del esquema de informaciĆ³n (information_schema
). El esquema del sistema contiene tablas, informaciĆ³n y metadatos necesarios para la gestiĆ³n. MĆ”s informaciĆ³n sobre esta base de datos se puede encontrar en el manual de referencia de MySQL.
El esquema de informaciĆ³n es tambiĆ©n una base de datos que contiene metadatos. Sin embargo, estos metadatos se recuperan principalmente del esquema del sistema. La razĆ³n de la existencia de estos dos esquemas es el estĆ”ndar ANSI/ISO que se ha establecido. El esquema del sistema es un catĆ”logo del sistema de Microsoft para servidores SQL y contiene mucha mĆ”s informaciĆ³n que el esquema de informaciĆ³n.
Comandos Ćtiles para MySQL
Debemos 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. TambiĆ©n hay una secciĆ³n de problemas de seguridad ampliamente cubierta en el manual de referencia que trata sobre las mejores prĆ”cticas para asegurar los servidores MySQL. DeberĆamos utilizar esto al configurar nuestro servidor MySQL para entender mejor por quĆ© algo podrĆa no funcionar.
Last updated