Hace un par de semanas hablábamos de la posibilidad de modificar un exploit de elevación de privilegios para ejecutarlo de forma no interactiva, y de esta forma poder tomar el control de una máquina.
En el anterior post, nos quedábamos en que habíamos conseguido crear un usuario con privilegios de root (uid=0) en la máquina, pero no teníamos acceso a nivel de red al puerto de SSH, por lo que no podíamos terminar de establecer una sesión interactiva.
Para ello, y dado que solo tenemos acceso a la máquina objetivo a través del servicio que acabamos de explotar, intentaremos usar este mismo servicio para crear un túnel de tráfico TCP sobre este protocolo, en este caso TCP sobre HTTP. La herramienta a utilizar va a ver reDuh, de Sensepost, que dispone de dos piezas: un servidor en versiones php, aspx y jsp que se pueden subir al servidor comprometido, y un cliente java que se lanzará desde nuestro equipo para establecer el túnel.
Una vez subido el servidor reDuh correspondiente (en este caso era php), podemos comprobar si ha sido subido correctamente simplemente con acceder a su URL. Esta pieza no está preparada para ser llamada de esta forma, así que nos da un mensaje de error, pero por lo menos nos confirma que la URL es la correcta:
Una vez subido el php (ya veremos en otra ocasión diferentes formas de hacerlo), ya solo tenemos que llamar al cliente de reDuh señalándole esta URL, de la siguiente forma:
# java -jar reDuhClient.jar http://172.16.146.134/reDuh.php
Tras establecerse esta conexión, reDuh levanta una consola de administración en nuestra máquina local, en el puerto 1010, a la que podemos acceder vía telnet para configurar los túneles que queremos utilizar. Para este caso, que simplemente queremos acceder al SSH local, nos bastará con algo así:
>> [createTunnel]2222:127.0.0.1:22
En este momento ya tenemos un túnel entre nuestro puerto 2222 y el puerto 22 de la máquina comprometida, así que solo tenemos que conectar nuestro cliente de SSH favorito a nuestro puerto local 2222 y todo ese tráfico va a ser encapsulado a través de protocolo HTTP hasta el servicio web que acabamos de explotar, y de ahí, ya otra vez como tráfico TCP "puro", hasta el puerto 22 local de esa máquina. Podemos verlo en un gráfico que me he permitido tomar prestado de la web de Sensepost:
Muy bonito, pero... ¿funciona?
Vamos a ver si podemos conectar mediante este puerto 2222 local al SSH de la máquina comprometida y entrar con las credenciales de usuario que nos creamos en el post anterior:
¡Perfecto! Parece que estamos dentro :)
Ahora ya podemos "jugar" todo lo que queramos con la máquina, con una sesión totalmente interactiva, por supuesto.
Gracias a Sensepost por esta fantástica herramienta.