Bypass validation upload

Buenas!!!

A diferencia de otras entradas, ésta no se basa en una investigación ni nada innovador que no sé sepa, pero  a la hora de hacer un pentesting web viene de lujo, por lo que lo voy a emplear como «paste» propio como consulta cuando me tope con una funcionalidad de subida en un página web. Por lo tanto, ya que me sirve como chuleta propia, espero que a los demás también os resulte útil 😉

En el blog de Hackplayers llevan escribiendo varios «write-up» dedicados a la máquina virtual vulnerable pentesterlab . Me llamo la atención y también la he estado haciendo por mi cuenta comparando los mecanismos que he empleado para explotar las vulnerabilidades con las empleadas por ellos, lo cual resulta muy interesante. Entonces para la vulnerabilidad de «File Upload» al ser típica en páginas web, he querido emplearla como target y explicar diferentes mecanismos para evitar la validación de ficheros de subido y lograr subir código del lado del servidor, como puede ser una shell.

Vamos a ello:

Ejemplo 1:

Por la descripción (Mon image), parece que espera recibir una imagen

Poc:

Subir una imagen y seguir el funcionamiento lógico de la aplicación: Objetivo-> Ver la ruta donde sube la imagen

En la opción de subir:

 

Dejando los campos filename y content-type sin tocar. Una vez subida, da la opción de ver la foto subida con un enlace de here. Ahí es dónde hay que ver la ruta en la que se guarda

Accediendo a ella:

 

Tras analizar la funcionalidad de subida, se procede a subir un fichero script, en este caso al estar la web sobre PHP, se sube un fichero como tal, pues será interpretado por el servidor web. Se va a subir tal cual para detectar posible validación en alguna de las dos cabeceras

Una vez adjuntado el fichero, se procede a enviarlo tal que al no existir ninguna validación, permite su subida. En este se ha generado un script con el típico Hello World al ser una PoC, pero esto se podría cambiar, por ejemplo por la famosa shell C99.php:

Ejemplo 2

Al ser un nivel superior, el mecanismo anterior obviamente no funciona:

Se están aplicando mecanismos de validación para identificar e impedir subida de ficheros diferentes del formato esperado:

 

 

Como primer mecanismo se procede a cambiar las cabeceras. Para ello, se sustituye la cabecera Content-Type:

 Content-Type de octect/stream por image/jpeg

Dejando la cabecera filename sin modificar.

Sin embargo, como se observa, identifica que se trata de un fichero PHP no permitiendo su subida. Por lo tanto, se procede a cambiar la cabecera filename también:

 

filename=test.jpg

Sin embargo, ocurre lo que muchos ya esperabais al leer las líneas anteriores, el código no se va a poder ejecutar al no saber interpretarlo el servidor, es decir, se ha podido hacer un bypass de la validación pero a cambio de perder su funcionalidad, por lo tanto, no nos sirve =(

Otro mecanismo es subir el fichero cambiando la cabecera filename de la siguiente manera:

filename=test.php.png

De esta manera, se evita la validación al identificar un png, sin embargo, luego no se puede ejecutar.

A continuación, se muestra otra técnica más interesante:

Subir un fichero con el nombre test.php.png. Empleando burpsuite se intercepta y en la vista de «raw»  se cambia filename por test.phpD.png donde D= 44 en hexadecimal como se puede ver a continuación:

Se cambia por un valor NULL => %00

Volviendo a «raw» se observa el valor NULL:

Sin embargo, esta mecanismo no es suficiente para evitar la validación en este caso =(

Finalmente otra opción es subir el fichero test.php3, pues el servidor espera recibir un php pero igual no valida un php3, por lo que podría funcionar:

Tal que se consigue subir y ejecutar:

Esto es todo, se han mostrado un par de mecanismos que se pueden emplear para evitar la validación de ficheros cuando os encontréis con una funcionalidad de subida en una auditoria web.

La finalidad de esta entrada es con fines académicos en dónde se han empleado entornos virtuales y controlados. No nos hacemos responsables de su uso para otros fines, no seáis malos =D

Nos vemos en la siguiente entrada 😉

N4xh4ck5

«La mejor defensa es un buen ataque»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Los datos introducidos se guardarán en nuestra base de datos como parte del comentario publicado, como se indica en la política de privacidad.