極客大挑戰 2019 PHP

2021-10-18 21:42:44 字數 1594 閱讀 7467

開啟後,按照提示找備份檔案

用御劍沒掃到東西,換個工具dirsearch

找到備份檔案

解壓檔案,檢視flag,假的。。

審計一下這幾個的**吧

flag.php裡的$flag 給了個值syc,好像沒啥用。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-jirqepnc-1612329916646)(media/48179c6eecd1ccf0d54bc3fc01c37add.png)]

index.php裡的一塊**

unserialize()函式用於將通過

函式序列化後的物件或陣列進行反序列化,並返回原始的物件結構。

unserialize的漏洞在magic

function上,如果乙個類定義了__wakup()和__destruct(),則該類的例項被反序列化時,會自動呼叫__wakeup(),

生命週期結束時,則呼叫__desturct()。這裡就利用這個漏洞

看一下class.php

根據**的意思,我們可以發現如果username=admin

password=100然後我們再執行__destruct()時可以獲得flag

構造序列化

然後執行得到json

o:4:「name」:2:

但是反序列化會先執行__wakeup()魔術方法,username會重新賦值。。所以應該想辦法跳過__wakeup(),執行__destruct

在反序列化時,當前屬性個數大於實際屬性個數時,就會跳過__wakeup(),去執行__destruct

於是我們這樣構造payload:

?select=o:4:「name」:2

而這個變數是private的,只能在宣告的類中訪問,因此私有欄位的欄位名在序列化時,類名和欄位名前面都會加上\0的字首。字串長度也包括所加字首的長度

極客大挑戰 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

這不反手就試試www.zip?class.php class name function wakeup function destruct if this username admin else 這裡要注意的是兩個變數都是private型 private 宣告的字段為私有字段,只在所宣告的類中可見,...