Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Inyeccion de comandos en el sistema

4 tareas · 20 min · Principiante

La misma clase de fallo de la sala anterior —una entrada del usuario que se mezcla con instrucciones sin separar— cambia de destino y de consecuencia cuando el sink no es una base de datos sino el interprete de comandos del sistema operativo. En Rividata el archivo de herramientas pasa un parametro directo a una llamada del sistema. Se localiza, se clasifica como inyeccion de comandos y se arregla; no se ejecuta ningun comando.

0 de 4 · 0%

Objetivo de la sala

La misma clase de fallo de la sala anterior —una entrada del usuario que se mezcla con instrucciones sin separar— cambia de destino y de consecuencia cuando el sink no es una base de datos sino el interprete de comandos del sistema operativo. En Rividata el archivo de herramientas pasa un parametro directo a una llamada del sistema. Se localiza, se clasifica como inyeccion de comandos y se arregla; no se ejecuta ningun comando.

En herramientas.php de Rividata el valor $_GET['host'] se concatena dentro de una llamada a shell_exec, que ejecuta lo que reciba en el interprete de comandos de la maquina. Como el dato del usuario y el comando viven en la misma cadena, el sistema no distingue uno de otro: cualquier cosa que el usuario anada a host se interpreta como mas comando. El auditor lo reconoce por el destino —el interprete del sistema— y por la concatenacion, igual que con el SQL pero con consecuencias sobre el servidor entero.

Abre el archivo y mira donde termina $host: dentro de la cadena que se le entrega a shell_exec.

Esta tarea se hace en el laboratorio

Un escritorio Linux con terminal, aquí en la página. No instalas nada y no puedes romper nada.

Preparando el escritorio…

Responde para continuar

En herramientas.php, por que la llamada a shell_exec es peligrosa?

Ver pista de ayuda

El destino de la entrada no es una base de datos, es el interprete de comandos del sistema.

La tentacion es filtrar los caracteres que encadenan comandos —el punto y coma, la barra vertical, el acento grave— y seguir concatenando. No basta: hay muchas formas de escribir lo mismo y de encadenar ordenes, y siempre se escapa una. El arreglo que cierra la clase entera es no construir una linea de comando con la entrada: usar una funcion que reciba el programa y sus argumentos por separado, de modo que el usuario nunca pueda anadir otra orden. El auditor recomienda eso, no una lista negra.

Como con el SQL, el patron del arreglo bueno es separar el dato de la instruccion, no intentar adivinar todo lo peligroso que podria escribir alguien.

Esta tarea se hace en el laboratorio

Un escritorio Linux con terminal, aquí en la página. No instalas nada y no puedes romper nada.

Preparando el escritorio…

Responde para continuar

Que arreglo recomiendas para la inyeccion de comandos de herramientas.php?

Ver pista de ayuda

Filtrar caracteres siempre deja un hueco; el arreglo bueno no deja que la entrada sea comando.

Que dos fallos compartan patron no significa que compartan clasificacion ni arreglo. La consulta de catalogo.php es inyeccion SQL (CWE-89) y se cierra con una consulta parametrizada; la llamada de herramientas.php es inyeccion de comandos (CWE-78) y se cierra separando los argumentos del comando. El auditor los reporta por separado porque desarrollo los arregla en sitios distintos y con tecnicas distintas. Mezclarlos en un solo hallazgo esconde uno de los dos.

Reconocer que el patron es el mismo y la clasificacion distinta es lo que convierte la lectura de codigo en una auditoria util.

Esta tarea se hace en el laboratorio

Un escritorio Linux con terminal, aquí en la página. No instalas nada y no puedes romper nada.

Preparando el escritorio…

Responde para continuar

Como clasificas el fallo de herramientas.php frente al de catalogo.php?

Ver pista de ayuda

El patron es el mismo, pero el destino manda: uno va a la base de datos y otro al sistema.

El hallazgo de la inyeccion de comandos tiene su propia nota de triaje en Rividata, con el archivo, el parametro, la clasificacion CWE-78 y el arreglo. Abrela en el laboratorio, confirma que describe la llamada a shell_exec de herramientas.php y lee el codigo del hallazgo con el que cierra.

Esta tarea se hace en el laboratorio

Un escritorio Linux con terminal, aquí en la página. No instalas nada y no puedes romper nada.

Preparando el escritorio…

Responde para continuar

Abre la nota de triaje de la inyeccion de comandos de Rividata (carpeta auditoria) y escribe el codigo del hallazgo que la cierra.

Ver pista de ayuda

Es la nota del parametro host en herramientas.php, no la de la inyeccion SQL del catalogo.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Preparando el escritorio…

16:24
Terminal (user@whoami)
user@whoami:~$
Tab Autocompletar ↑/↓ Historial
bash 5.2.21
Whoami-Labs OS v3.0.1 LTS · build bcc89e

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad