某CTF平台一道PHP代碼審計


這道題不是說太難,但是思路一定要靈活,靈活的利用源碼中給的東西。先看一下源碼。

      

                 

                                                                        

 

 

首先要理解大意。

這段源碼的大致的意思就是,先將flag的值讀取放在$flag里面。

后面再接受你輸入的值進行判斷(黑名單)。說實話這道題后面把eval去掉也是可以做的。既然這道題把flag的值放進了變量里面,那么我們就需要將其輸出就行了!!

當然這里面是有waf的。

我們看一下吧

                                                                                                

基本的waf都在這里面。其他的都好理解,就是那個get_defined_functions()有點不同。

查了一下大致意思就是說輸出當前進程所有變量/常量/模塊/函數/類的示例。本機試驗了一下。。

          

有點多,這個就是保證有很多的內置函數你都用不了。。

 

不着急,因為那個foreach就是用來判斷輸入是否有誤。。

 

你可以看一下$who的初始值,base64解碼后發現為flag,而$flag就是我們要讀取的變量!

 

所以我們可以試一下雙重變量,即$$,一開始構造的是?cmd=${base64_decode($who)},但是發現下划線也被過濾了!!!后來又發現源碼中不是給了我們一個base64解碼函數嗎233

 

於是構造 ?cmd=${helper($who)}

 

成功讀取flag

 

 

當然還是有辦法命令執行的,我的思路就是使用一個變量來接受base64解碼后的值,然后再根據這個變量來調用函數

 

payload?cmd=Mikasa;$a=helper('cGhwaW5mbw==');$a()

成功執行phpinfo()

后面的大體上都需要用到helper這個函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM