[Seguridad de la red] Explicación detallada de las vulnerabilidades de carga de archivos

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
  1. 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

  2. Clasificado por tipo de guión

    jsp

    áspid

    aspx

    php

características
  1. La mayoría de los webshells aparecen en forma de scripts dinámicos
  2. webshell es un troyano de puerta trasera asp o php
  3. 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
  4. 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
  1. Usar vulnerabilidades web para obtener permisos web
  2. subir pony
  3. Subir Malasia
  4. 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:

  1. 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.

  2. 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.

  3. 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.

  4. ::$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.

  5. 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.

  6. 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:

  1. 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

  1. 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)

Supongo que te gusta

Origin blog.csdn.net/love_wgll/article/details/129230797
Recomendado
Clasificación