所謂代碼審計是一種以發(fā)現(xiàn)程序錯誤,安全漏洞和違反程序規(guī)范為目標的源代碼分析。在安全領域,為了發(fā)現(xiàn)安全問題,常通過黑盒測試、白盒測試方法來盡可能的發(fā)現(xiàn)業(yè)務程序中的安全問題,代碼審計就是白盒測試的常用方法,相較于黑盒測試,由于白盒測試能接觸到源代碼,可以更加詳細的理解業(yè)務程序邏輯,也能更全面的發(fā)現(xiàn)安全風險。接下來本系列文章將以Bluecms v1.6 作為php代碼審計案例為切入點,過程中結合常見源代碼掃描工具和動態(tài)調試方法,來詳細介紹php代碼審計的思路,相關源代碼網上也都有公開。
Php 5.6.9
在對一個真實cms進行審計的時候,先整體對網站的目錄結構大致做個全局分析,了解每個目錄的基本功能以及目錄入口文件index.php所在位置。對index.php的分析,個人認為主要是為了了解下面幾個問題。
4.數(shù)據(jù)庫的連接方式
根據(jù)index.php內容,大致可以看到,主要就是獲取數(shù)據(jù)庫數(shù)據(jù),并在首頁展現(xiàn),這個過程中沒有任何的交互判斷,只是個靜態(tài)展現(xiàn)。
到這里應該就可以知道這個系統(tǒng)前臺并沒有做統(tǒng)一入口再分發(fā),因此是一個多入口的系統(tǒng)。而多入口系統(tǒng),一般就會需要通過標準化的函數(shù)來對多個入口進行過濾檢查鑒權等。查看根目錄下的其他文件,基本都引用了同一個文件,即/include/common.inc.php文件,接下來我們來看一下common.inc.php文件
會話相關配置
外部數(shù)據(jù)過濾,如果沒有配置gpc,則通過addslashes函數(shù)進行過濾,但這里我們要注意無論是gpc還是addslashes,它都沒有對$_SERVER進行過濾,且無法對數(shù)字型的注入產生效果,這兩個點要注意,是可能存在漏洞的地方。
設置時區(qū)和獲取請求ip
配置數(shù)據(jù)庫連接,這里注意是使用mysql直接連接,針對數(shù)據(jù)庫連接類型,我們注意是否數(shù)據(jù)庫內使用gbk編碼,如果是,可能存在寬字節(jié)注入
而這里正好是gbk編碼方式,因此這是一個可能存在漏洞的點,要注意。
Smarty模版配置
用戶黑名單排查。注意這里雖然經過了黑名單排查,但其實即使是在黑名單中,后面的程序邏輯也是可以繼續(xù)走下去的。
用戶權限校驗,若不存在SESSION,則進行COOKIE校驗。
因此總的來看,這個入口檢查文件的主要功能包括有配置phpsession會話、使用gpc/addslashes進行外部數(shù)據(jù)初始化過濾、設置時區(qū)、過濾黑名單IP、初始化數(shù)據(jù)庫連接、Smarty渲染、用戶session及cookie的校驗。當然這只是前端普通用戶的流程。根據(jù)目錄,我們可以看到存在admin管理員后臺。
同理,我們也需要了解下admin管理員的index.php和入口文件。來把握住后臺的邏輯
Index.php基本是類似的,渲染首頁的頁面,同時通過admin/include/common.inc.php進行入口檢查
接下來看下admin/include/common.inc.php文件,其它方面都是和前臺一樣的,在鑒權這個地方,它主要對管理員身份進行檢查。即如果session為空,則檢查cookie,如果不為空,則更新session。
到這里我們基本上把bluecms的前后端的入口流程理清,其中涉及到用戶鑒權、數(shù)據(jù)庫連接、外部數(shù)據(jù)過濾、頁面渲染展示等。而且從流程看,目前發(fā)現(xiàn)外部數(shù)據(jù)過濾和數(shù)據(jù)庫連接處,存在理論上的安全風險。想要全面地進行代碼審計,這一步是必不可少的,切記。
以上是本章節(jié)的主要介紹內容,后續(xù)將繼續(xù)更新具體漏洞的審計方法,敬請期待。