Tenemos una maquina denominada OverPass3 - Hosting, un reto de nivel medio.
En esta maquina se nos indica que debemos lanzar la maquina y esperar a que inicie, tardara cerca de 5 minutos, de otro modo no podremos acceder a la misma. Se ha establecido que la maquina tenga un nivel intermedio de expertiz, y esta bien denominada, ya que hay que trabajar un poco para poder escalar privilegios, las vulnerabilidades para poder hacerlo solo podran ser explotadas casi al final del desarrollo de la misma.
Como generalmente creo que se debería comenzar, es realizando un un escaneo de puertos; así podremos saber que puertos abiertos tiene la maquina y poder tener un panorama general de los pasos a realizar.
Podemos ver que tenemos 3 puertos abiertos:
- 21
- 22
- 80
Así que vamos a seguir recolectando información. Ya que tenemos un sitio web, verificamos si podemos ver algo dentro del sitio, dentro del código fuente y demás. Lo mas interesante de reseñar es que tenemos algunos nombres que nos podrían ayudar a tratar de probar accesos a través de SSH o algún administrador del sitio que pueda tener, así que tomamos nota:
- Paradox
- Elf
- MuirlandOracle
- NinjaJc01
Vamos a ejecutar un escaneo de directorios sobre el sitio web, verificamos si encuentra alguna zona de administración o similar.
Observamos que nos ha encontrado un directorio interesante (/backups
), ya que no es común que se tenga en un sitio web. Al verificar este directorio encontramos que tiene un fichero ZIP
, que nos lo descargaremos y verificaremos que contiene.
Una vez que lo hemos descargado encontramos que hay dos ficheros:
- Un fichero excel encriptado con
GPG
- Una llave que suponemos que seria la que nos permita descencriptar el fichero.
Lo que debemos hacer primero es importar esta llave que hemos obtenido (y que seguro nos vendrá muy bien)
Posteriormente desencriptamos el fichero excel encriptado.
Obtenemos un fichero excel que podemos visualizar, bien sea con algún editor que tengas en tu maquina (como LibreOffice
) o utilizar un visor online. De un modo u otro, podremos ver que hay una tabla con algunos datos interesantes: Nombre de Cliente, Nombre de Usuario, Contraseña, Numero de tarjeta de crédito y CVC (No os emocionéis, los números de tarjeta no son validos). Verificaremos si con estos datos podemos acceder via SSH
.
Customer Name | Username | Password | Credit card number | CVC |
---|---|---|---|---|
Par. A. Doxx | paradox | SxxxxxAxxGxxxx123 | 4111 1111 4555 1142 | 432 |
0day Montgomery | 0day | OxxxxIxTxxBxxxDxx | 5555 3412 4444 1115 | 642 |
Muir Land | muirlandoracle | Axx1D0xxAxxAw3x0xx | 5103 2219 1119 9245 | 737 |
Ya que tenemos algunos usuarios y contraseñas, probaremos el acceso a través de SSH
; en este caso he comenzado con el primer usuario, que para mi tiene mas sentido de que exista un usuario con ese nombre.
No obtenemos acceso, y según el mensaje todo indica que el acceso a través de SSH
con usuario y contraseña no esta habilitado y se requiere un par de claves.
Hemos intentado con los otros usuarios, y tampoco obtenemos acceso.
Vimos que el puerto 21 (ftp) también estaba abierto, voy a intentar el acceso a través de este puerto FTP
, pero nos encontramos con que no hay acceso con usuario anónimo, de nuevo, intentaremos el acceso acceso con los datos que hemos obtenido del fichero excel, veremos si hay suerte.
En muchas ocasiones encontramos que se reutilizan usuarios y contraseñas para varios servicios.
Podemos encontrar que obtenemos acceso con el usuario paradox, y la ubicación donde nos sitúa es donde podemos encontrar los archivos que componen el sitio web. He tratado de moverme hacia una ubicación diferente y al parecer este usuario en FTP
esta enjaulado.
Sin embargo, el hecho de que no podamos movernos no quiere decir que no podamos hacer nada, mas aun que estamos ubicados en la carpeta donde están los ficheros del sitio web, podemos comenzar nuestras acciones de acceso y escalado de privilegios.
Podemos en esta ocasión, de forma realmente sencilla, subir ficheros y ejecutarlos desde el sitio web, así que intentare subir un archivo PHP
que contiene una shell reversa y acceder al servidor.
Como vemos, al listar los ficheros del servidor podemos ver el fichero PHP que hemos subido con la shell reversa.
Recuerda que en el fichero PHP donde tenemos la shell reversa debemos modificarlo con la IP de nuestra maquina local y el puerto local donde escuchara, de esta forma se podrá establecer la comunicación.
En nuestra maquina local, ejecutamos netcat
para que escuche en el puerto que hemos configurado en el fichero PHP
y ejecutamos desde la web el fichero para activar la shell reversa.
Tenemos de esta forma establecida la comunicación a través de netcat
y tenemos una shell en el servidor remoto; pero es una shell un poco limitada, así que ejecutaremos algunos comandos para poder tener mayores funcionalidades.
Estos comando nos permiten tener autocompletado, buscar a través del uso de las flechas del teclado y algunas opciones mas dentro de la shell.
Verificamos con qué usuario nos “loguea” en esta shell (lo mas común es www o apache)
La primera flag que nos piden que debemos buscar esta relacionada con este mismo usuario, así que buscaremos donde puede estar la flag.
A través de ensayo/error hemos encontrado un fichero denominado web.flag, que suponemos que es nuestra primera flag.
En estos casos, es ir probando opciones:
- Buscar por el nombre apache
- Buscar por la palabra flag como nombre
- Buscar por la palabra flag como extensión
- Etc
La siguiente pista que nos dan, es que la flag de usuario se encuentra bajo el usuario "james"
, cuando revisamos qué usuarios tienen un home
creado encontramos dos: Paradox y James.
Pero al intentar acceder a la carpeta de usuarios nos pone que no tenemos permisos.
Vamos a reutilizar accesos, no tenemos de forma sencilla o clara un posible acceso como James
; podríamos realizar una análisis de fuerza bruta a través de Hydra
pero hemos visto con el usuario Paradox
que el acceso a través de SSH
se realiza con alguna clave privada, así que esta no es una buena opción. Dicho lo anterior reutilizaremos el acceso de Paradox
que teníamos para el acceso a FTP
, veremos si podemos cambiar de usuario, desde Apache
hacia Paradox
.
Vemos que podemos acceder con este usuario, verificamos si podemos tener acceso como sudo
o superuser
.
Este usuario es un usuario normal, es decir no tiene permisos especiales, no esta dentro del grupo sudoers
, que permita ejecutar acciones como usuario root
, y que quizá podamos vulnerar.
Verificamos si podemos acceder a la carpeta home de James
, que es el usuario que nos interesa y donde esta la flag.
No me gusta utilizar herramientas automatizadas, que en muchas ocasiones nos puede ayudar pero que nos da mucha información, sin embargo, para esta maquina utilizare Linpeas
, que nos hará una búsqueda total de vulnerabilidades, y veremos si encuentra algo interesante.
Lo primero, debemos descargar el bash de Linpeas
desde su repositorio oficial, en nuestra maquina local.
De nuevo, accedemos por FTP
con el acceso que ya tenemos y subiremos el bash
de Linpeas para poder ejecutarlo en la maquina remota.
Sabemos que el FTP
nos deja ubicado en la carpeta del sitio web, así que nos posicionaremos en esta carpeta, le damos permisos de ejecución al bash
y verificamos que información nos va arrojando.
Dentro de toda la información que nos arroja, que es bastante extenso, podemos ver que ha encontrado una vulnerabilidad en el montaje de un recurso NTFS
Buscando en algunos recursos de internet, que nos indique cómo realizar este montaje encontramos que se puede realizar con una redirección de puertos, así que, como he mencionado en un post anterior, utilizare Chisel
.
Puedes encontrar mas información en: https://0xdf.gitlab.io/2020/08/10/tunneling-with-chisel-and-ssf-update.html
Lo que tenemos que hacer es ir al github oficial y descargar el ejecutable que necesitamos. Para que funcione la redirección de puertos y poder montar el recurso, requerimos que Chisel
este tanto en nuestra maquina local (server) como en la maquina remota (client), para poder copiar el binario en la maquina remota reutilizare el acceso FTP que ya tenemos.
Le damos permisos de ejecución al binario de Chisel
, tanto en nuestra maquina local, como en la maquina remota. Y una vez que se tiene permisos de ejecución lo iniciamos, en nuestra maquina local como servidor y en la maquina remota como cliente.
Como información de aprendizaje
$ chisel server --p 8000 --reverse
En el lado del servidor (maquina local
), el puerto 8000 es elegido aleatoriamente por nosotros para escuchar.$ ./chisel client 10.x.x.x:8000 R:2021:127.0.0.1:2021
R:2021 significa que cuando la conexión es establecida en el puerto 8000 con tu servidor en la IP 10.x.x.x, el servidor (maquina local
), también abre el puerto 2021.
Luego cuando un paquete va hacia el puerto 2021 en tu lado, es redirigido al túnel en el puerto 8000 y enviado afuera a 127.0.0.1:2021 en la victima (maquina remota
)Espero que hayas seguido el tema. (y que haya podido ser claro)
Una vez que tenemos conexión a través de Chisel
, vamos a tratar de montar el recurso NFS
en nuestra maquina local. Tal como hemos visto anteriormente al verificar /etc/exports, podemos ver la configuración para el NFS. Cuando obtenemos fsid=0 significa que la ubicación /home/james como recurso raíz, sea igual a / .
En nuestra maquina local creamos una carpeta, donde montaremos el recurso NFS y ejecutamos el comando de montaje.
Allí encontramos y obtenemos la flag de usuario.
Finalmente, nos hace falta realizar el ultimo escalado de privilegios y poder acceder al usuario root
. Podemos comenzar por obtener una shell
como James y desde allí escalar hacia el usuario root
. Para esta finalidad, trataremos de obtener la llave privada SSH del usuario James, que parece tener mayores y mejores privilegios sobre la maquina.
Vamos a copiar el fichero id_rsa
a nuestra maquina local, le asignaremos los permisos adecuados y accederemos como el usuario James.
Anteriormente habíamos visto que la vulnerabilidad era que que el recurso NFS
lo podemos montar como root en nuestra maquina local y desde allí manipular todos los permisos.
Vamos a seguir aprovechando esta vulnerabilidad y vamos a copiar un binario bash
en el recurso NFS
y cambiarle los permisos desde nuestra maquina local; de esta forma esperamos obtener una shell como root.
Ya hemos modificado los permisos, estableciendo un SUID
y un permiso total; también hemos modificado el propietario para que sea root
. Lo podemos ver en nuestra maquina local y en la maquina remota.
Ejecutamos el binario bash que hemos modificado con estos permisos y obtenemos nuestra shell
como root
Ya que estamos como root
, procedemos a sacar la ultima flag, que suponemos esta dentro de la carpeta /root
Esta maquina, como hemos indicado al comienzo es una maquina de nivel medio, hay que comenzar a tener cierta expertiz y ciertos conocimientos para poder explotarla, hemos encontrado un camino que parecía sencillo, pero hemos podido comprobar que hay que realizar algo de "try Harder"
para lograr escalar privilegios y alcanzar las flag propuestas.
Esperamos que esta guía haya sido clara y cualquier errata, duda o sugerencia, podéis hacérnosla llegar por cualquiera de los medios aquí dispuestos.