第8 代码有个 var_method 常,这个常的定义在 application/config.php 件中,
var_method 对应的值是 _method 。
也就是说,如果我们通过POST式传 _method=xxx 的情况下,代码会将xxx转换为写并赋值
给 $this->method 。然后 第9 调 $this->{$this->method}($_POST) ,也就是调 $this-
>XXX($POST) ,这就说明攻击者在这个地先调的函数可控,其次传的数据也可控。
根据已知payload,这的 _method=___construct ,也就是说 ___construct 函数也有问题,跟进
下 ___construct 函数,函数位置在 library/think/Request.php:135-148 中。
对传的 $options 数组进遍历,然后 第4 调 property_exists 进判断,
property_exists 函数的作是检查对象或类是否具有该属性,也就是说当 $options 的键名为该类
属性时,则将该类同名的属性赋值为 $options 中该键的对应值。这 第8 代码中针对 $this-
>filter 进判断,如果存在,让其等于 Config::get('default_filter') 的结果,
default_filter 定义在 application/config.php:44 中,其值默认为空。
protected function __construct($options = [])
{
foreach ($options as $name => $item) {
if (property_exists($this, $name)) {
$this->$name = $item;
}
}
if (is_null($this->filter)) {
$this->filter = Config::get('default_filter');
}
// 保存 php://input
$this->input = file_get_contents('php://input');
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
评论0
最新资源