Uso de funciones PHP incorporadas
Con solo estas dos líneas, creo que es poco probable que puedas hacer mucho más que phpinfo, porque no parece posible pasar argumentos a la función, lo que reduce considerablemente tus opciones.
Parece que hay cierta confusión en los comentarios y otras respuestas, así que, para dejarlo claro: los valores de $_GET
se tratan como cadenas, no como código PHP. Esto significa que ninguna de las opciones proporcionadas (funciones anónimas, ejecución de código arbitrario, usar "echo hello"->system
, usar exec('rm -r /')
) funcionará.
Ni siquiera puedes filtrar otra información además de phpinfo, por ejemplo, get_current_user, ya que el resultado de la llamada no se repite.
Puede haber algunos casos oscuros de esquina que pueden considerarse vulnerabilidades. Por ejemplo, con ciertas configuraciones SSRF / DOS a través de ingres_connect puede ser posible (aunque extravagante).
Utilizando el código que lo rodea
Aparte de la fuga de phpinfo, eso significaría que necesitas explotar el código circundante. Algunas posibilidades podrían ser:
- DOS a través de una función de llamada muy costosa
- Omisión de autenticación
- omisión del filtro
- ...
Básicamente, el código le da control sobre el flujo de control de la aplicación, y eso es lo que necesita explotar.
Esto tampoco se limita a las funciones que solo se incluyen. Desde la versión 5.4.0, también puede llamar a los métodos de cualquier clase incluida:
fcall[]=MyClass&fcall[]=myFunction
Pero, de nuevo, no puede crear nuevos objetos a través de este código:
$_GET['fcall'] = array(new MyClass, "myFunction");
$fcall = $_GET['fcall'];
$fcall();
El problema es el mismo que antes: $_GET
se trata como una cadena, por lo que no funciona tan pronto como el valor se pasa al servidor en lugar de codificado.