Post

HTB Mirai

Resumen

logo Mirai es una máquina muy divertida. Para comenzar, es necesario realizar un reconocimiento para darse cuenta de que se está enfrentando a una Raspberry Pi. Con eso en mente, se pueden probar credenciales por defecto para luego ingresar y descubrir que se puede ejecutar cualquier comando con el usuario root, lo que permite escalar privilegios. Sin embargo, al buscar la bandera de root, no se encuentra en el sistema, sino en una USB; precisamente, la USB en la que la borraron. Pero al investigar sobre esto, se descubre que la información aún sigue almacenada en la porción de memoria que fue asignada a la USB. Es una máquina bastante divertida y con una temática totalmente interesante.

Reconocimiento

Para empezar se realiza un ping para ver si hay conectividad con la máquina:

1
2
3
4
5
6
7
8
❯ ping -c 1 10.10.10.48

PING 10.10.10.48 (10.10.10.48) 56(84) bytes of data.
64 bytes from 10.10.10.48: icmp_seq=1 ttl=63 time=206 ms

--- 10.10.10.48 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 206.463/206.463/206.463/0.000 ms

Escaneo de Puertos

Con esto en mente, se puede realizar un escaneo de puertos con nmap para ver qué puertos se encuentran abiertos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ nmap -p- --min-rate 2000 10.10.10.48 -Pn -oG ports

Connect Scan Timing: About 98.95% done; ETC: 15:20 (0:00:00 remaining)
Nmap scan report for 10.10.10.48
Host is up (0.17s latency).
Not shown: 65527 closed tcp ports (conn-refused)
PORT      STATE    SERVICE
22/tcp    open     ssh
53/tcp    open     domain
80/tcp    open     http
1227/tcp  open     dns2go
3216/tcp  filtered ferrari-foam
24943/tcp filtered unknown
32400/tcp open     plex
32469/tcp open     unknown

Ahora que se sabe qué puertos están abiertos, se puede realizar un escaneo más profundo para identificar las tecnologías que se están utilizando.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
❯ nmap -p22,53,80,1227,32400,32469 -sVC 10.10.10.48 -oN Versions
Starting Nmap 7.94SVN ( https://nmap.org ) at 2023-12-19 15:19 EST
Nmap scan report for 10.10.10.48
Host is up (0.25s latency).

PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 6.7p1 Debian 5+deb8u3 (protocol 2.0)
| ssh-hostkey: 
|   1024 aa:ef:5c:e0:8e:86:97:82:47:ff:4a:e5:40:18:90:c5 (DSA)
|   2048 e8:c1:9d:c5:43:ab:fe:61:23:3b:d7:e4:af:9b:74:18 (RSA)
|   256 b6:a0:78:38:d0:c8:10:94:8b:44:b2:ea:a0:17:42:2b (ECDSA)
|_  256 4d:68:40:f7:20:c4:e5:52:80:7a:44:38:b8:a2:a7:52 (ED25519)
53/tcp    open  domain  dnsmasq 2.76
| dns-nsid: 
|_  bind.version: dnsmasq-2.76
80/tcp    open  http    lighttpd 1.4.35
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: lighttpd/1.4.35
1227/tcp  open  upnp    Platinum UPnP 1.0.5.13 (UPnP/1.0 DLNADOC/1.50)
32400/tcp open  http    Plex Media Server httpd
| http-auth: 
| HTTP/1.1 401 Unauthorized\x0D
|_  Server returned status 401 but no WWW-Authenticate header.
|_http-favicon: Plex
|_http-title: Unauthorized
|_http-cors: HEAD GET POST PUT DELETE OPTIONS
32469/tcp open  upnp    Platinum UPnP 1.0.5.13 (UPnP/1.0 DLNADOC/1.50)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Enumeración

Al revisar la web, se ve lo siguiente:

web

Al revisar la información de la web con la ayuda de WhatWeb, se observa que hay un encabezado un tanto llamativo. Por lo tanto, se puede buscar información relacionada a él:

1
2
3
❯ whatweb http://10.10.10.48/

http://10.10.10.48/ [404 Not Found] Country[RESERVED][ZZ], HTTPServer[lighttpd/1.4.35], IP[10.10.10.48], UncommonHeaders[x-pi-hole], lighttpd[1.4.35]

pihole

Eso, combinado con el hecho de que se están utilizando tecnologías ligeras, como en el servidor DNS y en el servidor web, permite concluir que el dispositivo contra el que se está enfrentando es una Raspberry Pi.

Fuzzing

Al listar directorios con la ayuda de GoBuster dentro de la web, se puede ver lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
❯ gobuster dir -u http://10.10.10.48/ -w /usr/share/seclists/Discovery/Web-Content/big.txt  -t 100
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.10.48/
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/seclists/Discovery/Web-Content/big.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/admin                (Status: 301) [Size: 0] [--> http://10.10.10.48/admin/]
/versions             (Status: 200) [Size: 13]
Progress: 20476 / 20477 (100.00%)

Al revisar dentro de la carpeta admin se puede ver un panel de administración admin

Al investigar cuáles son las credenciales por defecto para Pi-hole, se encuentra lo siguiente:

default

Pero al intentar probarlas dentro del inicio de sesión, no son correctas.

login

Pero, por otro lado, existe un servidor SSH, por lo que podría intentarse el inicio de sesión desde el mismo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
❯ ssh pi@10.10.10.48
pi@10.10.10.48's password: 

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Dec 19 18:54:07 2023 from 10.10.14.17

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.


SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~$

Ahora que se ha obtenido acceso con las credenciales, solo hace falta buscar la bandera del usuario.

1
2
3
4
5
pi@raspberrypi:~/Desktop$ pwd
/home/pi/Desktop
pi@raspberrypi:~/Desktop$ ls
Plex  user.txt
pi@raspberrypi:~/Desktop$ 

Escalada de Privilegios

Ahora se pueden revisar los privilegios a nivel de sudoers del usuario con el comando sudo -l para ver si se tiene acceso a algún binario especial.

1
2
3
4
5
6
7
sudo -l
Matching Defaults entries for pi on localhost:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User pi may run the following commands on localhost:
    (ALL : ALL) ALL
    (ALL) NOPASSWD: ALL

Con esto, se puede ver que el usuario pi puede ejecutar cualquier comando como sudo, por lo que puede escalar privilegios de la siguiente manera.

1
2
sudo su
root@raspberrypi:/home/pi/Desktop# 

Y ahora, con esto, se puede ver la bandera de root:

1
2
3
4
5
root@raspberrypi:~# ls
root.txt
root@raspberrypi:~# cat root.txt 
I lost my original root.txt! I think I may have a backup on my USB stick...
root@raspberrypi:~# 

Buscando la Flag

Como indica la nota, la bandera se encuentra dentro de una USB conectada al sistema, por lo que se puede revisar dentro de la carpeta ‘media’ para ver si se encuentra allí, y revisar su contenido.

1
2
3
4
5
6
7
8
9
10
11
root@raspberrypi:~# ls /media/
usbstick
root@raspberrypi:~# ls /media/usbstick/
damnit.txt  lost+found
root@raspberrypi:~# cat /media/usbstick/damnit.txt 
Damnit! Sorry man I accidentally deleted your files off the USB stick.
Do you know if there is any way to get them back?
-James

root@raspberrypi:~# 

Pero la bandera fue eliminada, por lo que hay que lograr encontrarla. Para esto, hay que analizar un poco la montura con ayuda del comando mount o con lsblk.

1
2
3
root@raspberrypi:~# mount | grep usbstick
/dev/sdb on /media/usbstick type ext4 (ro,nosuid,nodev,noexec,relatime,data=ordered)
root@raspberrypi:~#
1
2
3
4
5
6
7
8
9
root@raspberrypi:~# lsblk -p
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
/dev/sda      8:0    0   10G  0 disk 
├─/dev/sda1   8:1    0  1.3G  0 part /lib/live/mount/persistence/sda1
└─/dev/sda2   8:2    0  8.7G  0 part /lib/live/mount/persistence/sda2
/dev/sdb      8:16   0   10M  0 disk /media/usbstick
/dev/sr0     11:0    1 1024M  0 rom  
/dev/loop0    7:0    0  1.2G  1 loop /lib/live/mount/rootfs/filesystem.squashfs
root@raspberrypi:~# 

Por lo que la información de la USB se encuentra alojada dentro del archivo /dev/sdb, por lo que se puede buscar los elementos que sean legibles que se encuentren dentro de ese archivo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
strings /dev/sdb


>r &
/media/usbstick
lost+found
root.txt
damnit.txt
>r &
>r &
/media/usbstick
lost+found
root.txt
damnit.txt
>r &
/media/usbstick
2]8^
lost+found
root.txt
damnit.txt
>r &
3d3e483143ff12ec505d026fa13e020b
Damnit! Sorry man I accidentally deleted your files off the USB stick.
Do you know if there is any way to get them back?
-James

Y con esto, se puede ver la bandera y se da por completada la máquina.

This post is licensed under CC BY 4.0 by the author.