記錄一次對某CMS漏洞挖掘
前言
本文想記錄一下學習過程,給正準備入手或剛剛入手的師傅們提供一點簡單的學習資料,本文將全程脫敏,只記錄審計過程。另外文明挖洞,不然就親人兩行淚了,接下來讓我們開始挖掘之旅吧。
SQL注入漏洞
整個代碼剛拿到手,我們應該思考一下哪里容易出現漏洞,出現什么漏洞。
一般來說CMS,肯定要涉及到數據存儲,就會涉及到SQL注入,而在所有漏洞中SQL注入又是最簡單的,我們又是白盒審計可以看到源碼,相對于黑盒就要簡單的一些。
所以對于這個CMS挖掘我首選SQL注入,再去找其他的漏洞。
先看一下項目結構。

結構很簡單吼,也很直觀(相比于TP等框架審計,這樣的就很簡單很適合新手入門),對于SQL漏洞,我們可以采用全局搜索的方法來搜索SQL語句關鍵詞,例如:
select update delete 等
這樣可以讓我們直觀的找到注入點,再進行payload構造,我們先從前臺入手一下看看。

這里找到了一個很明顯的注入點,可以看到id參數可控,而且沒有進行任何過濾。
我們嘗試一下看看能否注入。

可以看到這里成功延遲了5s,接下來用sqlmap驗證一下(在SQL注入漏洞挖掘的時候,sqlmap可以幫助我們測試會省很多時間,有的時候不知道怎么能構造payload,可以嘗試一下sqlmap)。

可以看到成功爆出來了當前用戶名稱 ,這個漏洞存在,前臺SQL注入漏洞+1。
接下來可以利用這種方法嘗試進一步挖掘其他的SQL注入漏洞,這里再后臺注入找一個作為例子,也是可以嘗試進行全局搜索SQL語句來確定注入點。
在后在某個地方,定位到了如下注入點:

如圖,該處id變量依舊可控,并且沒有做任何過濾,我們也嘗試去構造一下注入。
payload如下:
id= 1 and (extractvalue(1,concat(0x5c,(select user()))))//報錯注入 從目標xml種返回包含所查詢值得字符串

可以看到,也成功爆出來了用戶名,這里的后臺注入也存在,后臺注入+1,此時我們已經收獲了兩個SQL注入的漏洞,其他的SQL注入也是同樣方式,這里就不過多贅述了。三
文件上傳漏洞
提到了后臺,后臺有一些進行文件上傳的功能,這里如果沒有進行很好的過濾和限制就會造成任意文件上傳,壞人們會利用到這一點來上傳webshell,從而達成破壞。

這里,我們寫一個一句話木馬,將其后綴改成php,然后抓個包看一下。

這里有很多參數,我們嘗試直接把文件后綴改一下試試。

這里提示錯誤,表示不行,我們定位到文件上傳的代碼邏輯看一下。

這里他很奇怪,雖然這是一個老CMS了,但是利用這種方法判斷文件類別的姿勢我還是第一次看,邏輯就是獲取到類別,然后case到相應的過濾中,再用后綴和白名單做比對,不在白名單中就報錯,在就上傳。
但是這里就有個大問題,如果我們抓包修改ftype參數(這里我們可控),改成一個不在switch函數中的值,就正好跳過了他的檢測,直接上傳,我們來試一下。

然后發包過去試試。

他就成功上傳了......并且我們知道路徑和文件名。
我們試一試能不能利用。

竟然可以利用QAQ,這個可太離譜了。
任意文件刪除漏洞
筆者在繼續尋找漏洞的時候,發現了這里有這么一段代碼:

這里url可控,并且任何限制沒有,可以造成任意文件刪除,這里就不進行演示了。
總結
因為這是幾年前的CMS,所以可能洞有很多,但是正適合新手入門,體會一下怎么審計出代碼中的漏洞,在審計的過程中,首先你的目標要準確,因為是白盒,這樣就能很直觀的看到哪里出了問題,當然你在審計挖掘的時候,也要找準目標,自己心里要清楚哪里會出問題,直觀面對著waf的時候就會很容易想到bypass的方法。
必要的時候可以使用動態調試,一步一步的查看變量的改變和流向,這樣會更直觀觀察這個漏洞觸發的過程,也容易修改自己的payload,從而成功挖掘出漏洞。
總結以下幾點:
1、拿到源碼,要先想一想那里會出現什么漏洞;
2、要熟悉這個CMS用的開發框架的整體運行機制,方便我們定位漏洞點;
3、多嘗試,手動測不出來可以借助工具來輔助審計;
4、面對一個waf要從不同的角度看,以便于bypass。
總的來說,想要提高技術要多看文章,多動手復現,也要多嘗試自己動手挖洞,從成功和失敗中總結經驗以便于下次審計。
最后,要做一個遵紀守法的安全研究員,文明挖洞,千萬不要挑戰法律。