Accanto a PHP è interpretato, la versione < = a PHP 5.3.4 sono vulnerabili a un attacco comunemente chiamata iniezione null byte .
Per dichiarare una stringa in php, usi $var = "hey"
che è quindi equivalente in C a char tab[4]="hey"
. Si noti che abbiamo dichiarato una matrice di caratteri di 4 byte mentre vogliamo solo memorizzare 3 caratteri. Questo perché il compilatore inserisce automaticamente il carattere null byte. La tua stringa finale è quindi heytab
%00
è un puntatore che punta sul primo carattere della stringa. Il tuo computer leggerà dal primo carattere al carattere null byte (0 in esadecimale) rappresentato da readfile("pages/$path/index.html");
.
$tmp=pages/pathFromVariable/index.html
è la rappresentazione del carattere null byte in PHP.
Quando si chiama una funzione con una stringa, come pages/pathFromVariable/index.html$tmp=pages/pathFromVariable%00/index.html
, la stringa viene memorizzata in una variabile. Chiamiamolo pages/pathFromVariablepages/pathFromVariable
/index.html%code%
che in realtà verrà memorizzato in %code%
Ora, se si immette un byte nullo alla fine dell'input, è possibile cancellare la fine della stringa. per esempio, se %code% sarà memorizzato come %code% che risulterà nella lettura del file %code% ! Custodito!
Scusa se questo è un po 'confuso, questa è la mia prima spiegazione "tecnica".