d4redevil
  • whoami
  • Active Directory
    • Enumeración
    • PowerShell para gestionar Active Directory
    • PowerView & SharpView
    • Ataques a Kerberos
    • Ataque de contraseñas
    • SMB Relay
    • Token Impersonation
    • Golden Ticket
    • LLMNR Poisoning
    • Mimikatz
    • Grupos privilegiados
    • LAPS
  • Linux
    • Enumeración
    • Escalación de privilegios
    • Transferencia de Archivos
  • Windows
    • Enumeración
    • Escalación de privilegios
      • SeImporsonate
      • SeDebugPrivilege
      • SeTakeOwnershipPrivilege
      • Backup Operators
      • DnsAdmins
    • Transferencia de Archivos
  • Scripting
    • Powershell
      • Introducción
      • Cmdlet
      • Alias
      • Comentarios
      • Comandos utiles
      • Variables
      • Tuberías (Pipes)
      • Operaciones
      • Estructuras Condicionales
  • OWASP TOP 10 y Vulnerabilidades Web
    • Inyecciones SQL
      • ¿Qué son las Inyecciones SQL?
      • Laboratorio
      • Inyecciones SQL basada en Uniones
      • Inyecciones SQL basadas en booleanos
      • Inyecciones SQL basadas en tiempo
  • Writeups
    • Hack The Box
      • Linux
        • 🟢Easy
        • 🟡Medium
          • Zipping
        • 🔴Hard
        • ⚫Insane
      • Windows
        • 🟢Easy
          • Devel
          • Grandpa
          • Granny
          • Jerry
          • Optimum
          • Legacy
          • Active
          • Sauna
        • 🟡Medium
        • 🔴Hard
        • ⚫Insane
    • The Hackers Labs
      • Linux
        • 🟢Principiante
          • Papaya
          • Can You Hack Me?
        • 🟡Avanzado
          • Runners
          • El Candidato
          • El Cliente
        • 🔴Profesional
        • ⚫Experto
          • ⚫Thlcppt_v16
      • Windows
        • 🟢Principiante
          • Cocido Andaluz
          • Ensalá Papas
        • 🟡Avanzado
        • 🔴Profesional
          • BlackGold
        • ⚫Experto
    • Dockerlabs
      • 🔵Muy fácil
      • 🟡Fácil
      • 🟠Medio
        • Database
      • 🔴Difícil
    • VulnHub
      • Linux
        • 🟢Easy
        • 🟡Medium
        • 🔴Hard
      • Windows
        • 🟢Easy
        • 🟡Medium
        • 🔴Hard
    • HackMyVM
      • Linux
        • 🟢Easy
        • 🟡Medium
        • 🔴Hard
        • ⚫Insane
      • Windows
        • 🟢Easy
        • 🟡Medium
        • 🔴Hard
        • ⚫Insane
  • Servicios Comunes
    • TCP
    • UDP
    • FTP (21)
    • SMB (445)
    • MySQL (3306)
    • MSSQL (1433)
  • Cheatsheet
    • Reconocimiento
    • Enumeración
    • Enumeración Web
    • Enumeración de CMS
    • Fuerza Bruta
    • Pivoting
    • Msfvenom
    • Utilidades
    • Fuerza bruta
    • Transferencia de Archivos
  • Contenedores
    • Docker
Con tecnología de GitBook
En esta página
  • Instalación de Docker y docker-compose
  • Creación de las carpetas necesarias
  • Archivo Dockerfile
  • Archivo docker-compose.yml
  • Tabla users
  • Tabla posts
  1. OWASP TOP 10 y Vulnerabilidades Web
  2. Inyecciones SQL

Laboratorio

Para poder entender mejoras en que consisten las inyección SQL, lo llevaremos a la practica con un laboratorio de prueba. Para lo cual, utilizaremos un contenedor Docker en el que instalaremos Apache, PHP y MySQL.

Antes de comenzar, es recomendable actualizar el sistema para asegurarse de que todo esté al día. Abrimos una terminal y ejecutamos los siguientes comandos:

sudo apt update && sudo apt upgrade -y

Instalación de Docker y docker-compose

Instalamos Docker con el siguiente comando:

sudo apt install docker.io -y

Una vez que la instalación esté completa, verificamos que Docker se haya instalado correctamente ejecutando el siguiente comando:

sudo docker --version

Deberíamos ver algo como:

Docker version 26.1.5+dfsg1, build a72d7cd

Si queremos asegurarnos de que Docker se inicie automáticamente al arrancar el sistema, habilitamos el servicio de Docker:

sudo systemctl enable docker
sudo systemctl start docker

Verificamos que Docker esté funcionando correctamente con:

sudo systemctl status docker

Instalamos docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Asignamos permisos de ejecución al binario.

sudo chmod +x /usr/local/bin/docker-compose

Verficamos la instalación de docker-compose con el siguiente comando:

sudo docker-compose --version

Deberíamos ver algo como:

Docker Compose version v2.32.1

Creación de las carpetas necesarias

Creamos el directorio para el laboratorio.

mkdir sqli_lab
cd sqli_lab

Archivo Dockerfile

vim Dockerfile

Dentro de este archivo, colocamos lo siguiente:

FROM ubuntu:20.04

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y \
    apache2 \
    mysql-server \
    php \
    php-mysqli \
    php-mbstring \
    php-xml \
    php-curl \
    php-zip \
    && apt-get clean

RUN a2enmod php7.4
RUN service apache2 restart

WORKDIR /var/www/html

EXPOSE 80

COPY ./app /var/www/html/

RUN service mysql start && \
    mysql -e "CREATE DATABASE app_db;" && \
    mysql -e "CREATE USER 'bob'@'localhost' IDENTIFIED BY 'Password123!';" && \
    mysql -e "GRANT ALL PRIVILEGES ON app_db.* TO 'bob'@'localhost';" && \
    mysql -e "FLUSH PRIVILEGES;"

CMD service mysql start && apache2ctl -D FOREGROUND

Archivo docker-compose.yml

vim docker-compose.yml
version: '3.7'

services:
  app:
    build: .
    container_name: apache-php-mysql-container
    volumes:
      - ./app:/var/www/html # Volumen de la aplicación
    ports:
      - "80:80"  # Mapea el puerto 80 del contenedor al puerto 80 de la máquina
    environment:
      MYSQL_ROOT_PASSWORD: MySuperSecretPa$$word24 # Contraseña de root para MySQL
      MYSQL_DATABASE: app_db  # Base de datos a crear
      MYSQL_USER: bob  # Nombre de usuario para MySQL
      MYSQL_PASSWORD: Password123!  # Contraseña del usuario

Creamos la carpeta app para colocar los archivos de la aplicación.

mkdir app

Ahora, para construir y ejecutar el contenedor, usamos el siguiente comando:

docker-compose up --build -d
  • --build asegura que el contenedor se construya desde el Dockerfile.

  • -d ejecuta los contenedores en segundo plano.

Accedemos al contenedor

docker exec -it sqli_lab bash

Accedemos a la base de datos

Tabla users

CREATE TABLE users(
	id INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY,
	name VARCHAR(255) NOT NULL,
	username VARCHAR(255) NOT NULL,
	password VARCHAR(255) NOT NULL
);

Tabla posts

CREATE TABLE posts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    author VARCHAR(100),
    publication_date DATE
);

Poblamos las tablas con algunos datos de prueba.

INSERT INTO users(name, username, password) VALUES('Admin', 'admin', 'admin12345$$');
INSERT INTO users(name, username, password) VALUES('Dean', 'dean', 'MyStrongp4assw0rd!..');
INSERT INTO users(name, username, password) VALUES('Sam', 'sam', 'ThisIsMySecretPa$$word123');

INSERT INTO posts (title, content, author, publication_date)
VALUES
('Benefits of Running Daily', 'Running daily improves cardiovascular health, boosts energy, and reduces stress.', 'David', '2024-12-01'),
('10 Tips for Beginner Runners', 'Start slow, wear proper shoes, and listen to your body.', 'Maria', '2024-12-05'),
('The Best Running Routes in Your City', 'Explore parks, tracks, and safe trails to enjoy your runs.', 'Ian', '2024-12-10'),
('How to Avoid Injuries While Running', 'Perform proper warm-ups and stretches after running to prevent injuries.', 'Ana', '2024-12-15');

Es importante aclarar, que para este ejemplo y con fines prácticos guardaremos la contraseña en texto plano.

De esta forma, tenemos listo nuestro laboratorio.

En los siguientes artículos, creamos los scripts php correspondientes para las explicaciones.

Anterior¿Qué son las Inyecciones SQL?SiguienteInyecciones SQL basada en Uniones

Última actualización hace 5 meses