PHP反序列化--引用

本文介绍了引用在编程中的概念,以及如何在PHP靶场环境中利用引用实现字符串值的持久绑定。通过实例演示了如何构造payload,利用序列化绕过字符串转义机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引用的理解:

引用就是给予一个变量一个恒定的别名。

int a = 10;

int b = &a;

a = 20;

cout<<a<<b<<endl;

输出结果 : a=20、b=20

二、靶场复现:

<?php
highlight_file(__FILE__);
error_reporting(0);
include("flag.php");
class just4fun {
    var $enter;
    var $secret;
}

if (isset($_GET['pass'])) {
    $pass = $_GET['pass'];
    $pass=str_replace('*','\*',$pass);
}

$o = unserialize($pass);

if ($o) {
    $o->secret = "*";
    if ($o->secret === $o->enter)
        echo "Congratulation! Here is my secret: ".$flag;
    else
        echo "Oh no... You can't fool me";
}
else echo "are you trolling?";
?>

分析靶场源代码:

后台会将我们输入的字符串中的 * 转义成 \*,并且转义之后会将 $serect 赋值为 *。并且最终以 $o->serect 和 $o->enter 是否相等作为最终条件,我们可以使用引用将 serect 和 enter 捆绑在一起,使他们一直相等即可。

构造 payload:

将序列化字符串赋值给 ['pass'] 后提交:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值