记录一道在新生赛碰到的题目,继续学习php反序列化。
题目
1 |
|
题解
官方解
B::__desturt()->A::__get->Fun::__call->Test::__call
直接修改类全为__construct()
魔术方法来构造序列化,便于赋值。
给Fun类的$this->func赋值array(new Test,"__call")
来触发Test类的__call
魔术方法
1 | <?php |
网上师傅的解法
B::__desturt()->A::__get->Fun::__call
利用call_user_func_array函数来执行命令
给B类的$p赋值为phpinfo然后一步一步传递到Fun类无参函数传进去$f
就为phpinfo此时$p
没有传参直接就是空数组了,就可以执行命令了。
1 |
|
总结
两种构造方式以及不同获取环境变量的思路。
也是对php反序列化有了更多的了解。