← Volver al listado de tecnologías
Natas Nivel 10 - Command Injection con Filtros
Natas Nivel 10 - Command Injection con Filtros
Objetivo
Similar al nivel anterior, pero ahora hay un filtro que bloquea ciertos caracteres.
Análisis del Código
<?php
$key = "";
if(array_key_exists("needle", $_REQUEST)) {
$key = $_REQUEST["needle"];
}
if($key != "") {
if(preg_match('/[;|&]/',$key)) {
print "Input contains an illegal character!";
} else {
passthru("grep -i $key dictionary.txt");
}
}
?>
El Filtro
preg_match('/[;|&]/',$key)
Bloquea: ;, |, &
Teoría: Bypass de Filtros
Caracteres No Filtrados
Aunque ;, | y & están bloqueados, podemos usar la funcionalidad de grep a nuestro favor.
Múltiples Archivos en grep
grep -i "patrón" archivo1 archivo2
Grep puede buscar en múltiples archivos.
Solución
Usar grep para leer el archivo
. /etc/natas_webpass/natas11
Esto se convierte en:
grep -i . /etc/natas_webpass/natas11 dictionary.txt
El . significa “cualquier carácter”, así que grep muestra todas las líneas del archivo de contraseñas.
Alternativa
"" /etc/natas_webpass/natas11
Busca cadena vacía (coincide con todo) en el archivo de contraseñas.
Técnicas de Bypass
| Técnica | Ejemplo |
|---|---|
| Usar funcionalidad del comando | Argumentos legítimos |
| Codificación | URL encode, hex |
| Newlines | %0a (nueva línea) |
| Caracteres Unicode | Variantes de caracteres |
| Null bytes | %00 |
| Comentarios | # para ignorar resto |
Bypass de Blacklist vs Whitelist
| Enfoque | Seguridad |
|---|---|
| Blacklist | Débil - siempre hay formas de evadir |
| Whitelist | Fuerte - solo permite lo explícitamente permitido |
Por Qué el Filtro Falla
- Blacklist incompleta: Solo bloquea 3 caracteres
- No valida el formato: Permite cualquier input que no tenga los caracteres bloqueados
- No escapa el input: El input sigue llegando al comando
Prevención Correcta
// Whitelist: solo letras y números
if (preg_match('/^[a-zA-Z0-9]+$/', $key)) {
$escaped = escapeshellarg($key);
passthru("grep -i $escaped dictionary.txt");
}
Lecciones
- Blacklists son débiles - siempre hay formas de evadirlas
- Entiende las herramientas - grep tiene funcionalidades útiles
- Piensa creativamente - no siempre necesitas metacaracteres
¿Qué Sigue?
Los niveles siguientes (11+) cubren:
- XOR encryption y cookies
- SQL Injection
- Sesiones y autenticación
- SSRF (Server-Side Request Forgery)
- Criptografía débil
¡Continúa practicando en OverTheWire Natas!