這道題包含了文件包含特铝、代碼審計暑中、和反序列化。
1鲫剿、查看源碼:
發(fā)現(xiàn)這個file_get_contents函數(shù)讀取的是前端發(fā)送的數(shù)據(jù)鳄逾,正常來講這個函數(shù)是讀取文件的,還有就是它通過GET接收了一個file灵莲,然后把class.php包含進去了雕凹,然后我們試試文件包含,給user傳一個admin,才能使文件包含成立枚抵,然后試一下文件包含漏洞线欲,看看能不能爆出源碼。
這里簡單解釋下為什么這么構(gòu)造文件包含的慣用套路代碼是 ?參數(shù)=php://input&file=指定的php文件(xx.php)
而php://read=convert.base64-encode/resource=則是編碼設(shè)置汽摹,以base64顯示询筏,去掉了就不行
得到:
base64解碼得到:
同理去解碼class.php,得到:
有兩個if語句竖慧,先滿足第一個,讓$user的值為admin逆屡,然后再讓第二個if為False圾旨,就能成功的包含class.php了。
進行代碼分析魏蔗,知道flag有可能在f1a9.php中砍的,這個unserialize();這是個反序列化函數(shù),我們可以利用這個函數(shù)莺治,傳入?yún)?shù)導(dǎo)致調(diào)用index.php中的class類廓鞠,然后讀取f1a9.php中的內(nèi)容。
構(gòu)造payload:O:4:"Read":1:{s:4:"file";s:8:"f1a9.php";}
簡單解釋下這個payload谣旁,O:4:"Read"指4個字符的對象Read,s:8:"f1a9.php"指8個字符的字符串f1a9.php
將payload傳入?yún)?shù)
得到:
檢查源碼床佳,我的火狐右鍵檢查源碼無效,直接檢查器查看即可: