Otra forma de bypassear un uploader

Iniciado por Xt3mP, Abril 20, 2012, 02:42:01 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Nota: Algunas líneas del código de la página en cuestión fueron editadas para poder hacer esta prueba de concepto.

Como expliqué en la entrada pasada (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta), es muy común encontrarnos con sitios mal válidados pero en esta ocasión nos enfocaremos exclusivamente en nuestro image uploader sin necesitar de una sesión de administrador para poder explotarla.

Generalmente un uploader comprueba que el archivo en cuestión sea una imagen, pero por el otro lado, algunos uploaders comprueban que no se traten de extensiones en específico; aunque desde PHP 5+ ya no se puede fácilmente subir shell utilizando nombres como shell.jpg.txt.php puesto que con la función pathinfo() te regresa solamente la extensión, es decir, aunque tu archivo sea shell.jpg.txt.php.png.php, utilizando la función anteriormente mencionada te regresará php (en este caso).

Un bypass común consiste en modificar las cabeceras (comúnmente el content-type) mediante plugins, scripts o programas que hacen creer al servidor que se trata de una imagen cuando en realidad es una aplicación PHP; pero este tipo de bypass al ser tan conocido y con la función anterior (pathinfo()), ha sido parchado y es más difícil de bypassear por lo que recurriremos a otra técnica que seguro más de uno ya la conoce: shell.jpg con directivas de .htaccess.

En esta ocasión nos encontramos con una página que tiene como fin una comunicación entre alumno y profesor en donde el alumno sube tareas y el profesor las revisa, o el profesor sube trabajos y el alumno los descarga (quiero creer que por eso la validación de archivos es prácticamente nula):


Testeando en primera instancia al intentar subir shell.php nos encontramos con que filtra las variables regresandonos el siguiente error:
CitarExtensión php no permitida.
Por lo tanto procedemos a subir shell.jpg y notamos que la sube sin ningún problema:


Intentamos a ver si de casualidad con Live Headers nos permite subir la shell y nos regresa el mismo error:
CitarExtensión php no permitida.

Continuamos a buscar donde alojó la shell.jpg y nos encontramos con el mensaje que es obvio:
CitarNo se puede mostrar la imagen "http://web/path/path/shell.jpg" porque contiene errores.

Acá es donde entra el .htaccess; nosotros sabemos de antemano que shell.jpg es una aplicación PHP bajo la extensión de una imagen y que con .htaccess podemos agregar directivas para que la extensión .jpg la interprete como .php quedando así (recuerda guardarlo como .htaccess):

Código: .htacces
RemoveHandler .jpg
AddHandler application/x-httpd-php .jpg
AddType application/x-httpd-php .jpg


Procedemos a subirlo (y cruzamos dedos para que nos lo permita):


Ahora nos dirigímos a donde se subió la shell.jpg anteriormente y:


P.D.: Ningún archivo fué tocado o eliminado (ha excepción de los archivos vulnerables).
P.D.2: En algunos servidores será más difícil decirle las directivas .htaccess puesto que pueden estar desactivadas (como en este caso, en la página uno no permitía por lo que se siguió con el PoC en una segunda página para explicar el concepto), así que no se desesperen.
Cada vez que me das Karma me motivas