Cómo abusé de la función de carga de archivos para obtener una vulnerabilidad de alta gravedad en Bug Bounty

Cómo abusé de la función de carga de archivos para obtener una vulnerabilidad de alta gravedad en Bug Bounty - Codelivly

Hola a todos, una de las funciones más interesantes es la descarga de archivos, las vulnerabilidades en las descargas de archivos generalmente lo llevan a una gravedad crítica o alta, así que comencemos con este escenario que enfrenté durante la detección de errores.

Supongamos que nuestro dominio de destino es target.com

Mientras buscaba nuestro objetivo, me encontré con el subdominio edu.target.com, el servicio que brinda el programa es una plataforma de enseñanza, porque hay diferentes tipos de usuarios, como estudiantes y profesores, cuyo objetivo es ayudar a los estudiantes a aprender tecnología. temas relacionados, como la ingeniería de software. robótica etc

Encontré la función de carga al intentar cargar una imagen para analizar cómo funciona la función

intentemos descargar el script PHP

Descubrí que el servidor no respondía

después de un análisis del comportamiento de la aplicación, entendí que si la solicitud no pasa la validación, la conexión se cerrará y el servidor no responderá a la solicitud

Ahora intentemos omitir la validación en la extensión php

comencemos por determinar si la aplicación está validando la lista blanca o la lista negra intentando descargar una extensión aleatoria si se descarga correctamente significa que la aplicación está haciendo una lista negra si no significa que la aplicación está validando la lista blanca para extensiones específicas

Intenté descargar image.omar

El archivo se cargó correctamente, lo que significa que la aplicación está realizando la validación de la lista negra

Entonces traté de eludir la validación usando rce.pHp

Se descargó con éxito

https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2F3ohhweiVB36rAlqVCE%2Ftwitter%2Fiframe&display_name=Giphy&url=https%3A%2F%2Fmedia.giphy.com% 2Fmedia%2F3ohhweiVB36rAlqVCE%2Fgiphy-downsized.gif&image=https%3A%2F%2Fi.giphy.com%2Fmedia%2F3ohhweiVB36rAlqVCE%2Fgiphy.gif&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=giphy

En ese momento, esperaba una recompensa de $ 5,000 en mi cuenta bancaria dentro de unos días.

https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2F9rwJNLBu8FMfixoIxL%2Ftwitter%2Fiframe&display_name=Giphy&url=https%3A%2F%2Fmedia.giphy.com% 2Fmedia%2F9rwJNLBu8FMfixoIxL%2Fgiphy-downsized.gif&image=https%3A%2F%2Fi.giphy.com%2Fmedia%2F9rwJNLBu8FMfixoIxL%2Fgiphy.gif&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=giphy

Así que pida a nuestro script PHP que ejecute la función phpinfo()

El rce.pHp no se está ejecutando

https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2Fj0qSbeNFuzjhXKFVSP%2Ftwitter%2Fiframe&display_name=Giphy&url=https%3A%2F%2Fmedia.giphy.com% 2Fmedia%2Fj0qSbeNFuzjhXKFVSP%2Fgiphy.gif&image=https%3A%2F%2Fi.giphy.com%2Fmedia%2Fj0qSbeNFuzjhXKFVSP%2F200.gif&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=giphy

Entonces, lo que se me ocurrió en ese momento fue que parece que pudimos eludir la validación de la lista negra, pero los desarrolladores siguen un diseño seguro que me impide obtener NCE.

y esto puede suceder de varias maneras, una de ellas es agregar esta bandera al archivo .htaccess, lo que evitará que el servidor ejecute los archivos PHP en el directorio de carga de imágenes

motor php_flag deshabilitado

Si no sabe qué es el archivo .htaccess

Índice
  1. Nota:
  2. Primer escenario:
  3. 1.1
  4. 1.2
  5. Segundo escenario:
  6. 2.0
  7. Entonces, ¿cómo pueden hacer esto?
  8. Primer escenario:
  9. Segundo escenario:

Nota:

El archivo .htaccess se distribuye. Los archivos de configuración proporcionan una forma de realizar cambios en la configuración del servidor por directorio. Esperaba que los desarrolladores usaran esto en el directorio de carga de imágenes para evitar RCE.

Entonces, a partir de eso, me vinieron a la mente 2 escenarios.

Primer escenario:

Nota: suponga que el punto final de mi imagen es:

https://target-domain.com/edu/sub-dir-1/sub-dir-2/sub-dir-3/nuestra-imagen-aquí

1.1

Tal vez los desarrolladores subieron su archivo ".htaccess" a subdirectorio-1/directorio por lo que según este el subdirectorio-1/ El directorio y los subdirectorios, incluido el directorio donde cargo mi secuencia de comandos php, no pueden ejecutar secuencias de comandos php, por lo que podemos aprovechar esta configuración incorrecta cargando otro archivo ".htaccess" en subdirectorio-1/subdirectorio-2/subdirectorio-3/.htaccess con esta configuración que me permitirá cambiar la configuración en sub-dir-3/ lo que me permitirá ejecutar el script php

La configuración que ejecutará el script php

motor php_flag habilitado

1.2

Ok, tal vez los desarrolladores no hagan esta configuración incorrecta y ya hayan subido el archivo .htaccess a mi directorio subdirectorio-1/subdirectorio-2/subdirectorio-3/.htaccess en este caso reescribiré el archivo .htaccess cargando el nombre de archivo .htaccess con la configuración anterior que me permitirá ejecutar el script php

