這道題不是說太難,但是思路一定要靈活,靈活的利用源碼中給的東西。先看一下源碼。
首先要理解大意。
這段源碼的大致的意思就是,先將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這個函數