ECShop 4.0反射型XSS漏洞分析
前言: Ecshop是國(guó)內(nèi)的一款開(kāi)源的電商框架,在國(guó)內(nèi)應(yīng)用較為廣泛,當(dāng)前新版本為4.0.0,最近對(duì)其代碼進(jìn)行了簡(jiǎn)單的分析,發(fā)現(xiàn)可以繞過(guò)其filter觸發(fā)XSS。
一、漏洞利用方式
發(fā)送GET請(qǐng)求包如下:
- GET/CMS/ECShop_V4.0./user.php HTTP/1.1Referer:https://127.0.0.1" /><a href=javascript:alert('Cyc1e_test')><imgsrcimgsrc="xxxxxUser-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko)Chrome/41.0.2228.0 Safari/537.21Cookie:ECS_ID=17b608d2a679cf2c7e8611581478e6929dbfb34b;ECS[visit_times]=2Connection:keep-aliveAccept: */*Accept-Encoding:gzip,deflateHost: 127.0.0.1
- Referer:https://127.0.0.1" /><ahrefahref=javascript:alert('Cyc1e_test')><imgsrcimgsrc="xxxxx
實(shí)現(xiàn)繞過(guò)過(guò)濾規(guī)則,觸發(fā)XSS漏洞的效果。
在用戶登入界面的處理代碼中,首先變量$action賦值為login進(jìn)入主體代碼,若變量$back_act為空并且請(qǐng)求包中存在REFERER字段,則將REFERER字段中的內(nèi)容賦值給變量$back_act,這是導(dǎo)致該漏洞的直接原因,對(duì)$back_act變量賦值過(guò)后傳入assign函數(shù)進(jìn)行處理,其中$smarty是模版類cls_template的實(shí)例化:/includes/init.php:170行
所以查看assign函數(shù)時(shí)跟進(jìn)到模版類cls_template中查看:/includes/ cls_template.php:70行
調(diào)用fetch函數(shù)進(jìn)行user_passport.dwt文件的頁(yè)面顯示,也就是顯示用戶登入頁(yè)面,其中在user_passport.dwt文件中:
$back_act值被賦值給input標(biāo)簽中的value,所以我們控制了$back_act變量值便可以在html頁(yè)面中插入js代碼。
四、繞過(guò)全局Waf觸發(fā)XSS
Ecshop中定義了全局安全過(guò)濾規(guī)則,查看代碼:/includes/safety.php
這個(gè)過(guò)濾規(guī)則比較簡(jiǎn)單粗暴,利用’on[a-zA-Z]{3,15}’ 過(guò)濾了所有的on開(kāi)頭js事件,所以用事件觸發(fā)是較為困難了,并且
漏洞繞過(guò)觸發(fā)的方式不僅有的。