Vulnerabilidad de carga de archivos
1. ¿Qué es la carga de archivos?
Encapsule los datos del cliente en forma de archivo y envíelo al servidor a través del protocolo de red. Los datos se analizan en el lado del servidor y finalmente se guardan como un archivo real en el disco duro del servidor.
Por lo general, cuando se carga un archivo con el protocolo HTTP, se envía una solicitud POST al servidor web. Después de que el servidor web recibe la solicitud y acepta, el usuario establecerá una conexión con el servidor web y transmitirá los datos.
2. El motivo de la vulnerabilidad en la carga de archivos
configuración incorrecta del servidor
Las restricciones de carga de archivos se omiten y el filtrado es laxo
Vulnerabilidad de carga de archivos en editores de código abierto
La vulnerabilidad de análisis de archivos conduce a la ejecución del archivo
3. Riesgos de vulnerabilidad de carga de archivos
Los atacantes cargan archivos maliciosos y los pasan al intérprete para que los ejecute, y luego ejecutan códigos maliciosos en el servidor, realizan operaciones maliciosas como la ejecución de bases de datos, la administración de archivos del servidor y la ejecución de comandos, controlando así todo el sitio web y el servidor.
Este archivo malicioso también se conoce como WebShell.
Ubicaciones potencialmente vulnerables
Función de carga de imágenes
Función de carga de avatares
Función de carga de documentos
4.webshell
aprender
webshell es un entorno de ejecución de comandos en forma de páginas web como asp, jsp o cgi, y también puede llamarse una puerta trasera de caballo de Troya de página web.
Los atacantes pueden usar esta puerta trasera de la página web para obtener la autoridad de operación del servidor del sitio web, controlar el servidor del sitio web para cargar y descargar archivos, ver la base de datos, ejecutar comandos, etc.
Puerta trasera
Hay 65535 puertos en una computadora. Cada puerto es una puerta que abre la computadora para conectarse con el mundo exterior. Cada puerta tiene algunos servicios provistos por la computadora. Los atacantes usan estos servicios para obtener la autoridad del servidor y dejar atrás puerta.
Clasificación
-
Clasificados por tamaño de archivo:
Caballo de Troya de una oración: generalmente solo una línea de código
Pony: solo incluye la función de carga de archivos
Malasia: contiene muchas funciones y el código suele estar encriptado y oculto
-
Clasificado por tipo de guión
jsp
áspid
aspx
php
características
- La mayoría de los webshells aparecen en forma de scripts dinámicos
- webshell es un troyano de puerta trasera asp o php
- El webshell puede atravesar el firewall del servidor y los datos intercambiados entre el atacante y el servidor controlado se transmiten a través del puerto 80
- En general, webshell no dejará registros en el registro del sistema, sino que solo dejará registros de transferencia de datos en el registro web.
proceso de ataque
- Usar vulnerabilidades web para obtener permisos web
- subir pony
- Subir Malasia
- Invocar webshell de forma remota para ejecutar comandos
Conchas web comunes
PHP
<?php eval($_GET[aprobar]);?> <?php eval($_POST[aprobar]);?>pass es un parámetro, que debe repetirse en la URL después de abrir el troyano
http.../?pass = phpinfo(); o system(ipconfig); y otros comandos
ÁSPID
<%evaluar solicitud(“aprobado”)%>
ASPX
<%@ Idioma de página=“Jscript”%><%eval(Solicitud.Item[“contraseña”])%>
JSP
<%Runtime.getRuntime().exec(solicitud.getParameter(“i”)));%>
5. El principio básico de webshell
1. Script ejecutable
Paquete HTTP
2. Transferencia de datos
3. Ejecutar los datos pasados
ejecución directa
El archivo contiene la implementación.
Ejecución de funciones dinámicas
función de devolución de llamada
poni de una palabra
<?php fputs(fopen("up.php","w"),'<?php eval($_POST["cmd"])?>');?>Cree un archivo up.php en el directorio actual, y el contenido del archivo es código PHP
subir malasia a través de pony
Use la herramienta base64 para convertir el código PHP en una cadena (requiere codificación secundaria para eliminar caracteres especiales como +=)
Cree up.php, escriba el código PHP de carga del archivo en up.php
<?php fputs(fopen(base64_decode(dXAucGhw),w),base64_decode(base64_decode(codificación de código PHP)));?>base64_decode() realiza el procesamiento de decodificación dXAucGhw es el procesamiento de codificación de up.php.
Después de eso, se puede importar a Malasia a través de la función de carga de archivos.
6. herramienta de gestión de webshell
1. Cuchillo de cocina chino (caidao) (relativamente al revés, con puerta trasera)
2.c cuchillo (cuchillo)
3.Weevely3 (incluido en kali)
4. Espada Hormiga China (AntSword)
5. Escorpión de hielo (detrás)
La transmisión de datos se cifrará, lo que puede eludir muy bien el cortafuegos.
7. Método de detección de carga de archivos
Detección de JavaScript del lado del cliente ( detección de extensiones de archivo ) (detección frontal)
Detección de tipo MIME del lado del servidor ( detección de contenido de tipo de contenido )
Manual de referencia de MIME (w3school.com.cn)
Detección de ruta de directorio del lado del servidor ( detección de contenido relacionado con el parámetro de ruta raíz )
Detección de extensión de archivo del lado del servidor ( detección de contenido relacionado con la extensión de archivo )
Detección de contenido de archivos del lado del servidor ( verifique si el contenido es legal, si contiene código malicioso, etc. )
8. Método de derivación
Use la herramienta burpsuite para capturar paquetes y luego modifique el archivo para cumplir con el formulario de detección del servidor.
Omitir la detección del lado del cliente (detección de JavaScript front-end)
Principio de detección de clientes:
Por lo general, la página de carga contiene código JavaScript que detecta específicamente las cargas de archivos, y la más común es detectar si el tipo de archivo y la extensión son legales.
método:
Simplemente deshabilite JS en el cliente del navegador local.
Se puede realizar utilizando el complemento NoScript del navegador Firefox, deshabilitando JS en IE, etc.
Evitar la detección del servidor
Principio de detección de servidor:
El código del lado del servidor generalmente verifica tres puntos:
Tipo MIME, sufijo de archivo, contenido de archivo
[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo anti-leeching, se recomienda guardar la imagen y cargarla directamente (img-afZHgJBZ-1677413271759) (C:\Users\wrz\AppData\Roaming\Typora\ typora-user-images\ image-20230226183230079.png)]
Número mágico del archivo : los primeros bytes del archivo pueden identificar qué tipo de archivo es.
El número mágico del formato de archivo Formato de archivo y número mágico
Use la herramienta WinHex para ver el número mágico del archivo correspondiente.
Método de derivación:
1. Omitir la detección de tipo MIME
principio:
Detecte el valor del campo Tipo de contenido del paquete http durante el proceso de carga de archivos de tipo imagen para determinar si el archivo cargado es legal.
método:
Use burpsuite para interceptar y modificar el tipo de contenido del archivo de paquete para omitir.
2. Omitir la detección de sufijos de archivos - lista negra
Principio (estrategia de lista negra):
Las extensiones de archivo son ilegales en la lista negra Generalmente, hay una lista negra especial, que contiene archivos de secuencias de comandos peligrosos comunes.
método:
-
Omisión de mayúsculas y minúsculas (.pHp)
En el juicio del sufijo, si solo compara las cadenas por separado para juzgar si se trata de un archivo restringido, puede usar el caso del nombre del sufijo para omitirlo.
-
Omisión de espacio (.php)
Si la lista negra no vacía el nombre del sufijo
Se puede omitir agregando un espacio después del nombre del sufijo.
-
omisión de puntos (.php.)
Si la lista negra no elimina el punto del nombre del sufijo
Con la función de nombre de archivo del sistema Windows, el último punto del sufijo se eliminará automáticamente y el sufijo del nombre de archivo se puede omitir agregando un punto.
-
::$Omisión de DATOS
Si no se completa la lista negra, vaya::$Procesamiento de DATOS
Utilizando una función del sistema de archivos NTFS en Windows, puede agregar ::$DATA después del nombre del sufijo para omitir la detección de la lista negra.
Windows filtrará automáticamente ::$DATA.
-
Coopere con Apache para resolver vulnerabilidades
El análisis de Apache tiene una característica:
El archivo de análisis se juzga de derecha a izquierda y, si el análisis es irreconocible, se juzga a la izquierda.
Como el archivo aa.php.owf.rar, Apache no reconoce ni analiza rar y owf, se analizará en el archivo php.
-
Archivo .htaccess (archivo de configuración distribuido)
Coopere con la omisión de lista, cargue un .htaccess personalizado, puede omitir fácilmente varias detecciones.
El archivo .htaccess se llama Acceso de hipertexto (Acceso de hipertexto).
Proporciona métodos para cambiar la configuración de un directorio.
Cuando el archivo se carga en el servidor, el servidor encontrará el archivo .htaccess para leer y analizar la configuración.
Esta configuración se puede personalizar para que los archivos pasen por alto la detección.
3. Omitir la detección de sufijos de archivos - lista blanca
Principio (estrategia de lista blanca):
Las extensiones de archivo que no están en la lista blanca son ilegales.
Método de derivación:
El servidor juzga el tipo de archivo de atrás hacia adelante y analiza el archivo de adelante hacia atrás.
Se puede omitir mediante el truncamiento 00, incluido el truncamiento %00 y el truncamiento 0X00.
Ejemplo: Cargue un archivo llamado aa.php%00.png
El servidor juzga el tipo de archivo de atrás hacia adelante. Cuando el servidor lee %00, lo analizará en 0X00. Cuando hay 0X00, ignorará automáticamente el contenido después de 0X00.
Luego, este archivo se cargará como un archivo png, sin pasar por la lista blanca.
Cuando el servidor guarda el archivo, lo analiza de adelante hacia atrás, ignora automáticamente .png y lo guarda como un archivo php.
Nota :
En la URL, se convierte en aa.php% 00.png En la extensión de archivo, % 00 debe decodificarse y luego agregarse a la extensión de archivo.
Use la herramienta burpsuite para agregar, primero agregue un espacio donde se debe agregar %00 y luego verifique la posición HEX, el HEX del espacio es 20, cambie esta posición a 00, que es la decodificación de %00.
4. Omitir la detección de contenido de archivos
principio:
Generalmente, se juzga si el archivo subido es legal al detectar el contenido del archivo.
Dos métodos de detección:
Al detectar el número mágico del archivo.
Llame a la API o función para cargar la prueba del archivo. La más común es la prueba de representación de imágenes (quizás una prueba de representación secundaria).
Método de derivación:
- Detección de número mágico de archivo de omisión
Agregue el número mágico del archivo correspondiente al principio del archivo.
Por ejemplo: para omitir la detección de número mágico de archivos jpg, agregue FF D8 FF E0 10 4A 46 49 46
- Omitir la detección de carga de archivos
Ataques de prueba de renderizado/carga - Bypass de inyección de código
Principio de ataque
Encuentre un espacio en blanco para completar el código sin destruir la representación del archivo en sí
Generalmente, es el área de comentarios de la imagen, que puede garantizar la integridad de la estructura del archivo.
Método de ataque en la representación secundaria ----- cargador de archivos de ataque en sí
Principio de ataque
Ataque al cargador de archivos a través de un ataque de desbordamiento,
Después de cargar archivos maliciosos, el cargador de archivos en el servidor realizará una prueba activa y el ataque de desbordamiento ejecuta el código de shell durante la prueba de carga.
9. Vulnerabilidad de análisis web
Vulnerabilidad de análisis de Apache
El archivo de análisis se juzga de derecha a izquierda y, si el análisis es irreconocible, se juzga a la izquierda.
Como el archivo aa.php.owf.rar, Apache no reconoce ni analiza rar y owf, se analizará en el archivo php.
Vulnerabilidad de análisis de IIS6.0
1. Análisis de directorio
Formulario: www.xxx.com/xx.asp/xx.jpg
Principio : el servidor analizará todos los archivos del directorio .asp en archivos asp de forma predeterminada.
2. Análisis de archivos
Formato: www.xxx.com/xx.asp;.jpg
Principio : el servidor no analiza el contenido después del punto y coma de forma predeterminada, por lo que xx.asp;jpg se analiza en un archivo asp
Vulnerabilidad de análisis de IIS7.0
Formato: cualquier nombre de archivo/cualquier nombre de archivo.php
**Principio: **IIS7.0/7.5 tiene una vulnerabilidad de análisis similar a Nginx al analizar php.
Para cualquier nombre de archivo, siempre que se agregue la cadena "/cualquier nombre de archivo.php" después de la URL, se analizará como PHP
Vulnerabilidad de análisis de Nginx
Formulario 1: nombre de archivo arbitrario/nombre de archivo arbitrario.php
**Principio:**Agregue "/cualquier nombre de archivo.php" a cualquier nombre de archivo y se analizará de acuerdo con php, como test.jpg/x.php
Formulario 2: cualquier nombre de archivo% 00.php
Para la versión inferior de Nginx, se puede agregar %00.php después de cualquier nombre de archivo para analizar el ataque
(Versión de Nginx <=0.8.37)