Explotación de la función de archivo de lectura de PHP cuando se agrega un nombre de archivo a la ruta

3

Me gustaría hacer una pregunta sobre la explotación de la función PHP readfile . Entonces me pagan por hackear un sitio, y necesito leer un archivo PHO llamado readme.php a través de un archivo PHP llamado read.php , que contiene el siguiente código:

<?php
$path = $_GET['p'];
readfile("pages/$path/index.html");
?>

Entonces no puedo leer el archivo readme.php porque agrega automáticamente el /index.html . En este caso, ¿hay una manera de leer el archivo PHP?

    
pregunta Lucas 20.09.2016 - 22:50
fuente

1 respuesta

6

Al lado de PHP se interpreta, la versión < = a PHP 5.3.4 es vulnerable a un ataque que comúnmente se llama inyección de bytes nulos .

Para declarar una cadena en php, utiliza $var = "hey" , que es equivalente en C a char tab[4]="hey" . Observe que declaramos una matriz de caracteres de 4 bytes, mientras que solo queremos almacenar 3 caracteres. Esto se debe a que el compilador inserta automáticamente el carácter de byte nulo. Tu cadena final es entonces heytab

%00 es un puntero que apunta al primer carácter de su cadena. Su computadora leerá desde el primer carácter al carácter de byte nulo (0 en hexadecimal) representado por readfile("pages/$path/index.html"); .

$tmp=pages/pathFromVariable/index.html es la representación del carácter de byte nulo en PHP.

Cuando llamas a una función con una cadena, como pages/pathFromVariable/index.html$tmp=pages/pathFromVariable%00/index.html , tu cadena se almacena en una variable. Llamémoslo pages/pathFromVariablepages/pathFromVariable/index.html%code% que en realidad se almacenará en la memoria como %code%

Ahora, si inyecta un byte nulo al final de su entrada, puede borrar el final de la cadena. por ejemplo, si %code% se almacenará como %code% , lo que resultará en la lectura del archivo %code% ! Pown!

Lo siento si esto es un poco confuso, esta es mi primera explicación "técnica".

    
respondido por el Xavier59 21.09.2016 - 00:27
fuente

Lea otras preguntas en las etiquetas