← Volver al listado de tecnologías

Natas Nivel 10 - Command Injection con Filtros

Por: SiempreListo
overthewirenatascommand-injectionbypassnivel-10

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écnicaEjemplo
Usar funcionalidad del comandoArgumentos legítimos
CodificaciónURL encode, hex
Newlines%0a (nueva línea)
Caracteres UnicodeVariantes de caracteres
Null bytes%00
Comentarios# para ignorar resto

Bypass de Blacklist vs Whitelist

EnfoqueSeguridad
BlacklistDébil - siempre hay formas de evadir
WhitelistFuerte - solo permite lo explícitamente permitido

Por Qué el Filtro Falla

  1. Blacklist incompleta: Solo bloquea 3 caracteres
  2. No valida el formato: Permite cualquier input que no tenga los caracteres bloqueados
  3. 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

  1. Blacklists son débiles - siempre hay formas de evadirlas
  2. Entiende las herramientas - grep tiene funcionalidades útiles
  3. Piensa creativamente - no siempre necesitas metacaracteres

¿Qué Sigue?

Los niveles siguientes (11+) cubren:

¡Continúa practicando en OverTheWire Natas!