SINE安全公司在對phpcms2008網站代碼進行安全檢測與審計的時候發現該phpcms存在遠端代碼寫入緩存檔案的一個SQL注入漏洞,該phpcms漏洞危害較大,可以導緻網站被黑,以及伺服器遭受黑客的攻擊,關于這次發現的phpcms漏洞細節以及如何利用提權我們來詳細剖析。
phpcms2008是國内深受站長建站使用的一個内容CMS管理系統,phpcms的開源話,免費,動态,靜态生成,API接口,模闆免費下載下傳,自定義内容設計,可提供程式的二次開發與設計,大大友善了整個網際網路站長的建站使用與優化。整個phpcms采用PHP+Mysql資料庫作為架構,穩定,并發高,承載量大。
phpcms2008漏洞詳情
在對代碼的安全檢測與審計當中,發現type.php檔案代碼存在漏洞,代碼如下:
<?php
require dirname(__FILE__).'/include/common.inc.php';
...
if(empty($template)) $template = 'type';
...
include template('phpcms', $template);
...
?>

以上代碼if(empty($template)) 在進行變量定義的時候可以跟進來看下,通過extract進行變量的聲明與注冊,如果目前的注冊已經有了,就不會覆寫目前已有的聲明,導緻可以變量僞造與注入。
我們再來跟蹤該代碼找到template函數,看到調用到了include目錄下的global.func.php檔案,該代碼裡的function template會對傳遞過來的定義值進行判斷,預設TPL_REFRESH是為1的參數值,也就是說自動開啟了模闆緩存功能。當需要更新緩存的時候就會先判斷有沒有變量注冊,如果有就會進行更新緩存。
該漏洞利用的就是緩存的更新,将網站木馬代碼插入到緩存檔案當中去。可以看出$template沒有進行過濾就可以直接寫入到緩存模闆中,我們可以指定TAG内容,post送出過去,如下代碼:
我們在自己的本地電腦搭建了一套phpcms2008系統的環境,進行漏洞測試,送出post參數過去,我們看下本地的漏洞結果,可以執行phpinfo代碼。也可以插入一句話木馬後門進行上傳webshell。
phpcms漏洞修複與安全建議
目前phpcms官方已經修複該漏洞,請各大網站營運者盡快更新phpcms2008到最新版本,有些二次開發的網站可以針對緩存目錄進行安全限制,禁止PHP腳本檔案的執行,data,cache_template目錄進行安全加強部署,如果反複性質的被篡改或被黑建議找專業的網站安全公司來處了解決。