RFI e LFI
Purtroppo, questo non sembra essere direttamente sfruttabile. Come discusso altrove nei commenti, RFI non è possibile a causa del prefisso, e LFI non è possibile in linux perché (credo) non c'è modo di sfuggire al strpos
tramite la codifica. PHP decodificherebbe automaticamente qualsiasi stringa codificata URL prima di inserirla nella super variabile $_GET
e qualsiasi codifica che non attivasse la ricerca strpos
non verrebbe registrata come una barra diretta ai fini della chiamata di inclusione (a almeno, non sono riuscito a trovare alcun vettore di attacco riuscito). Tieni a mente la risposta di duskwuff però - LFI è possibile qui su Windows.
Attacchi alternativi
Tuttavia, ciò non significa che non possa aiutare. In particolare, open include in questo modo il tipo di vulnerabilità che consente di rendere una vulnerabilità più piccola molto più grande. Il pensiero immediato che viene in mente è quello di verificare se questo sito ha una funzione di upload delle immagini ovunque. Se è così, e sai dove vengono salvate le immagini, puoi provare ad inserire PHP valido nei dati EXIF di un'immagine jpg che poi carichi sul server. Normalmente tale codice non è sfruttabile, perché non hai comunque il permesso di eseguire il tuo PHP sul server. Tuttavia, con un inclusivo aperto come questo, puoi caricare il tuo file e quindi utilizzare questa vulnerabilità per eseguirlo (dal momento che probabilmente il file caricato esiste all'interno di /path/to/php/files
la mancanza di una vulnerabilità LFI pienamente qualificata non avrà importanza). Da lì puoi fare quello che vuoi.
Usare l'input dell'utente per costruire un percorso di inclusione è quasi sempre una cattiva idea, ed è raramente necessario. Anche se non c'è una debolezza immediata, ciò non significa che non possa aiutarti quando ne sfrutti altri.
Migliore sicurezza
Penso che valga la pena di dedicare un minuto a spiegare come qualcosa come questo dovrebbe essere protetto. È difficile fornire una soluzione esatta senza più contesto, ma in genere qualcosa di simile può essere suddiviso in un processo in due fasi più sicuro:
- Utilizza
realpath
per consentire al sistema di risolvere tutti i tentativi di attraversamento di directory e ottenere un percorso assoluto finale
- Assicurati che il percorso assoluto finale risieda in una directory sicura per poter includere i file da, o esplicitamente white-list contro un elenco di include sicuri
Non vuoi mai consentire all'utente di includere un file arbitrario. Determinare esattamente quale file verrà incluso come risultato dell'input dell'utente e filtrarlo attraverso una whitelist. Questo è l'unico modo per farlo in modo sicuro.