byp4ss3d PicoCTF (Intermediate)
Contexto de la maquina
Trayectoria byp4ss3d

Descripción
byp4ss3d es un reto de tipo web centrado en la explotación de un mecanismo de subida de archivos. La aplicación simula un portal universitario donde los estudiantes deben subir imágenes de sus tarjetas de identificación. El sistema implementa filtros para permitir únicamente archivos de imagen, pero presenta fallos que permiten evadir dichas restricciones y conseguir ejecución remota de comandos (RCE).
Objetivo del reto
Analizar el sistema de subida de archivos.
Bypassear los filtros implementados.
Lograr ejecución remota de comandos en el servidor.
Obtener la flag almacenada en el sistema.
Tipo de reto
Web
File Upload Bypass
Remote Code Execution (RCE)
Habilidades y técnicas evaluadas
Análisis de subida de archivos
Manipulación manual de peticiones HTTP
Uso de Burp Suite
Bypass de validaciones por extensión y tipo MIME
Abuso de
.htaccessEjecución remota de comandos vía PHP
Análisis de vulnerabilidades

Despliegue del CTF
En la propia pagina buscaremos el CTF, dentro veremos un boton llamado Launch Instance, una ves desplegado nos aparecera here donde se encuentra el dominio junto con el puerto asociado al mismo.
El objetivo de estos CTFs es encontrar la flag final.
Bypass archivos + RCE

La descripcion del reto es la siguiente:
El escenario plantea un portal de subida de archivos donde únicamente se permiten imágenes. Existe un sistema de filtrado que valida el tipo de archivo, pero el objetivo será bypassear dicho mecanismo para conseguir ejecución remota de comandos (RCE) y obtener la flag.
Análisis inicial de la funcionalidad de subida
Una vez desplegado el reto, se nos proporciona un dominio. Al acceder al mismo, observamos un formulario que permite subir archivos supuestamente limitados a imágenes.

Probamos subiendo una imagen válida (.jpg) y el servidor responde:
Esto nos confirma:
Los archivos se almacenan en el directorio
/images/Se mantiene el nombre original del archivo
El sistema no renombra ni sanitiza extensiones de forma estricta
Primer intento: Subida directa de PHP
Intentamos realizar un bypass simple utilizando una extensión alternativa de PHP:
El archivo se sube correctamente, pero al acceder a él desde el navegador el código PHP no se ejecuta; el servidor muestra el contenido literal. Esto indica que:
El servidor probablemente no interpreta
.php5como ejecutable.Existe una restricción a nivel de configuración del servidor (muy posiblemente Apache).
Por tanto, necesitamos un enfoque diferente.
Bypass mediante .htaccess
.htaccessTras analizar el comportamiento, observamos que el sistema permite subir archivos sin extensión o con nombres arbitrarios. Esto abre una posibilidad interesante: subir un archivo .htaccess para modificar el comportamiento del servidor.
Si el servidor utiliza Apache y permite .htaccess, podemos forzar que los archivos .jpg se interpreten como PHP.
Subida del .htaccess
.htaccessInterceptamos la petición con Burp Suite y modificamos el contenido del archivo para subir lo siguiente:

Esta directiva indica a Apache que trate los archivos con extensión .jpg como código PHP.
El servidor acepta la subida correctamente.
Subida de WebShell camuflada como imagen
Ahora reutilizamos la misma petición interceptada para subir un archivo aparentemente legítimo (shell.jpg), pero que contenga código PHP embebido:

Detalles importantes:
GIF89a;simula la cabecera de una imagen GIF válida.El
Content-Typeesimage/jpegpara cumplir con el filtro.El contenido incluye una webshell simple basada en
system().
El archivo se sube correctamente.
Confirmación de RCE
Accedemos al archivo desde el navegador:
Respuesta:

El servidor ejecuta el comando id, confirmando que:
La directiva
.htaccessestá activa.El archivo
.jpgestá siendo interpretado como PHP.Tenemos ejecución remota de comandos (RCE).
Obtención de la flag
Dado que el proceso web suele ejecutarse como www-data, listamos el contenido de su directorio home:

Identificamos la presencia de la flag y procedemos a leerla:

Y con esto veremos que habremos obtenido la flag de forma correcta, por lo que podremos dar por terminado este reto.
flag.txt
Last updated