¿Diferencia entre phpp, php y phP? [cerrado]

-5

Encontré un desafío ctf donde se restringió la carga de archivos php pero no lo fueron phpp y phP . ¿En qué otros formatos se puede cargar php y cuál es la diferencia?

    
pregunta Aayush 15.07.2018 - 12:47
fuente

3 respuestas

0

Bueno, también he notado este comportamiento. Como @schroeder mencionó en los comentarios al principio, también pensé que tenía que ver con La función de carga pero luego decidí probar algunas pruebas. Así, por ejemplo, si tenemos un archivo php llamado test.php y Contiene el siguiente código:

<?php echo shell_exec('whoami'); ?>

Si intentamos ejecutarlo con php test.php ( suponiendo que php está instalado ), se ejecutará con éxito. Ahora el La parte extraña es que si cambiamos la extensión todavía funciona. Aquí hay un POC que cambia automáticamente la extensión e intenta ejecutar el archivo:

#!/bin/bash

# file with some possible extensions...
declare -a extensions=("test.phP" "test.PHp" "test.asdfphp" "test" "test.txt")

tmp='test.php'
for ext in "${extensions[@]}";do
    echo -e "Renaming file to $ext and try to execute it..."
    mv $tmp $ext; php $ext
    tmp=$ext
done

Así que todas esas extensiones de archivo se ejecutan correctamente. Los resultados del script anterior son:

Renaming file to test.phP and try to execute it...
username
Renaming file to test.PHp and try to execute it...
username
Renaming file to test.asdfphp and try to execute it...
username
Renaming file to test and try to execute it...
username
Renaming file to test.txt and try to execute it...
username

Ahora, incluso si eliminamos la palabra clave php de la etiqueta <?php en el archivo test.php , o incluso eliminamos la última etiqueta de cierre ?> el script sigue siendo un código php válido (como @AndrolGenhald señaló correctamente en los comentarios que se deben a PHP short tags ) y aún se ejecutará correctamente. Así que supongo que php comprueba el archivo y si es un contenido php válido será ejecutado. Aunque busqué y no encontré mi suposición documentada, por lo que si alguien sabe que la suposición anterior es correcta, por favor, publique un enlace :)

    
respondido por el game0ver 15.07.2018 - 14:55
fuente
2

Como un desafío habitual de CTF, la idea es que alguien configure algo, pero hay una vulnerabilidad en ello. Su objetivo es obtener la bandera, y dado que puede cargar un archivo, probablemente tenga que hacer que su código se ejecute en el servidor (para que pueda listar los archivos en el directorio y leer el archivo de la bandera).

Si puede cargar <?php echo 'ls'; en example.php en el servidor, es probable que el servidor ejecute el archivo cuando abra la URL. Al parecer, alguien intentó evitar que los usuarios subieran archivos con la extensión .php . Pero como ha notado, un archivo que termina en .phP está bien. El programador probablemente hizo algo como esto:

if (substr_count($filename, ".php") != 0){ reject upload; }

Por lo tanto, no puede cargar los archivos .php ... pero al servidor web no le importa si se llama .php o .PHP o .phP : su configuración simplemente dice que cualquier cosa que termine en .php (no distingue mayúsculas y minúsculas) debe ejecutarse como si fuera un código PHP. La extensión es solo una parte del nombre del archivo, por lo que los contenidos siguen siendo los mismos, solo que el nombre es diferente. Si lo desea, puede poner el código PHP en un archivo llamado example.aayush y configurar Apache o Nginx para ejecutar los archivos .aayush como código PHP. Y dado que normalmente no distinguen entre mayúsculas y minúsculas, también puede ejecutar .Aayush archivos de la misma manera.

¡Espero que esto ayude a resolver el desafío!

O, si desea saber cómo solucionar esta vulnerabilidad, consulte las preguntas etiquetadas: .

    
respondido por el Luc 15.07.2018 - 21:51
fuente
0
  

¿En qué otros formatos se puede cargar PHP?

Suponiendo que se refiere a la extensión de archivo y no al formato, cualquier extensión de archivo permitida por el código de carga e identificada como un script PHP por la configuración del servidor de PHP (módulo PHP de Apache httpd o PHP-FPM) puede ser ejecutable. Por ejemplo, si el servidor está configurado para ejecutar archivos *.php* , los archivos que terminan en .php , .php7 , y los que normalmente no son válidos, como .phpp , pueden ejecutarse.

    
respondido por el multithr3at3d 15.07.2018 - 20:37
fuente

Lea otras preguntas en las etiquetas