Page cover

Introducción 03

Este reto

Aquí, debe comenzar a usar la funcionalidad tal como estaba destinada a ser utilizada. Esto te dará una idea de lo que hace el código.

Puede ver que proporciona una dirección IP y que la aplicación está ejecutando el comando ping con la dirección IP que proporcionamos. Está ejecutando un comando. Veamos si hay alguna forma de abusar de esta funcionalidad.

Al investigar un poco, encontrará que hay un tipo de ataque conocido como inyección de comandos.

Inyección de comandos

La inyección de comandos se puede utilizar para ejecutar comandos arbitrarios en un servidor. Se pueden utilizar varias cargas útiles para desencadenar este comportamiento. Por ejemplo, supongamos que el comando inicial es:

ping [parameter]

Dónde [parameter] es el valor que proporcionó en el formulario o en la URL.

Si observa cómo funciona la línea de comandos, encontrará que hay varias formas de agregar más comandos:

  • command1 && command2 que se ejecutará command2 si command1 consigue.

  • command1 || command2 que se ejecutará command2 si command1 falla.

  • command1 ; command2 que se ejecutará command1 entonces command2.

  • command1 | command2 que se ejecutará command1 y enviará la salida de command1 al command2.

  • ...

En esta aplicación, podemos proporcionar un parámetro para command1, pero no hay command2. Lo que vamos a hacer es añadir nuestro propio comando.

En lugar de enviar el archivo [parameter] al comando:

Dónde 127.0.0.1 es nuestro [parameter]. Vamos a enviar un mensaje malicioso [parameter] que contendrá otro comando:

La aplicación pensará que 127.0.0.1 ; cat /etc/passwd es solo un parámetro para ejecutar command1. Pero en realidad inyectamos command2: cat /etc/passwd.

Ahora, lo que queremos hacer es ejecutar el comando para puntuar: /usr/local/bin/score [uuid]. Podemos usar la línea de arriba para ejecutar este comando en lugar de cat /etc/passwd.

circle-info

Ahora inyectamos el código ; cat /usr/local/bin/score/[uuid]

circle-check

Last updated