Análisis del principio de vulnerabilidad de la SSRF

0x01 conocimientos básicos

1. Introducción a las vulnerabilidades de SSRF:

El nombre completo de SSRF: Falsificación de solicitudes del lado del servidor, es decir, falsificación de solicitudes del lado del servidor, es una vulnerabilidad de seguridad que se ejecuta en el servidor de destino por un atacante que construye una solicitud. Un atacante puede utilizar esta vulnerabilidad para hacer que el servidor envíe una solicitud a cualquier dominio construido por el atacante. El objetivo suele ser un sistema interno al que no se puede acceder desde la red externa. En pocas palabras, es utilizar las vulnerabilidades del servidor para enviar una solicitud estructurada a la intranet del servidor para atacar como servidor.
Inserte la descripción de la imagen aquí

2. Principales métodos de ataque:

Cuando un atacante quiere acceder al servicio en el servidor B, pero el atacante no puede acceder directamente debido a un firewall o porque el servidor B pertenece a un host de intranet. Si hay una vulnerabilidad SSRF en el servidor A, el atacante puede usar el servidor A para iniciar un ataque SSRF e iniciar una solicitud al host B a través del servidor A para lograr el propósito de atacar la intranet.
Inserte la descripción de la imagen aquí
Ejemplo:

Escenario de vulnerabilidad: un sitio web tiene una función de carga en línea que puede cargar artículos remotos específicos localmente, el enlace es el siguiente:

http://www.xxx.com/article.php?url=https://blog.csdn.net/qq_43531669/article/details/112498646

Si el sistema no realiza ninguna verificación de los parámetros de la URL, se pueden construir otras solicitudes, por ejemplo:

http://www.xxx.com/article.php?url=http://127.0.0.1:22
http://www.xxx.com/article.php?url=file:///etc/passwd
http://www.xxx.com/article.php?url=dict://127.0.0.1:22/data:data2 (dict可以向服务端口请求data data2)
http://www.xxx.com/article.php?url=gopher://127.0.0.1:2233/_test (向2233端口发送数据test,同样可以发送POST请求)
...
3. El principio de formación de lagunas:

Muchos sitios web ofrecen la función de obtener datos de otros servidores. A través de la URL especificada, el sitio web puede obtener imágenes de otros lugares, descargar archivos, leer el contenido del archivo, etc. La esencia de SSRF es utilizar sitios web defectuosos como agentes para atacar servidores remotos y locales.

La razón de la formación de vulnerabilidades SSRF es principalmente porque el servidor proporciona la función de obtener datos de otros servidores, pero no filtra ni restringe la dirección de destino. El atacante puede utilizar la vulnerabilidad para obtener alguna información del sistema interno (debido a que es iniciada por el servidor, puede solicitar el sistema de red interno conectado a él pero aislado de la red externa).

4. El daño de las lagunas legales:
  1. Realice un escaneo de puertos en la red externa, la red interna donde se encuentra el servidor y la red local.

  2. Envíe la carga útil a cualquier puerto de cualquier host interno para atacar los servicios de intranet

  3. Ataque DOS (solicitar archivos grandes, mantener siempre la conexión Keep-Alive Always)

  4. Atacar aplicaciones web en la intranet, como inyección SQL directa, ataques XSS, etc.

  5. Utilice protocolos de archivo, gopher y dictado para leer archivos locales, ejecutar comandos, etc.

  6. Puede ignorar el CDN del sitio web

La defensa del servicio de intranet es generalmente más débil que los servicios de red externos, e incluso algunos servicios de intranet no tienen acceso al conjunto de intranet para verificar los permisos de acceso para la conveniencia de operación y mantenimiento. Por lo tanto, cuando existe SSRF, generalmente causa un daño mayor.

0x02 detección de vulnerabilidades

1. Verificación de vulnerabilidad:

Debido a que la vulnerabilidad SSRF es una vulnerabilidad de seguridad que construye el servidor para enviar una solicitud, podemos determinar si existe una vulnerabilidad SSRF analizando si la solicitud enviada es enviada por el servidor.

Busque la dirección del recurso accedido en el código fuente de la página. Si el tipo de dirección del recurso es, http://www.xxx.com/a.php?image=地址puede haber una vulnerabilidad SSRF.

2. Los posibles puntos de vulnerabilidad:

(1) Función para compartir: comparte artículos, etc. a través de direcciones URL, como las siguientes direcciones:

http://share.xxx.com/index.php?url=http://www.xxx.com

Al obtener el parámetro url, puede saltar al artículo compartido especificado al hacer clic en el enlace. Si no hay filtrado ni restricción en el rango de la dirección de destino en esta función, existe una vulnerabilidad SSRF.

(2) Carga / descarga de imágenes: carga o descarga de imágenes a través de la dirección URL:

http://image.xxx.com/image.php?image=http://www.xxx.com

La carga de imágenes existe en muchos editores. El editor carga la imagen y carga la dirección de imagen configurada en el servidor remoto. Si no hay restricciones en los parámetros cargados, puede causar SSRF.

(3) Función de recopilación de imágenes / artículos:

http://title.xxx.com/title?title=http://title.xxx.com/xxx

Por ejemplo, el parámetro de título es la dirección del título del artículo, que representa el enlace de dirección de un artículo. Si la función de recopilación utiliza este formulario para guardar el artículo, puede haber SSRF en forma de parámetro sin restricción.

(4) Servicio de transcodificación: ajuste el contenido de la página web original a través de la dirección URL para que sea adecuado para la navegación por la pantalla del teléfono móvil.

(5) Traducción online: traducir el contenido de la página web correspondiente al sitio web.

(6) Sistema de correo: por ejemplo, la dirección del servidor de correo receptor.

(7) Busque usando palabras clave en los parámetros:

Palabras clave:

share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain...

En general, los sitios web que necesitan solicitar recursos de servidores remotos pueden tener vulnerabilidades SSRF.

0x03 Método de derivación:

Algunas vulnerabilidades o SSRF pueden generarse en el procesamiento de la lista blanca o la lista negra para evitar ataques y el acceso a los servicios y recursos de la intranet. Por lo tanto, para lograr ataques SSRF, debe omitir la dirección de parámetro solicitada. Los métodos de omisión comunes son los siguientes:

1. Omita la restricción a un determinado nombre de dominio:

(1) usando @ Cuando el sitio para limitar el acceso solo http://www.xxx.comcuando el tipo de nombre de dominio, puede usar la forma http básica para omitir la autenticación, como: http: //[email protected]

En el nombre de dominio @Resolve, existen diferencias de procesamiento en diferentes funciones de procesamiento, por ejemplo:

http://[email protected]@www.ccc.com

El parse_url de PHP reconocerá www.ccc.com y libcurl lo reconocerá como www.bbb.com.

2. Para omitir la solicitud de restricción, la IP no es una dirección de intranet:

(1) Utilice URL cortas para omitir

(2) Con un nombre de dominio especial, xip.io puede apuntar a cualquier nombre de dominio (el principio es la resolución de DNS), es decir, 127.0.0.1.xip.io, que se puede resolver en 127.0.0.1

(3) el uso de conversión binaria, 127.0.0.1 octal:; 0177.0.0.1Hex 0x7f.0.0.1:; Decimal:2130706433

(4) Utilización [::], http://[::]:80/se analizará comohttp://127.0.0.1

(5) Agregue el número de puerto, http://127.0.0.1:8080

(6) Usando el período, se 127。0。0。1analizará como 127.0.0.1

(7) Utilice 302 salto

3. La solicitud de restricción es solo para el protocolo http:

(1) Utilice 302 salto

(2) Utilice una dirección corta

0x04 exploit

1. Función vulnerable:

De acuerdo con las diferentes funciones utilizadas en segundo plano, los impactos correspondientes y los métodos de utilización son diferentes. El uso inadecuado de las siguientes funciones en PHP conducirá a SSRF:

file_get_contents()
fsockopen()
curl_exec()       

file_get_contents ()

La función de esta función es leer el archivo completo en una cadena, y esta función es el método preferido para leer el contenido del archivo en una cadena.

Por ejemplo: el siguiente resultado de ejecución de código es generar la cadena en el archivo test.txt.

<?php
echo file_get_contents(“test.txt”);
?>

fsockopen ()

Utilice la función fsockopen para obtener los datos (archivo o html) de la URL especificada por el usuario.

curl_exec ()

Esta función puede ejecutar una determinada sesión de curl.

Entre los protocolos admitidos por curl se encuentran:
Inserte la descripción de la imagen aquí

2. Campo de tiro de vulnerabilidad:

Aquí usamos el módulo ssrf del campo de tiro de pikachu para la demostración.

2.1 、 SSRF (rizo) :

Primero observe curl_exec()el rango de disparo ssrf que usa la función. Al hacer clic en el enlace de la página, se devolverá un poema. Observe que pasa una solicitud de URL al fondo para
Inserte la descripción de la imagen aquí
ver el código de back-end. Puede ver que usa get para obtener el solicitud de URL de front-end, y la función curl_exec ejecuta Request, y finalmente devuelve el resultado de la solicitud al front-end.
Inserte la descripción de la imagen aquí

curl_init //初始cURL会话
curl_exec //执行cURL会话

Modifique la url subida a http://www.badiu.com, puede ver que la página muestra datos de Baidu.
Inserte la descripción de la imagen aquí
Podemos cambiar el contenido de la url a las direcciones y puertos de otros servidores en la intranet para detectar información de la intranet. Por ejemplo, la situación de apertura del puerto, por ejemplo, la siguiente figura detecta que el host de la red interna 192.168.50.130 ha abierto el puerto 22: se
Inserte la descripción de la imagen aquí
puede usar con scripts o Burp para realizar una detección de puerto más eficiente, por ejemplo:

Abra Burp, tome el paquete y envíelo a Intruder, configure la carga útil
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí

Se puede observar que se detecta que el puerto 80 del host de la red interna está abierto.También
Inserte la descripción de la imagen aquí
podemos leer los archivos del servidor de la red interna a través de la vulnerabilidad SSRF, por ejemplo, modificar la url a

http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/windows/system.ini

Inserte la descripción de la imagen aquí
2.2 、 SSRF (file_get_content)

También haga clic en la pestaña de la página y descubrió que el protocolo de archivo se usa para leer el archivo
Inserte la descripción de la imagen aquí
. El código de back-end
Inserte la descripción de la imagen aquí
es aproximadamente el mismo que el anterior. La diferencia es que usa una file_get_contentsfunción para leer y ejecutar el archivo, y el file_get_contentsLa función puede leer el archivo local o Leer archivos remotos, por ejemplo:

http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=http://192.168.50.130/index.html
http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///c:/windows/system.ini

O use el filtro para obtener las páginas del código fuente (el acceso directo solo será el archivo php que se ejecuta como se explica en detalle )

http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=test.php

Inserte la descripción de la imagen aquí
Obtenga el código fuente después del descifrado base64:
Inserte la descripción de la imagen aquí

0x05 Cómo defenderse de la SSRF

1. Sin salto

2, además de inhabilitación protocolo HTTP y HTTPS, tales como: file://, gopher://, dict://y similares.

3. El puerto para restringir solicitudes es el puerto comúnmente utilizado por http, como 80, 443 y 8080.

4. Unifique la información de error para evitar que los usuarios juzguen el estado del puerto del servidor remoto en función de la información de error.

5. Establezca una lista blanca para la dirección solicitada o limite la IP de la red interna para evitar ataques a la red interna.


Artículo de referencia:
https://cloud.tencent.com/developer/article/1561355
https://www.cnblogs.com/DxyG/p/13742430.html
https://www.cnblogs.com/dogecheng/p/11652022 .html # 2605005798
https://cloud.tencent.com/developer/article/1587012

Supongo que te gusta

Origin blog.csdn.net/qq_43531669/article/details/113052373
Recomendado
Clasificación