Sfruttare la funzione READFILE di PHP quando un nome file viene aggiunto al percorso

3

Vorrei fare una domanda sullo sfruttamento della funzione PHP readfile . Quindi sto pagando per aver hackerato un sito, e ho bisogno di leggere un file PHO chiamato readme.php attraverso un file PHP chiamato read.php , che contiene il seguente codice:

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

Quindi non posso leggere il file readme.php perché aggiunge automaticamente /index.html . In questo caso, c'è un modo per leggere il file PHP?

    
posta Lucas 20.09.2016 - 22:50
fonte

1 risposta

6

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".

    
risposta data 21.09.2016 - 00:27
fonte

Leggi altre domande sui tag