A continuación mostramos una guía clara y práctica en español para montar un laboratorio DVWA (Damn Vulnerable Web Application) en una VM Ubuntu Server ejecutada en VMware.
Esta guía es para laboratorio y fines educativos. No utilices DVWA en entornos de producción.

Pasos clave:
- Actualizar Ubuntu.
- Instalar LAMP (Apache, MySQL, PHP).
- Descargar DVWA.
- Configurar la base de datos MySQL.
- Ajustar config.inc.php.
- Corregir incompatibilidades con MySQL 8.x (si es necesario).
- Activar opciones de PHP (display_errors, allow_url_include).
- Ajustar permisos y comprobar desde el host.
Requisitos
- VMware (Workstation/Player) en tu máquina host.
- Máquina virtual Ubuntu Server (22.04 o 24.x recomendado).
- Conexión entre host y VM (NAT, Host-Only o Bridged según prefieras).
- Usuario con privilegios sudo en la VM.
1) Actualizar el sistema
sudo apt update && sudo apt upgrade -y
2) Instalar Apache, MySQL y PHP (LAMP básico)
sudo apt install apache2 mysql-server php php-mysqli php-gd libapache2-mod-php \
php-zip php-common php-curl php-mbstring php-xml php-json git -y
Habilitar los servicios al arranque (opcional):
sudo systemctl enable apache2
sudo systemctl enable mysql
3) Descargar DVWA y permisos básicos
cd /var/www/html
sudo git clone https://github.com/digininja/DVWA.git
sudo chown -R www-data:www-data DVWA
4) Crear base de datos y usuario MySQL
- Entra en MySQL como root:
sudo mysql
- Crea la base de datos y el usuario (ejemplo):
CREATE DATABASE dvwa;
CREATE USER ‘dvwa’@’localhost’ IDENTIFIED BY ‘p@ssw0rd’;
GRANT ALL PRIVILEGES ON dvwa.* TO ‘dvwa’@’localhost’;
FLUSH PRIVILEGES;
EXIT;
Nota: usa una contraseña adecuada para laboratorio. Si ya tienes autenticación por socket para root, sudo mysql funciona sin contraseña.
5) Configurar DVWA (config.inc.php)
cd /var/www/html/DVWA/config
sudo cp config.inc.php.dist config.inc.php
sudo nano config.inc.php
Asegúrate de que las variables de DB apunten a tu usuario/contraseña:
$_DVWA[‘db_server’] = ‘127.0.0.1’;
$_DVWA[‘db_database’] = ‘dvwa’;
$_DVWA[‘db_user’] = ‘dvwa’;
$_DVWA[‘db_password’] = ‘p@ssw0rd’;
$_DVWA[‘db_port’] = ‘3306’;
Si el archivo usa getenv() con operadores ?:, la sintaxis correcta es, por ejemplo:
$_DVWA = array();
$_DVWA[‘db_server’] = getenv(‘DB_SERVER’) ?: ‘127.0.0.1’;
$_DVWA[‘db_database’] = getenv(‘DB_DATABASE’) ?: ‘dvwa’;
$_DVWA[‘db_user’] = getenv(‘DB_USER’) ?: ‘dvwa’;
$_DVWA[‘db_password’] = getenv(‘DB_PASSWORD’) ?: ‘p@ssw0rd’;
$_DVWA[‘db_port’] = getenv(‘DB_PORT’) ?: ‘3306’;
6) Problemas comunes con MySQL 8.x — corrección rápida
Algunos scripts de DVWA usan ALTER TABLE … ADD COLUMN IF NOT EXISTS que puede fallar en MySQL 8.3. Si al hacer Create / Reset Database obtienes errores SQL, arregla el fichero donde ocurren.
- Haz copia de seguridad del fichero problema:
sudo cp /var/www/html/DVWA/dvwa/includes/DBMS/MySQL.php /var/www/html/DVWA/dvwa/includes/DBMS/MySQL.php.bak
- Reemplaza las ocurrencias problemáticas (automático):
sudo sed -i.bak «s/ADD COLUMN IF NOT EXISTS/ADD COLUMN/g» /var/www/html/DVWA/dvwa/includes/DBMS/MySQL.php
- O edítalo manualmente y cambia líneas como:
$alter = «ALTER TABLE users ADD COLUMN IF NOT EXISTS role VARCHAR(20) DEFAULT ‘user’;»;
por
$alter = «ALTER TABLE users ADD COLUMN role VARCHAR(20) DEFAULT ‘user’;»;
- Reinicia Apache:
sudo systemctl restart apache2
- Vuelve a http://<IP_VM>/DVWA/setup.php y pulsa Create / Reset Database.
7) Activar display_errors y allow_url_include en PHP (solo laboratorio)
- Localiza tu versión de PHP:
php -v
ls /etc/php
- Edita el php.ini de Apache (ejemplo para PHP 8.3):
sudo nano /etc/php/8.3/apache2/php.ini
- Busca y cambia (o añade) estas líneas:
display_errors = On
allow_url_include = On
- Reinicia Apache:
sudo systemctl restart apache2
- Verifica con phpinfo() (temporal):
echo «<?php phpinfo(); ?>» | sudo tee /var/www/html/info.php
# Abre http://<IP_VM>/info.php y verifica, luego borra:
sudo rm /var/www/html/info.php
8) Verifica la IP de la VM y accede desde el host
En la VM:
ip a
Busca la inet de la interfaz (ej.: 192.168.49.132). Desde el navegador del host abre:
http://<IP_VM>/DVWA/setup.php
Ejemplo:
http://192.168.49.132/DVWA/setup.php
9) Recomendaciones posteriores (seguridad y buenas prácticas de laboratorio)
- Mantén la VM en red Host-Only o NAT para aislarla del resto de la red.
- Toma snapshots antes de experimentar (VMware).
- No habilites allow_url_include ni display_errors en entornos reales.
- Practica con una VM atacante (Kali) y Burp Suite u OWASP ZAP desde el host o desde otra VM.