Pero, lamentablemente, recordé que el nombre del archivo se reescribió, por lo que, en caso de que descarguemos, el .htaccess se reescribirá en /sub-dir-1/sub-dir-2/sub-dir-3/32-random-caracteres.htaccess, que no tienen ningún efecto en la configuración del servidor

Segundo escenario:

2.0

En el segundo escenario, lo probaremos en caso de que el primer escenario falle haciendo un recorrido de ruta en el parámetro de nombre de archivo para salir del directorio que contiene el archivo .htaccess que impide que mi script php se ejecute, por lo que mi archivo se cargará en otro directorio, no bajo configuración que impide ejecutar scripts php https://target-domain.com/edu/edu/32-random-chars.pHp

Como sabe, los desarrolladores toman una extensión del nombre del archivo y la colocan en la extensión del punto final. Entonces, tal vez los desarrolladores estén usando expresiones regulares débiles que toman todo después del punto y lo colocan en la extensión del punto final para que podamos sortearlo agregando un punto (.) y luego usar la ruta de carga útil transversal para descargar nuestro script en otro directorio

No funcionó porque, como puede ver, parece que los desarrolladores están implementando la validación de expresiones regulares de la manera correcta (en caso de que la usen y no usen una función integrada como php pathinfo() )

Al subir nuestras imágenes, los desarrolladores deben conectar cada imagen a su usuario

Entonces, ¿cómo pueden hacer esto?

Correcto, usando la base de datos.

Como puede ver, los desarrolladores también guardan nuestro parámetro de nombre de archivo en algún lugar

Entonces, el siguiente paso para probar el parámetro de nombre de archivo para SQLI, usé el escáner Burp Suite para esto

pero no tengo nada

Pero tal vez los desarrolladores de la función de descarga estén usando alguna biblioteca para manejar la imagen descargada que puede ser vulnerable

Así que comencé a probar exploits para bibliotecas comunes como ImageTragic que aprovechan la biblioteca ImageMagick.

CVE-2016–3714, CVE-2016–3718, CVE-2016–3715, CVE-2016–3716, CVE-2016–3717

Puedes encontrar las hazañas aquí https://imagetragick.com/

pero tampoco funcionó, así que si no puedo obtener una vulnerabilidad crítica, intentemos obtener una vulnerabilidad de alta gravedad

Primer escenario:

Comenzó a probar XSS almacenado cargando una imagen SVG que contiene nuestra carga útil XSS

Solicitemos nuestro payload svg XSS

Pero desafortunadamente, la respuesta de la aplicación obliga a Content-Type: image/jpeg, por lo que no podemos lograr XSS de esa manera.

Segundo escenario:

dentro https://edu.target.com/teacher/perfil-id

Como te dije antes, el lado del servidor puso la extensión en el nombre de la imagen.

Entonces parece que la extensión en el parámetro de nombre de archivo es el mejor lugar para inyectar la carga útil XSS

XSS.omar" onmouseover=alert(1)

pero parece que están codificando entidades HTML para nuestra carga útil, por lo que no podemos escapar de las comillas dobles

El lado del cliente de la aplicación valida el tamaño de la imagen y solo permite cargar imágenes de menos de 1 MB

Así que traté de obtener DOS cargando una imagen grande, así que solo usé una imagen de más de 1 MB para probar si hay alguna validación en el tamaño del lado del servidor, pero nuevamente la conexión está cerrada y el servidor no responde, lo que significa que hay validación. sobre el tamaño de la imagen para prevenir este tipo de ataques

pero noté que mi carga útil no cambió, lo que significa que si subo una imagen, todos los metadatos dentro de la imagen no cambiarán

Muy bien, es hora de disparar la última bala.

Así que subí la imagen que contiene los datos de ubicación del GPS

puede encontrarlo aquí https://github.com/ianare/exif-samples/blob/master/jpg/tests/67-0_length_string.jpg

Después de subir la imagen a la aplicación web, la volví a subir para verificar si los datos de geolocalización están rayados o no.

Podemos hacer nuestra verificación usando ExifTool para extraer los metadatos

┌──(omar㉿kali)-[~/Downloads]
└─$ exiftool /Descargas/exif-test.jpg

Por lo visto la web app no ​​elimina los datos de geolocalización de la imagen

https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2FckMky4UKiosJa%2Ftwitter%2Fiframe&display_name=Giphy&url=https%3A%2F%2Fmedia.giphy.com% 2Fmedia%2FckMky4UKiosJa%2Fgiphy.gif&image=https%3A%2F%2Fi.giphy.com%2Fmedia%2FckMky4UKiosJa%2Fgiphy.gif&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=giphy

Luego de reportar esto, el equipo de seguridad lo aceptó como P2 debido a que la mayoría de los usuarios de la plataforma educativa son estudiantes menores de edad y este tipo de divulgación de información viola su privacidad.

1-Descarga la última versión de ImageMagick

2-use el método stripImage() para eliminar estos metadatos de las imágenes

$imageFilePath = 'imagen cargada';
$img = nuevo imagick();
$img->readImage($imageFilePath);
$img->stripImage();
$img->writeImage($imageFilePath);
$img->destruir();
?>

Espero que hayan disfrutado editorial chicos

Si quieres conocer otros artículos parecidos a Cómo abusé de la función de carga de archivos para obtener una vulnerabilidad de alta gravedad en Bug Bounty puedes visitar la categoría Tutoriales.

Deja un comentario

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

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas