攻防世界-web高手進階篇-warmup

打開題目鏈接後只有一個滑稽??(那就看看它裏面有啥吧)

想啥呢,是審查源碼啦

可以看到有註釋source.php,訪問後可以看到其源碼

又發現一個hint.php文件,先訪問再說

提示我們flag在ffffllllaaaagggg裏面,此時題目已經完成一半啦

接着看回source.php源碼

可以看到最後的include 是可以動態構造參數的,那應該就是解題關鍵了

不過要經過三個判斷

第一個:檢查一個變量是否爲空

第二個:是否爲字符串

第三個:通過函數來檢查

我們要構造的payload本身就滿足前兩點所以無視

重要是第三點的這個函數

函數作用是分三步檢查傳進來的參數是否滿足白名單:

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];

第一步:

只要我們傳的參數是source.php或者hint.php則返回真

如果不滿足繼續往下判斷

第二步:

取傳進參數首次出現?前的部分

再進行白名單判斷

如果還不滿足繼續往下判斷

第三步:

先把傳進的參數做urldecode

接着就和第二步一樣

都不滿足就輸出"you can't see it"並且返回假

要想滿足這些條件那我們傳的參數就只能是這種形式

($_REQUEST 是通過 GET,POST 和 COOKIE 輸入機制來傳遞參數,下面偷懶就用get方式傳值)

http://111.198.29.45:48818/source.php?file=source.php?(payload)

http://111.198.29.45:48818/source.php?file=hint.php?(payload)

上面這種形式就符合函數的第二個判斷

如果閒着無聊也可以滿足第三種,就是雙重url編碼,傳過去的時候會自動解碼一次,再加上函數的一次就會滿足條件

http://111.198.29.45:48818/source.php?file=source.php%253f(%253f就是?的兩次url編碼)

http://111.198.29.45:48818/source.php?file=hint.php%253f

符合條件後include得到得值就變成:

include source.php?(payload)

因爲source.php?(或hint.php?)是固定不能改的,那麼我們能利用的漏洞只有本地文件包含了

(本人技術比較菜也只能想出這種了,如果還有別的方法還望大佬們賜教)

flag文件名也知道了就差路徑不知道,一個一個試可以得到

source.php(或hint.php)?/../../../../../../ffffllllaaaagggg

ok!flag get√

可能會有疑問爲啥include source.php(或hint.php)?/../../../../../../ffffllllaaaagggg能執行成功

看官方對include的定義

因爲我們的參數是有/../../../../../../這樣的路徑所以符合最後一段話如果定義了路徑,就會忽略/前的字符串而去找/../../../../../../ffffllllaaaagggg這個文件

-----------------------------------------------------------------我是分割線--------------------------------------------------------------

 

看完了覺得不錯就點個贊或者評論下吧,感謝!!!

如果本文哪裏有誤隨時可以提出了,收到會盡快更正的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章