Enumeración de Servicios y puertos expuestos a la red.
Como es común en las máquinas desplegadas y virtualizadas en red local, se identifica la IP (host) de la VM víctima que este caso se apoda "Agent" y se puede utilizar la siguiente combinación de parámetros y filtros para un output optimizado.
Tabla descriptiva de los parámetros y filtros utilizados en la ejecución de arp-scan:
Se prosigue con la herramienta nmap realizando dos escaneos, el primero más rápido al sincronizar con los siguientes parámetros:
Si aún no conoces los rangos y tipologías de todos los puertos que a día de hoy conforman la estructura para servicios en red estipulada por la Agencia de asignación de números por Internet (IANA), puedes aprender más sobre ello en este artículo.
┌──(root㉿maritrini)-[/home/kali/vulnyx/agent]└─#nmap-sS-Pn-p--n--min-rate=6969192.168.1.100StartingNmap7.93 ( https://nmap.org ) at 2023-12-18 13:37 ESTNmapscanreportfor192.168.1.100Hostisup (0.00042s latency).Notshown:65533closedtcpports (reset)PORTSTATESERVICE22/tcpopenssh80/tcpopenhttpMACAddress:08:00:27:A8:E8:35 (Oracle VirtualBoxvirtualNIC)Nmapdone:1IPaddress (1 hostup) scanned in 3.56 seconds
Una vez se recopila el resultado del primer sondeo al activo, se procede con uno más centrado en extraer información de estos dos servicios abiertos, SSH por puerto 22 y HTTP por puerto 80. Para ello se ha utilizo los siguientes parámetros.
Ahora se comprueba estas versiones en las bases de datos de vulnerabilidades existentes, se adjunta una tabla documental sobre SSH y el gestor de contenido web NGINX
Se comprueba con "searchsploit" a nivel de sistema si existe algún exploit usable para las versiones encontradas pero antes, se recomienda actualizar la base de datos local referente a exploitdb en el sistema, tal como se especifica a continuación.
searchsploit-u
En la tercera parte del proceso de instalación se señalan tres aspectos de interés:
El identificativo de paquetería que se utiliza para la actualización.
Los posibles paquetes que se pueden actualizar en sistema.
Los paquetes nuevos a instalar.
La actualización suele tardar unos minutos pero si el sistema lleva tiempo sin actualizar los repositorios generales dependientes de Kali Linux o aquellos usados para searchsploit, puede tardar mucho más tiempo así que paciencia.
En el siguiente desplegable se puede observar el output que corresponde a la actualización.
Con un 403 se procede con la enumeración de directorios y extensiones dependientes de la IP con diferentes herramientas como wfuzz, dirbuster, gobuster, entre otras, no se consigue ningún resultado con respuesta 200 o 301 por lo que después de investigar en diferentes caminos a seguir, se ejecuta un testssl al 80 para verificar un posible puerto trampa que ejerza como SSL/TLS del que extraer información.
El output indica que no se puede realizar la conexión:
┌──(root㉿maritrini)-[/home/kali]└─#testssl192.168.1.100:80###########################################################testssl3.0.8fromhttps://testssl.sh/Thisprogramisfreesoftware.DistributionandmodificationunderGPLv2permitted.USAGEw/oANYWARRANTY.USEITATYOUROWNRISK!Pleasefilebugs@https://testssl.sh/bugs/###########################################################Using"OpenSSL 3.0.8 7 Feb 2023 (Library: OpenSSL 3.0.8 7 Feb 2023)" [~81 ciphers]onmaritrini:/usr/bin/openssl (built:"Feb 7 20:42:42 2023",platform:"debian-amd64")Start2023-12-2212:49:01-->>192.168.1.100:80 (192.168.1.100) <<-- rDNS (192.168.1.100): -- 192.168.1.100:80 doesn't seem to be a TLS/SSL enabled server The results might look ok but they could be nonsense. Really proceed ? ("yes" to continue) --> yes Service detected: Couldn't determine what's running on port 80, assuming no HTTP service => skipping all HTTP checks
Testing protocols via sockets except NPN+ALPN SSLv2 not offered (OK) SSLv3 not offered (OK) TLS 1 not offered TLS 1.1 not offered TLS 1.2 not offered TLS 1.3 not offered
Tras varias pruebas realizadas y gracias al recuerdo de un antiguo problema solucionando una petición de salida de un dispositivo hacia una url de internet (habilitar el flujo a través de un firewall en un servidor gestionado con Fedora WorkStation) y sumando la pista del nombre de la máquina CTF "Agent", se encuentra la técnica que permite la correcta enumeración de directorios y extensiones.
Esta técnica se basa en comprobar si el "user-agent" que está marcado por defecto en las peticiones, tiene un bloqueo de algún nivel y por ese motivo se recibe una respuesta 403. Curl permite la opción de utilizar un agente modificado en las peticiones y revela que efectivamente ahora se puede conectar la petición.
La herramienta wfuzz alberga una parametrización que permite utilizar un agente en específico, lo que devuelve un resultado positivo revelando el "index.html" y "websvn".
┌──(root㉿maritrini)-[/home/kali]└─# wfuzz -c --hc=404,403 -w /usr/share/wordlists/seclists/Discovery/Web-Content/common.txt -H "User-Agent: Delicius-Agent" -u 192.168.1.100/FUZZ
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************* Wfuzz 3.1.0 - The Web Fuzzer *********************************************************Target:http://192.168.1.100/FUZZTotalrequests:4715=====================================================================ID Response Lines Word Chars Payload
=====================================================================000002194: 200 23 L 75 W 615 Ch "index.html"
000004512: 301 7 L 11 W 169 Ch "websvn"
Totaltime:6.968888ProcessedRequests:4715FilteredRequests:4713Requests/sec.:676.5785
Se accede por navegador gráfico y se observa una redirección al archivo listing.php que resuelve en un panel web de gestión.
Se procede con una enumeración de vulnerabilidades para la versión del panel de gestión WebSVN el cual permite funciones de comprobación y revisión de archivos o repositorios así como sus versiones de modificación. En este caso la versión es la 2.6.0 y se observa en el footer de la propia interfáz web.
Explotación de vulnerabilidad en el software WebSVN.
La versión que tiene el activo es una versión vulnerable por lo que se investiga en las diferentes bases de datos para recopilar información de como se efectúa la técnica de explotación.
Como es común en DeliciousHack, a continuación está disponible una tabla con toda la documentación anexa correspondiente a la información recopilada tras la investigación.
En este caso, se utiliza la base de datos local (la cual se explica en un apartado anterior) y se realiza una búsqueda por versión y software, encontrando como resultado el exploit necesario para realizar el ataque de ejecución de comandos remota.
A través del parámetro "-m" se copia el archivo en Python que alberga el código del exploit, se debe indicar el identificador o nombre del exploit. Esta copia se genera en el directorio actual en donde se encuentre la sesión de tty donde se ejecuta el comando, una vez realizada la copia se cambia el valor de la variable PAYLOAD por comandos que interactúen con el servidor.
Se revisa el código para entender lo que realiza por detrás el código programado en Python que permite automatizar el proceso.
Lo interesante de esta captura está en los recuadros rojos, donde se aprecia la variable de PAYLOAD que se debe modificar y la última parte que realiza la petición. La curiosidad siempre es buena por lo que se intenta realizar el proceso de forma manual para consensuar si la lectura del código es correcta. Se parte de la variable REQUEST_PAYLOAD que alberga una extensión del buscador de WebSVN (esto viene especificado en los CVE que están disponibles en el apartado anterior), se utiliza la url combinando la extensión y se obtiene que desde el navegador la respuesta es un 404 pero utilizando curl la respuesta cambia a 403.
La ejecución de una revershell con bash no es posible manualmente con solo utilizar la petición directamente por lo que se examina un poco más el código de Python, utiliza el módulo anexo de "quote_plus" para formatear el tipo de petición que alberga el PAYLOAD, en la documentación oficial de esta librería se especifica las funciones del módulo.
La comprobación manual de este paso no surte efecto y queda como tarea pendiente para esta wiki, entender como gestionar este RCE de forma manual, mientras tanto para la finalización de este writeup, se continua con el uso del exploit.
Se añade la IP de nuestro host (sistema) y un puerto que no esté siendo usado por ningún servicio tanto en nuestro sistema como en el del host atacado.
El siguiente paso es habilitar un puerto TCP con netcat en el puerto 6969 y así mismo ejecutar el exploit programado en Python que acabamos de modificar con nuestra IP.
┌──(root㉿maritrini)-[/home/kali]└─#nc-lvnp6969listeningon [any] 6969 ...connectto [192.168.1.62] from (UNKNOWN) [192.168.1.100] 56176bash:cannotsetterminalprocessgroup (422): Inappropriate ioctl for devicebash:nojobcontrolinthisshellwww-data@agent:~/html/websvn$id;whoami;hostnameid;whoami;hostnameuid=33(www-data) gid=33(www-data) groups=33(www-data)www-dataagentwww-data@agent:~/html/websvn$
Se obtiene una reverseshell bajo usuario www-data y se accede al servidor con una tty no interactiva.
Enumeración y Pivoting de usuarios en sistema.
Para la enumeración se comienza con la lectura del archivo passwd que almacena los usuarios en sistema además de datos de interés como si tienen directorio o una shell con bash.
Por lo que parece, el camino a seguir seguramente se oriente hacia el pivoting hacia el usuario dustin. Después de enumerar por permisos especiales y buscar por unidades a través de systemd, se ejecuta enumeración de permisos SUDO por usuario y se obtiene resultado positivo.
Efectivamente aquí está el salto de usuario, abusando de los permisos otorgados por sudo para ejecutar el binario c99 como usuario dustin sin contraseña. Se hace una búsqueda en GTFObins para comprobar si está reportado este binario y así es.
Se añade el usuario dustin a la parametrización y se obtiene una shell con el nuevo usuario, completando con exito el pivoting de usuario.
Explotación y escalada hacia usuario administrador (root).
Desde el usuario dustin y siguiendo la enumeración anterior, se comprueba permisos SUDO y se puede ejecutar el binario ssh-agent (¿otro guiño al título de la máquina quizás?) sin contraseña y como usuario root. La escalada a root es inminente, se sigue la misma metodología que en el apartado anterior y se encuentra el comando necesario en la base de datos de CTFObins para obtener una shell con el usuario root abusando de los permisos del binario a ejecutar.