一.根據題目猜測和反序列化漏洞有關
1.思路:
進入實驗環境后,發現是一段php代碼,通過接受get請求方式將提交過來的var的值,
先進行base64解碼,再進行正則的判斷,如果不匹配成功就會反序列化輸入的參數值。
所以這里我們目的就是為了繞過正則表達式,讓其反序列化出我們要的fl4g.php,再通過析構函數,高亮出fl4g文件中的內容。
2.步驟:
通過代碼中的注釋我們發現flag在fl4g.php這個文件里面,所以我們要將其序列化
編寫一段代碼先實例化我們要序列化的類,這里吧fl4g.php傳進去,然后通過構造方法將其賦值給$file,
然后我們輸出序列化的結果,這里為了繞過正則可以采用將 :4: 替換為 :+4:,
在 PHP5 < 5.6.25, PHP7 < 7.0.10 的版本存在wakeup的漏洞。當反序列化中object的個數和之前的個數不等時,wakeup就會被繞過。
所以我再將它的 :1: 替換為一個大點的值 比如 :2: ,
因為在接受到var值后會對其base64解碼,所以這里我們再將其base64編碼,然后輸出即得到我們要輸入的參數值。
TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ== ,得到flag。
**這里我們要注意:這里的file變量為私有變量(protected變量應該也會),所以序列化之后的字符串開頭結尾各有一個空白字符(即%00),
字符串長度也比實際長度大2,如果將序列化結果復制到在線的base64網站進行編碼可能就會丟掉空白字符,從而得到錯誤的編碼值
如下圖,通過strlen求到序列化的長度為48,但實際我數了一下只有46。