Page cover

🟠Veneno

En esta ocasión vamos a hacer el writeup de la máquina Veneno de Dockerlabs, una máquina Linux de dificultad Medium.

Despliegue de la máquina

sudo bash auto_deploy.sh veneno.tar

Estamos desplegando la máquina vulnerable, espere un momento.

Máquina desplegada, su dirección IP es --> 172.17.0.2

Tenemos la IP: 172.17.0.2

Primer acceso

Accedemos través del navegador y llegamos a una default page de Apache:

No obtenemos nada relevante, por lo que vamos a escanear los puertos abiertos en esta máquina.

Escaneo de puertos

Solo encontramos 2 puertos abiertos, el 22 y el 80. En principio nada relevante.

Fuzzing

Haciendo fuzzing con feroxbuster nos encontramos un directorio interesante:

Encontramos un directorio /uploads interesante pero sin ningún archivo en su interior.

Vamos a acceder a /problems.php a ver que encontramos. En principio parece lo mismo que index.html, no encontramos nada relevante. Vamos a probar si tiene algún parámetro vulnerable en la URL:

La flag --hw en Wfuzz sirve para filtrar respuestas HTTP basadas en el tamaño de las palabras en el cuerpo de la respuesta (word count, o número de palabras en el contenido). Esto es útil para descartar resultados irrelevantes y enfocarnos en las respuestas de interés al realizar pruebas de enumeración o fuzzing.

Encontramos que tiene un parámetro vulnerable "backdoor" con el que podríamos leer archivos del sistema, como /etc/passwd:

Encontramos 2 usuarios con shell interesantes:

  • Ubuntu

  • Carlos

Local File Inclusion

Vamos a comprobar que archivos podemos leer del sistema, igual alguno contiene credenciales o información relevante:

También podríamos filtrar por archivos de log con grep:

Encontramos un archivo de logs interesante en /var/log/apache2/error.log

Log poisoning

Ahora que tenemos el access.log a disposición , vamos a tratar de envenenarlo. El envenamiento de este log ocurre cuando introducimos un error y este se registra en /var/log/apache2/error.log, y aprovechamos este comportamiento para inyectar codigo malicioso en el registro.

Abrimos desde el navegador el error.log:

Ahora vamos a solicitar un archivo que no existe para que veamos el comportamiento:

Enviamos la solicitud (con curl) y refrescamos la web en error.log, lo que tuvo que registrar la solicitud que hicimos. Vemos que al final del todo del archivo error.log se registra correctamente el prueba.php que no existe. Nos vamos aprovechar de esto para envenenar el registro con código malicioso php.

Podemos usar por ejemplo el siguiente payload:

Debemos urlencodear <?php system('id') ?>.php para que pueda ser interpretado por el navegador, Lo podemos hacer con Burp Decoder:

Al enviar el curl vemos que se ejecuta el comando id en el archivo de error.log, con lo que podemos probar a cargar un script php que nos envíe una reverse shell.

Subida de webshell

Tenemos ejecucion de comandos a traves del envenamiento de error.log asi que ahora vamos a cargar un script php que nos envie una reverse shell. Vamos a tratar de subir un webshell, en mi caso voy a usar PownyShell

Vamos a renombrar nuestro shell.php a index.html y vamos a levantar un servidor local con python por el puerto 80.

Ahora vamos a crear un payload para descargar en el servidor web dentro de /uploads el index.html que tenemos levantado con python, una vez descargado le cambiamos el nombre a shell.php, el payload final quedaría así:

Ahora lo urlencodeamos:

Y lo enviamos al servidor con el siguiente comando:

Ahora al recargar error.log aparece el log, y si vamos al directorio /uploads vemos que se ha cargado correctamente la webshell:

Al acceder entremos a la webshell y podemos ejecutar comandos:

Escalada de privilegios

No podemos acceder a los directorios home de los usuarios carlos y ubuntu, por lo que haremos un poco de research. En el directorio /var/www/html encontramos un archivo interesante:

Vamos a aplicar técnicas de credential hunting en Linux para buscar archivos de contraseñas:

Desde la webshell no nos deja cambiar al usuario carlos para probar esta contraseña, por lo que vamos a loguearnos por SSH como el usuario carlos:

Si hacemos un ls para ver los archivos nos encontramos con multitud de carpetas::

Podemos usar el siguiente comando para buscar archivos comunes:

Vamos a enviarnos la imagen a nuestro kali para examinarla:

Vamos a analizar la imagen con exiftool:

En Image Quality encontramos una posible contraseña: pingui1730

La probamos con el usuario root y funciona!

Última actualización

¿Te fue útil?