0x01 前言
無意間發(fā)現(xiàn)一個代碼審計的以前文章,是審計一篇cms的文章,然后就想著還沒有認(rèn)真的審計過一次呢,就跟著這篇文章的路子走一次吧,來開啟我代碼審計的篇章。
0x02 審計之旅
首先在站長之家下載了熊海CMS v1.0的源代碼,本地搭建好環(huán)境之后,將項目拖到Seay代碼審計系統(tǒng)中,來一波自動審計~

咳咳,經(jīng)然后34個漏洞發(fā)現(xiàn)。。。好吧,畢竟小站源碼,也很正常。
然后就開始一個一個查看了,看看是否有誤報和漏報。
0x03 文件包含

首先,index.php中的代碼如下,明顯就是一個文件包含漏洞嘛,這里參數(shù)r沒有任何過濾直接放到include()函數(shù)中了,但是這里include是在files目錄下的,所以需要../進行目錄改變。我們可以在根目錄下新建一個shell.php,寫入<?php phpinfo();?>,然后嘗試包含一下

果然成功了!嘻嘻
0x04 越權(quán)漏洞
看了一下其他的漏洞,發(fā)現(xiàn)除了admin沒看,其他的都是誤報,但是現(xiàn)在我們還沒有辦法得到管理員的賬號和密碼,因此admin的先不看,看一下inc目錄下的文件。inc目錄下的都是配置文件,很重要,要每一個文件都仔細(xì)查看。
在看到checklogin.php的時候,發(fā)現(xiàn)了一個越權(quán)漏洞。

這里是從cookie中判斷時候是管理員的機制,如果cookie中的user為空,就為跳轉(zhuǎn)到?r=login頁面,這個頁面是后臺登陸頁面

那么如果我們抓包后將user的值修改成不為空會怎么樣呢?
這里用wzlist.php試一下
http://127.0.0.1/admin/?r=wzlist

然后就發(fā)現(xiàn)進入了后臺。。。

并且只要保證每次cookie中user參數(shù)都有值就可以訪問后臺的所有內(nèi)容。
之后再看其他的配置文件就看不出來什么了....那么記下來就是看一下admin目錄下的文件吧。
0x05 SQL注入1
首先肯定要看登陸頁面了,如果能夠爆出用戶名和密碼就完美了。
查看login.php,入眼的就是一段令人激動的代碼

這里user和password是直接獲取POST傳來的參數(shù),并沒有進行任何過濾,很容易想到萬能密碼的使用,但是繼續(xù)看代碼我們發(fā)現(xiàn),這里是先進行user的查詢,如果user在數(shù)據(jù)庫中存在,那么就進行password的比較,是將我們輸入的password進行md5哈希一下,然后與數(shù)據(jù)庫中的進行比對,所以說萬能密碼在這里是沒有用的,但是我們卻可以用報錯注入得到用戶名和密碼。
user=123' or extractvalue(1,concat((select concat(0x7e,password,0x7e) from manage)))#&password=
或者
user=123' or updatexml(1,concat((select concat(0x7e,password,0x7e) from manage)),0)#&password=
但是這里有一點比較坑的是,這里注出來的password最多只有27位,但是數(shù)據(jù)庫存的是password的MD5值,有32位,所以說得到的md5是不對的,需要進行兩次注入才能得到完整的密碼,以extractvalue()函數(shù)為例,payload需要這樣寫
user=123' or extractvalue(1,concat((select concat(0x7e,password) from manage)))#&password=
user=123' or extractvalue(1,concat((select concat(password,0x7e) from manage)))#&password=
兩次自己拼接一下就得到了完整的password的md5值了,拿去解密一下就好了~


0x06 SQL注入2
進入后臺之后,可以看一下之前自動審計報的后臺的SQL注入漏洞,拿newlink.php為例

這里的變量都是直接POST傳進來并且沒做任何過濾,那么就存在了SQL注入問題。
利用之前的報錯注入驗證一下

得到結(jié)果

驗證成功。
0x07 CSRF漏洞
這里的內(nèi)容管理中有一個刪除文章的功能,點擊后抓包得到url
http://localhost/code_audit/xhcms/admin/?r=wzlist&delete=16
退出管理員賬號,根據(jù)之前的越權(quán)漏洞分析,這里應(yīng)該會轉(zhuǎn)跳到login的界面,試一下,果然如此。

然后重新登陸管理員后點擊該url,真的刪除了該文章

驗證成功。