Updown
Last updated
Last updated
Publicado: 05 de Mayo de 2025 Autor: José Miguel Romero aka x3m1Sec Dificultad: ⭐ Medium
"SiteIsUp" es una máquina Linux de dificultad fácil en HackTheBox que simula un servicio web para verificar si otros sitios están en línea. La vulnerabilidad principal radica en una aplicación web con múltiples fallas de seguridad, incluyendo un repositorio Git expuesto y un LFI (Local File Inclusion) que puede ser aprovechado para conseguir RCE (Remote Code Execution). Para la escalada de privilegios, se abusa de permisos sudo en la herramienta easy_install. Este laboratorio es perfecto para practicar reconocimiento web, análisis de código fuente, bypass de restricciones de subida de archivos y explotación de vulnerabilidades comunes en aplicaciones web.
💡 Nota: El TTL cercano a 64 sugiere que probablemente sea una máquina Linux.
⚠️ Debemos agregar este dominio a nuestro archivo hosts.
💉 Probando inyecciones de comandos
Tras probar con diversos payloads para ver si podemos realizar inyección de comandos sobre el parámetro del campo de texto, no muestra un mensaje en el que indica que está detectando un intento de hacking:
🕷️ Fuzzing de vhosts
⚠️ Debemos agregar este dominio a nuestro archivo hosts.
Realizamos fuzzing de directorios usando feroxbuster
Encontramos un directorio .git:
A continuación usamos la herramienta git dumper para facilitar la revisión del repositorio de código.
A continuación, hacemos una petición a http://dev.siteisup.htb interceptando con Burp y probamos a añadir este parámetro en la cabecera
Podemos usar también la extensión para firefox https://addons.mozilla.org/es-ES/firefox/addon/simple-modify-header/:
Al hacer esto descubrimos un enlace al panel de administrador y un botón para la subida de archivos.
En lo que respecta al enlace del panel de administrador, vemos que somos redirigidos a:
http://dev.siteisup.htb/?page=admin
Echando un vistazo al código fuente de esta sección vemos qué parámetro se acepta en la petición que nos permite apuntar a un recurso aunque se están aplicando ciertos filtros para evitar un posible LFI:
Si revisamos el código fuente anteriormente descargado del repositorio .git en checker.php:
Podemos ver las extensiones para la carga de archivos que están permitidas. También podemos ver que se crea un directorio en uploads/ obteniendo el timestamp de la hora de la subida y aplicado posteriormente la codificación en md5.
También es importante verifica que el archivo se borra una vez después de subirse.
Comprobamos que el directorio /uploads está vacío:
Vamos a intentar subir un archivo php con alguna extensión que permita saltarnos la restricción de extensión, por ejemplo usando la webshell de pentestmonkey y renombándola con extensión .phar:
El problema, es que el enlace al archivo se está borrando después de subirse.
Recapitulando, en este punto tenemos por un lado, un parámetro page (http://dev.siteisup.htb/?page=XXX) que nos permite leer archivos desde la raíz y que cuando le pasamos un valor le concatena la extensión .php. Por otro lado, conocemos las extensiones que se están filtrando al intentar subir un archivo.
En este punto la mejor opción sería encapsular nuestro archivo .php dentro de un archivo .zip y leerlo con un wrapper .zip, aunque lo descartamos porque la extensión .zip se está filtrando, así que lo que podemos hacer es comprimirlo con una extensión cualquiera que no se esté filtrando e intentar leer el código .php con un wrapper php. Ejemplo:
Creamos nuestro archivo .php haciendo un phpinfo y de esta forma podemos ver qué funciones están deshabilitadas:
info.php
Subimos el archivo.
Usamos el wrapper php en la url con el paámetro page para llamar a nuestra shell
⚠️ No Debemos agregar la extensión php a nuestro archivo ya que recordemos que tal como vimos en el código fuente se le está concatenando al final.
A continuación verificamos las disable_functions:
Para verificar qué función podemos usar, podemos utilizar la herramienta dfunc-bypasser a la cual podemos pasarle una url con el php.info y te indica de qué función de sistema php puedes abusar para ejecutar comandos:
https://github.com/teambi0s/dfunc-bypasser
Podemos usar la herramienta con el parámetro --file especificando el arhivo info.php. Para ello podemos interceptar la petición con burp y en la respuesta renderizada hacer un copy to file:
La herramienta nos indica que podemos usar proc_open. Para ver cómo usar esta función podemos hacer uso de la documentación oficial:
https://www.php.net/manual/en/function.proc-open.php
Podemos adaptar nuestro archivo .php para que haga uso de esta función y obtener una reverse shell de la siguiente forma:
reverse shell con proc_open function
Creamos nuestra reverse shell y la encapsulamos con cualquier extensión que no esté filtrada:
Tras subirla, iniciamos un listener en el puerto que hayamos especificado volvemos a hacer uso del wrapper para llamarla:
Tras ganar acceso, hacemos un full tty de nuestra shell:
Encontramos un script en python sobre el que el usuario www-data tiene permisos de lectura y ejecución:
El script parece que toma la entrada del usuario sin sanitizarla. Podemos abusar de esto pasándo el siguiente parámetro a la función y escalar a developer:
Seguimos sin tener permisos para leer la flag de /home/developer:
Dado que sí tenemos permisos para leer el directorio .ssh, vamos a usar la clave ssh para conectarnos:
Verificamos posibles archivos que puede ejecutar developer como root:
Encontramos información sobre este binario y posibles formas de explotación en gtfobins:
https://gtfobins.github.io/gtfobins/easy_install/#sudo
A continuación verificamos que no tenemos permiso para acceder a este recurso.
Una vez descargado el código, en el fichero changelog encontramos información que podría ser interesante:
También hay un parámetro especial "only4dev" que se puede enviar e la cabecera de la petición
Respecto al botón para la subida de archivos:
Verificamos que el fichero se ha subido correctamente y tal como habíamos analizado previamente en el código, sea ha creado un directorio con el timestamp de la fecha codificado en MD5: