Utilizzo di funzioni PHP integrate
Con solo queste due righe, penso che sia improbabile che tu possa fare molto più di phpinfo, perché non sembra possibile passare argomenti alla funzione, il che riduce drasticamente le tue opzioni.
Sembra che ci sia una certa confusione nei commenti e in altre risposte, quindi per essere chiari: i valori di $_GET
sono considerati come stringhe, non come codice PHP. Ciò significa che nessuna delle opzioni fornite - funzioni anonime, esecuzione di codice arbitrario, utilizzando "echo hello"->system
, utilizzando exec('rm -r /')
- funzionerà.
Non puoi nemmeno perdere altre informazioni oltre a phpinfo - ad es. get_current_user -, in quanto il risultato della chiamata non viene echeggiato.
Potrebbero esserci alcuni casi oscuri che potrebbero essere considerati vulnerabilità. Ad esempio, con determinate impostazioni SSRF / DOS tramite ingres_connect potrebbe essere possibile (sebbene inverosimile).
Utilizzo del codice circostante
Oltre alla perdita di phpinfo, ciò significherebbe che è necessario sfruttare il codice circostante. Alcune possibilità potrebbero essere:
- DOS tramite una chiamata di funzione molto costosa
- Ignora autenticazione
- Filtro bypass
- ...
Fondamentalmente, il codice ti dà il controllo sul flusso di controllo dell'applicazione, ed è quello che devi sfruttare.
Questo non è limitato alle sole funzioni incluse. Dalla versione 5.4.0, puoi anche chiamare i metodi di qualsiasi classe inclusa:
fcall[]=MyClass&fcall[]=myFunction
Ma ancora una volta, non puoi creare nuovi oggetti tramite questo codice:
$_GET['fcall'] = array(new MyClass, "myFunction");
$fcall = $_GET['fcall'];
$fcall();
Il problema è lo stesso di prima: $_GET
è trattato come stringa, rendendolo non funzionante non appena il valore viene effettivamente passato al server invece di codificato.