la vulnerabilidad de subida de archivos no seguros
1. Visión general
función de carga de archivos son comunes en las aplicaciones web, como muchos sitios registrados cuando la necesidad de la subida de imágenes , archivos adjuntos de carga , y así sucesivamente. Cuando el usuario hace clic en el botón Subir, el fondo va a cargar el archivo para determinar si tal es el tipo especificado, extensión, tamaño, etc., y luego cambiar el nombre del directorio después de almacenamiento de acuerdo con el diseño del formato especificado. Si el fondo de los archivos cargados sin ningún juicio o criterio sobre el estado de seguridad no es lo suficientemente estrictas , un atacante podría cargar un archivo malicioso, como una palabra de Troya, causando servidor back-end es WebShell.
Por lo tanto, al diseñar una función de carga de archivos, asegúrese de archivo de seguridad estricta en el pasado. Por ejemplo:
- Verificar el tipo de archivo, extensión, tamaño;
- documentos de verificación de carga;
- el archivo determinado cambio de nombre compleja;
- No exponga el camino después de la carga de archivos;
- y así sucesivamente ...
inseguro archivo de catálogo de la vulnerabilidad de carga:
- cheque del cliente de autenticación de cliente
- tipo MIME tipo Multipurpose Internet Mail Extensions
- getmagesize
2. Demostración experimental
(1) el cliente comprueba para verificar el cliente
Sólo se encontró subir fotos, ver el código fuente, la extensión del archivo se lleva a cabo para determinar
Ese hecho, podemos cambiar directamente el código de front-end, como juez de extensión de función de borrado
A continuación, cargar otros tipos de archivos, cargado encontrado con éxito
Por supuesto, también puede cargar otros archivos ataque de Troya! !
Tipos Multipurpose Internet Mail Extensions (MIME), es una manera de establecer el tipo de extensión de archivo con una aplicación que se abra cuando se accede a la extensión del archivo, el navegador utilizará automáticamente el programa de aplicación especificado es abrir. Algunos se utilizan para los clientes para especificar nombres de archivos personalizados, así como algunos archivos multimedia abierto.
tipos MIME comunes son:
- HTML texto texto html / html
- texto texto sin formato .txt / plain
- RTF .rtf texto image / gif
- JPEG 图形 .ipeg .jpg image / jpeg
- GIF gráficos .gif image / gif
He subido una vez fueron permitidos para ser archivo de imagen cargada y no permite subir archivos para comparar el troyano
Content-Type no se encuentra a la misma, que podemos cambiar este valor, se puede pasar por alto éxito
(3) getimagesize
getimagesize (string filename) 函数
Función determinará cualquier GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, archivo de imagen CPM, XBM o el tamaño WBMP y el retorno al tipo y tamaño del archivo y altura de imagen y ancho de la imagen . Esa función mediante la lectura de la cabecera del archivo, devuelve una imagen de la longitud, anchura y otra información, si no hay cabecera de archivo de imagen correspondiente, el error de función.
Se puede ver, el código de alto nivel para leer el último nombre de archivo. "" String, y que es tomar un sufijo final, se espera que limitar los tipos de archivos por nombre de archivo, por lo que requiere el nombre de archivo de carga en la forma debe ser "* .jpg "" *. jpeg "" *. png "uno. Mientras tanto, la función getimagesize es limitar la cabecera de carga de archivos debe ser el tipo de imagen.
Tratamos en un método relacionado
El servidor puede determinar directamente el tipo de archivo sufijo, y vamos a seguir para tratar sufijo al jpg:
Incluso si la secuencia de comandos de tipo jpg, pero cuando el contenido del formato de no imagen no se pueden cargar.
Hay dos formas de evitar:
- formato de imagen jpg añade a la cabeza de la escritura
GIF89 <? php phpinfo (); ?>
- cartera de php + jpg
Utilice el comando:
echo '<?php phpinfo(); ?>' >> 1g.jpg
La palabra troyano escrito al final de la 1g.jpg foto
Y luego subir a la detección de derivación
Pero el servidor se convertirá en un archivo de Troya analizar archivos de imagen, por lo que su solicitud de ejecución para enviar el archivo, el servidor devolverá al archivo "Imagen", y no ejecuta el comando apropiado. Tenemos que utilizar vulnerabilidades de inclusión de archivos formatos de archivo de imagen puede ser ejecutado como un archivo PHP para resolver :
HTTP: // 127.0.0.1/pikachu-master/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2020/4/3/4297605e4fd433f3445241700590.jpg&submit=~~MD~~aux~~3rd Enviar Consulta