Inclusión de archivos locales a RCE mediante envoltorios de archivos PHP

1

Supongamos que tenemos un código que se parece a esto:

<?php include("includes/".$_GET['param1'].".php");?>

Ahora el código anterior es vulnerable a LFI. Si paso la carga útil ../../../../etc/passwd%00 , funciona perfectamente y obtengo el archivo.

Sin embargo, estoy tratando de lograr la ejecución remota de código utilizando la vulnerabilidad de LFI anterior. ¿Existe la posibilidad de usar el contenedor de archivos PHP "php: // input" para obtener RCE?

El problema aquí creo que es la carpeta includes/ en la ruta y cómo evitarla.

    
pregunta hax 13.09.2016 - 21:27
fuente

3 respuestas

2

No puede utilizar include() para aprovechar LFI en dynamic RCE. Ya debería tener un archivo con código (es decir, evil-RCE-code.php ) en el sistema para llamar. Por ejemplo:

  

Si una aplicación pasa un parámetro enviado a través de una solicitud GET al PHP   función include () sin validación de entrada, el atacante puede intentar   ejecutar código distinto al que el desarrollador tenía en mente.

     

La URL a continuación pasa un nombre de página a la función include() .

     

enlace

     

El archivo "evil-RCE-code.php" puede contener, por ejemplo, el phpinfo ()   función que es útil para obtener información sobre el   Configuración del entorno en el que se ejecuta el servicio web. Un   el atacante puede pedir a la aplicación que ejecute su código PHP usando el   siguiente petición:

     

enlace

Fuente ( Descargo de responsabilidad: Agregué la parte "-RCE-" para que sea más fácil ver dónde va el RCE. )

Eche un vistazo a esto para un enfoque diferente:

  

Un buen enfoque es utilizar la inclusión de archivos de la siguiente manera:
<?php define('MY_FILE_PATH','/var/www/htdocs/');require_once(APP_PATH .'lib.php');?>

     

Ahora veamos otro ejemplo, consideremos el   página siguiente:

     

enlace

     

page1 es el archivo que se incluye dinámicamente en la página web, por   mirando la url anterior, podemos asumir que el backend sería   usando el siguiente código:

            

Y ahora imagine que el atacante cambia el valor de la variable "archivo" a   siguiente:

     

http://localhost/index.php?file=data:text/plain,<?php phpinfo();?>

     

LFI se puede convertir fácilmente a ejecución remota de código (RCE) de una manera   Más. Este nuevo protocolo de datos ha aparecido en PHP 5.2.0 y en versiones anteriores.   Las versiones no funcionarán. También PHP argumentará y no permitirá utilizar.   es si allow_url_include=off lo que resulta en una divulgación de ruta completa.

     

Hay otras posibilidades de cómo se puede inyectar el código y luego   evaluado a través de los archivos de registro de apache, usando "/ proc" y otros. Sin un   duda, el uso inapropiado de funciones como file_get_contents(), readfile() , entradas de entrada como php://input , y otras representan un   amenaza también

Artículo completo

Más información de fondo y lectura

    
respondido por el HashHazard 13.09.2016 - 21:49
fuente
2

No puede usar secuencias si hay datos prefabricados, en su caso includes/ está precedido. Sin embargo, según el hecho de que los bytes nulos funcionan, parece que se está tratando con una tecnología más antigua y es posible que pueda aprovechar el truco /proc/self/environ haciendo algo como esto: curl -A '<?=passthru("id")?>' 'http://localhost/lfi.php?file=../../../../../proc/self/environ%00'

    
respondido por el wireghoul 14.09.2016 - 01:21
fuente
1

A veces es posible obtener RCE a través de un LFI sin poder controlar directamente un archivo en el disco, usar una RFI, usar esperar o usar una transmisión.

Cuando se produce un error, en una pila LAMP, la solicitud completa se registrará en el archivo de "registro de errores" del servidor. Puede enviar una solicitud no válida que contenga PHP bien formado, después de lo cual debería haber escrito un código PHP arbitrario en el sistema de archivos del servidor.

Ahora es cuestión de A) encontrar dónde se encuentra el archivo de registro, que a menudo se encuentra en una ubicación predeterminada y B) con la esperanza de que el usuario web tenga privilegios suficientes para leer el registro de errores.

Si se cumplen estos requisitos previos, puede incluir la ruta al registro de errores y su PHP inyectado debería ejecutarse.

    
respondido por el Pentesticals 12.06.2018 - 17:23
fuente

Lea otras preguntas en las etiquetas