systemadmin.es > Seguridad > Inyección de opciones en scripts bash

Inyección de opciones en scripts bash

Al realizar scripts que llaman a otros scripts o binarios debemos tener en cuenta que se pueden llegar a inyectar opciones a través de parámetros. Vamos a ver un ejemplo:

Vamos a suponer un script tan simple como el siguiente:

#!/bin/bash
ls $1

Podemos ver que únicamente hace un ls del primer parámetro que le pasemos:

# ./test.sh test.sh
test.sh

Pero si el primer parámetro tiene un espacio, luego se reinterpreta al pasarlo al ls como opción:

# ./test.sh "test.sh -l"
-rwxr-xr-x 1 root root 19 Feb 27 08:32 test.sh

Lo podemos ver más claro con las opciones de debug de bash:

# bash -xv ./test.sh "test.sh -l"
#!/bin/bash
ls $1
+ ls test.sh -l
-rwxr-xr-x 1 root root 19 Feb 27 08:32 test.sh

Para evitar esto, siempre que se quiera pasar una opción que puede manipular el usuario deberemos indicar que es una única opción en conjunto mediante comillas. El script quedaría:

#!/bin/bash
ls "$1"

De esta forma ya no podríamos inyectar opciones a ls:

# ./test.sh "test.sh -l"
ls: test.sh -l: No such file or directory

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>