帝國CMS(EmpireCMS) v7.5 后台XSS漏洞分析
一、漏洞描述
該漏洞是由於代碼只使用htmlspecialchars進行實體編碼過濾,而且參數用的是ENT_QUOTES(編碼雙引號和單引號),還有addslashes函數處理,但是沒有對任何惡意關鍵字進行過濾,從而導致攻擊者使用別的關鍵字進行攻擊。
二、漏洞復現
1、漏洞出現的頁面在/e/admin/openpage/AdminPage.php,瀏覽漏洞頁面代碼,發現使用hRepPostStr函數對leftfile、title、mainfile參數進行處理
2、跟進hRepPostStr函數,發現htmlspecialchars進行實體編碼過濾,而且參數用的是ENT_QUOTES(編碼雙引號和單引號)
3、繼續瀏覽代碼,發現使用CkPostStrChar函數對參數進行處理
4、跟進CkPostStrChar函數,處理編碼字符
5、繼續瀏覽代碼,發現又使用了AddAddsData函數對參數進行處理
6、跟進AddAddsData函數,分析代碼:如果沒有開啟magic_quotes_gpc函數,就使用addslashes函數對參數中的特殊字符進行轉義處理
7、繼續瀏覽代碼,發現在網頁輸出時, $leftfile、$mainfile參數的輸出位置是iframe標簽的src里面,由於代碼沒有對別的惡意字符進行處理,此時可以構造javascript:alert(/xss/),iframe標簽可以執行javascript代碼,此時就會觸發XSS代碼。
8、瀏覽器訪問構造的payload,提示非法來源
Payload: http://192.168.10.171/empirecms/e/admin/openpage/AdminPage.php?mainfile=javascript:alert(/xss/)
9、此時發現別的頁面url地址中都會存在hash參數,例如ehash_f9Tj7=ZMhwowHjtSwqyRuiOylK,這個參數是隨機生成的,如果缺少這個參數,會提示非法來源
10、再次構造payload,瀏覽器訪問,成功觸發XSS
Payload: http://192.168.10.171/empirecms/e/admin/openpage/AdminPage.php?ehash_f9Tj7=ZMhwowHjtSwqyRuiOylK&mainfile=javascript:alert(/xss/)
11、通過XSS漏洞獲取cookie
http://192.168.10.171/empirecms/e/admin/openpage/AdminPage.php?ehash_f9Tj7=ZMhwowHjtSwqyRuiOylK&mainfile=javascript:alert(document.cookie)
-----------------------------------------------------------------------------
參考: https://www.freebuf.com/vuls/176313.html