Busqueda

Publicado: 04 de Mayo de 2025 Autor: Josรฉ Miguel Romero aka x3m1Sec Dificultad: โญ Easy


๐Ÿ“ Descripciรณn

Esta mรกquina Linux explota una vulnerabilidad de ejecuciรณn de cรณdigo arbitrario en la biblioteca Python Searchor para obtener acceso inicial. Posteriormente, se escalan privilegios aprovechando permisos sudo en un script de Python sin la adecuada sanitizaciรณn.


๐Ÿš€ Metodologรญa


๐Ÿ”ญ Reconocimiento

Ping para verificaciรณn en base a TTL

๐Ÿ’ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.

Escaneo de puertos

Enumeraciรณn de servicios

โš ๏ธ Importante: El servicio HTTP redirige a searcher.htb. Debemos agregar este dominio a nuestro archivo hosts.


๐ŸŒ Enumeraciรณn Web

Al acceder a la web, descubrimos un motor de bรบsqueda unificado que genera URLs de consulta para varios motores de bรบsqueda.

Realizando fuzzing de vhosts descrubirmos un vhost llamado gitea que aรฑadimos tambiรฉn a nuestro fichero /etc/hosts

Hallazgo clave

En el pie de pรกgina, se revela que la aplicaciรณn usa Searchor v2.4.0. Una investigaciรณn rรกpida muestra que esta versiรณn es vulnerable a ejecuciรณn de cรณdigo arbitrario y un exploit pรบblico:

https://github.com/nikn0laty/Exploit-for-Searchor-2.4.0-Arbitrary-CMD-Injection

El problema radica en el uso inseguro de la funciรณn eval() de Python.


๐Ÿ’‰ Explotaciรณn

Payload para prueba de concepto

Reverse Shell

Descargamos el exploit

Le concedemos permisos de ejecuciรณn

Iniciamos un listener en nuestro host de ataque

Ejecutamos el exploit indicando la URL del objetivo y nuestra IP y puerto del host de ataque para ganar acceso al objetivo:

Esto mismo se podrรญa hacer tambiรฉn usando el siguiente payload interceptando la peticiรณn con la herramienta Burp Suite:

ยกร‰xito! Hemos obtenido acceso al sistema como usuario svc.

Flag de Usuario


๐Ÿ” Escalada de Privilegios

Descubrimiento de credenciales

En el directorio /var/www/app, encontramos un repositorio Git:

Examinando la configuraciรณn de Git, descubrimos credenciales:

๐Ÿ”‘ Credenciales descubiertas: cody:jh1usoih2bkjaspwe92

Verificamos que se estรก haciendo de una mala prรกctica de re-utilizaciรณn de contraseรฑas y el usuario svc tambiรฉn usa esta contraseรฑa, por lo que podemos ganar acceso a la mรกquina a travรฉs del puerto ssh con el usuario svc y de esta forma ganar persistencia.

Permisos sudo

Comprobamos los permisos sudo del usuario svc:

Anรกlisis del script vulnerable

Descubrimos que el usuario svc no tiene permisos de escritura ni lectura pero podemos ejecutar system-checkup.py como root:

Uso del parรกmetro docker-ps del script system-checkup.py

Uso del parรกmetro docker-inspect del script system-checkup.py

Podemos obtener mรกs informaciรณn sobre el parรกmetro <format>en la siguiente documentaciรณn de docker

https://docs.docker.com/reference/cli/docker/inspect/

Podemos utilizar {{json .}} como el argumento de formato requerido por el argumento docker-inspect del script.

Para leer la salida JSON convenientemente, podemos utilizar jq para analizar la salida JSON en un formato legible. jq puede ser instalado utilizando el siguiente comando, sin embargo, ya estรก presente en la mรกquina de destino.

Ejecutamos el script con los parรกmetros adecuados sobre el conteendor de gitea:

๐Ÿ”‘ Credenciales descubiertas: yuiu1hoiu4i5ho1uh

Esta contraseรฑa nos permite autenticarnos en el vhost http://gitea.searcher.htb como usuario Administrator y acceder al repositorio de script, pudiendo de esta forma analizar su contenido:

Al revisar el script comprobamos que si pasamos como argumento la opciรณn "full-checkup" ejecuta el script ./full-checkup.sh:

Explotaciรณn del script

Aprovechamos la referencia relativa a full-checkup.sh ejecutando el script system-checkup desde otro directorio que contendrรก nuestro propio script malicioso full-checkup.sh.

Creamos una reverse shell con el siguiente contenido:

Lo hacemos ejecutable

Iniciamos un listener en el puerto 9001

Por รบtimo, lanzamos de nuevo el script desde el directorio /tmp para que abusando de la ruta relativa se ejecute el script full-checkup.sh malicioso con nuestra reverse shell:

Flag de root

Last updated