ECShop 4.0反射型XSS漏洞分析
前言: Ecshop是國內的一款開源的電商框架,在國內應用較為廣泛,當前新版本為4.0.0,最近對其代碼進行了簡單的分析,發現可以繞過其filter觸發XSS。
一、漏洞利用方式
發送GET請求包如下:
- 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
在用戶登入界面的處理代碼中,首先變量$action賦值為login進入主體代碼,若變量$back_act為空并且請求包中存在REFERER字段,則將REFERER字段中的內容賦值給變量$back_act,這是導致該漏洞的直接原因,對$back_act變量賦值過后傳入assign函數進行處理,其中$smarty是模版類cls_template的實例化:/includes/init.php:170行
所以查看assign函數時跟進到模版類cls_template中查看:/includes/ cls_template.php:70行
調用fetch函數進行user_passport.dwt文件的頁面顯示,也就是顯示用戶登入頁面,其中在user_passport.dwt文件中:
$back_act值被賦值給input標簽中的value,所以我們控制了$back_act變量值便可以在html頁面中插入js代碼。
四、繞過全局Waf觸發XSS
Ecshop中定義了全局安全過濾規則,查看代碼:/includes/safety.php
這個過濾規則比較簡單粗暴,利用’on[a-zA-Z]{3,15}’ 過濾了所有的on開頭js事件,所以用事件觸發是較為困難了,并且
漏洞繞過觸發的方式不僅有的。
漏洞挖掘主要在于一定的技術基礎,充分的經驗積累以及一些運氣所在,挖掘的漏洞不在大小,每一漏洞都是一次成長,新手挖掘文章,希望大牛們批評指正。