传统的php反序列化漏洞必须要两个条件:
存在反序列化漏洞的php对象
unserialize函数漏洞可控
在实际的php程序中,反序列化链(pop链),如thinkphp、Laravel的反序列化链的漏洞偶尔会爆出来
但是这样写代码的还是很少的。
$data = unserialize($_POST['a']);
但是phar文件的出现,给php反序列化漏洞带来了新的攻击面,可以做的无unserialize函数的情况下,完成反序列化漏洞。
漏洞成因:
phar存储的meta-data信息以序列化方式存储,当文件操作函数通过phar://伪协议解析phar文件时就会将数据反序列化。
具体一点就是当源码中出现以下函数,且参数的可控的生活,一样可以成功触发php反序列化漏洞。
漏洞演示:
php.ini phar.readonly 设置为 off