Immaginate un'applicazione PHP giocattolo vulnerabile all'inclusione di file locali assoluti, ad es.Perché include ('php: // input') non funziona?
<?php include($_GET['action']);
ho provato la seguente richiesta di sfruttarlo:
POST /?action=php://input HTTP/1.1
Host: XXXXXXXXXXXXXXXXX
Content-Length: 3
foo
Esegue in modo efficace include('php://input');
con richiesta di corpo foo
, quindi mi si aspetterebbe per stampare foo
. Tuttavia, ottengo il seguente errore
<br />
<b>Warning</b>: include(php://input): failed to open stream: operation failed in <b>XXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
<br />
<b>Warning</b>: include(): Failed opening 'php://input' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in <b>XXXXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
Qual è il problema qui? È una funzionalità di sicurezza PHP? In tal caso, qualcuno può indicare la parte responsabile del codice sorgente PHP che lo attenua?
Che dire flussi personalizzati? Usando 'stream_wrapper_register' e tutto quel jazz? – Halcyon
Controlla il valore di questa opzione nella tua configurazione http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek
@Halcyon Sto ascoltando. Non c'è modo che io abbia trovato questo sfruttabile su una moderna installazione LAMP, eccetto se hai una primitiva di scrittura di file (come 'session_start()' o una registrazione specifica dell'applicazione, ecc.) –