Minientrada: Ejecutar comandos fake

Hola,

Pues hoy tenía pendiente una entrada larga de Python pero prefiero revisarla un poco antes así que os meto una minientrada de una chorrada de seguridad bien divertida de la que me he acordado mientras escribía la otra y me ha dado por probar.

Hace unas semanas estuve investigando sobre escribir sistemas operativos desde cero y para ello necesité hacer un cross-compiler (ya hablaré de ello). El tema es que el cross-compiler lo he tenido que mantener a parte del resto de cosas así que lo guardé en un directorio diferente a donde están los binarios de este estilo normalmente (“/usr/bin”). En mi caso lo guardé en “/usr/local/cross/bin/” aunque realmente no sé por qué lo hice allí, en fin.

El caso es que para poder ejecutarlo hay que decirle al colega que busque en ese directorio también. Para ello la consola comprueba el contenido de la variable global PATH. Podéis verla haciendo un echo $PATH o un export -p y buscando (tirad un pipe con grep PATH por dios).

La variable PATH es una lista de elementos separados por dos puntos ‘:’ (column en inglés). Os enseño la mía 😀

ekaitz@daComputa:~$ echo $PATH
/usr/local/cross/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

La movida es que podemos editar esa variable para que busque en otros directorios. Para eso se puede setear a pelo o con un export:

ekaitz@daComputa:~$ PATH="/home/ekaitz/:$PATH"
ekaitz@daComputa:~$ echo $PATH
/home/ekaitz:/usr/local/cross/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Ahora si quisiésemos ejecutar un comando que estuviese en mi home podríamos hacerlo directamente y la consola lo encontraría.

Ya de paso, si quisiésemos hacer que la variable PATH tomase valores personalizados siempre podríamos editar el archivo .profile de nuestro home. Añadiendo una línea como la que hemos usado para setearla para que la prepare al iniciar. Fijaos, en todo esto no hemos hecho ni un solo comando como superusuario.

Ahora mismo podemos crear un directorio, que nosotros queramos, y llenarlo de scripts y hacer que el sistema busque ahí. ¡Pero podemos hacer algo aún más divertido! Podemos llenar la carpeta de programas que llamen como los clásicos, por ejemplo:

#!/bin/bash
echo "¡Hola!"

Y lo llamamos “ls” y lo guardamos en nuestra carpeta. Le cambiamos los permisos a ejecución:

ekaitz@daComputa:~$ chmod 777 ls

Seguimos sin hacer nada como superusuario.

¿Ahora si ejecutamos ls qué ocurre?

Efectivamente, nos responde: ¡Hola!

Podemos liar bastante a un usuario si conseguimos meternos como él. Podríamos pisar el comando ‘ps’ por ejemplo y evitar que mostrase algunos procesos que no queremos que el usuario vea o ‘netstat’, etc. Sin tener que ser superusuario en ningún momento.

Ésta es una de las razones por las que en los scripts es mejor poner el path completo a los comandos que llamamos con los backticks y cosas del estilo, porque si no, si un usuario es un poco tramposo nos puede destrozar los scripts que hagamos.

Seguro que se pueden hacer más cosas molonas con esto pero no tengo maldad suficiente.

Lo dejo en vuestras manos.

Anuncios

Un pensamiento en “Minientrada: Ejecutar comandos fake

  1. Troyanos y escalado de privilegios en Linux – Free Hacks!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s