Requisitos previos:
# docker-compose.yml
version: '3.8'
services:
webgoat:
container_name: webgoat
image: webgoat/webgoat
ports:
- "8080:8080"
- "9090:9090"
volumes:
- ./webgoat_data:/home/webgoat/.webgoat
Pasos de instalación:
# 1. Crear directorio y archivo
mkdir webgoat-lab && cd webgoat-lab
nano docker-compose.yml # Pegar configuración
# 2. Iniciar servicios
docker-compose up -d
# 3. Verificar estado
docker-compose ps
Acceso a las aplicaciones:
Cada vulnerabilidad incluye:
Tipos principales:
# Request original
GET /WebGoat/users/details/1234
# Modificación para IDOR
GET /WebGoat/users/details/1235
# Verificar respuesta
{
"userId": 1235,
"username": "otro_usuario",
"email": "privado@ejemplo.com"
}
Problemas comunes:
# Ejemplo de hash inseguro (MD5)
md5("password123") = "482c811da5d5b4bc6d497ffa98491e38"
# Hash seguro con salt (bcrypt)
bcrypt("password123", salt) = "$2a$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LcdYaM.ZK.4K3W"
Tipos principales:
-- Query vulnerable
SELECT * FROM users WHERE username = '$user' AND password = '$pass'
-- Ataque básico
' OR '1'='1
-- Query resultante
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = ''
Problemas comunes:
// Código vulnerable
async function procesarCompra(userId, itemId) {
let saldo = await getSaldo(userId);
let precio = await getPrecio(itemId);
if (saldo >= precio) {
await realizarCompra(userId, itemId);
await actualizarSaldo(userId, saldo - precio);
}
}
Problemas típicos:
# Headers recomendados
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Security-Policy: default-src 'self'
X-XSS-Protection: 1; mode=block
Recursos adicionales: