warmup-php
0. 题目信息
打开链接,网页源码如下:
<?php
spl_autoload_register(function($class){
require("./class/".$class.".php");
});
highlight_file(__FILE__);
error_reporting(0);
$action = $_GET['action'];
$properties = $_POST['properties'];
class Action{
public function __construct($action,$properties){
$object=new $action();
foreach($properties as $name=>$value)
$object->$name=$value;
$object->run();
}
}
new Action($action,$properties);
?>
下载题目附件,有4个PHP文件:

1. 解题步骤
首先观察题目源码,spl_autoload_register函数实现了当程序遇到调用没有定义过的函数时,会去找./class/函数名.php路径下的php文件,并把它包含在程序中。
可以使用POST方式传入properties参数,用来初始化类成员变量的值。
注意Action类的构造函数中调用了run函数,因此此时思路就是找一下哪个文件中定义了这个函数。
然后对于题目附件给出的文件进行代码审计:
(1)ListView.php 部分关键代码
<?php
abstract class ListView extends Base
{
public $tagName='div';
public $template;
public function run()
{
echo "<".$this->tagName.">\n";
$this->renderContent();
echo "<".$this->tagName.">\n";
}
public function renderContent(</

本文详细介绍了PHP中的spl_autoload_register函数如何实现类的自动加载,以及如何通过payload构造利用这一点进行命令执行。通过分析ListView、TestView和Base类的关键代码,揭示了eval函数在evaluateExpression方法中的风险,最后给出了利用模板注入和eval执行任意命令的Payload。文章适合了解PHP安全和代码审计的读者阅读。
最低0.47元/天 解锁文章
458

被折叠的 条评论
为什么被折叠?



