天天看點

iCMS前台存儲型XSS漏洞

該漏洞CNVD-ID: CNVD-2019-10126

漏洞送出CNVD後,待CNVD公示才發出本文。

測試環境:

程式版本:v7.0.14

Windows + firefox + burpsuite + apache2 + PHP5.6.27(phpStudy內建環境)

iCMS官網:https://www.icmsdev.com/

一、漏洞分析

1、新使用者注冊時,輸入注冊郵箱,系統會自動查找資料庫看是否已經注冊。攔截檢查的HTTP包。

BurpSuite裡替換URI為:

/public/api.php?app=user&do=check&name=1&value=1&callback=confirm(document.cookie)&script=1

iCMS有第三方阿裡雲的全局過濾插件,過濾了alert等關鍵字和html标簽。這裡使用confirm替代alert可以繞過。

iCMS前台存儲型XSS漏洞
iCMS前台存儲型XSS漏洞

2、進入/app/user/user.app.php子產品的function API_check()函數,該函數最後會調用/iPHP/core/iUI.class.php子產品中的function json()函數。在json()函數中, G E T 獲 取 c a l l b a c k 參 數 , 使 用 h t m l s p e c i a l c h a r s 過 濾 , 但 這 不 影 響 傳 入 的 p a y l o a d 。 _GET擷取callback參數,使用htmlspecialchars過濾,但這不影響傳入的payload。 G​ET擷取callback參數,使用htmlspecialchars過濾,但這不影響傳入的payload。_GET[‘script’]為真時輸出script标簽包含的資料,payload插入裡邊。

但這裡是一個反彈型XSS,後邊還需轉換成存儲型XSS。

iCMS前台存儲型XSS漏洞
iCMS前台存儲型XSS漏洞

二、轉換成存儲型XSS漏洞

前台注冊一個使用者,發表一篇文章,将包含payload的URL插入裡邊。

發表文章前需要在背景添加一個文章欄目,這是任何一個使用該CMS的使用者會需要做的事情。

iCMS前台存儲型XSS漏洞
iCMS前台存儲型XSS漏洞

添加欄目後需要重新整理一下才能在前台顯示欄目。

iCMS前台存儲型XSS漏洞

前台使用者發表一篇文章。

iCMS前台存儲型XSS漏洞
iCMS前台存儲型XSS漏洞

在文章正文文字裡添加超連結,或者插入一張圖檔插入超連結也可以。

iCMS前台存儲型XSS漏洞

該CMS使用者發表文章後需要管理者背景稽核。Payload隐藏在超連結裡邊,一般是不會被發現的。

iCMS前台存儲型XSS漏洞
iCMS前台存儲型XSS漏洞
iCMS前台存儲型XSS漏洞
iCMS前台存儲型XSS漏洞

最後,該漏洞成為了一個存儲型XSS漏洞;任何檢視該文章并點的訪客都會觸發該漏洞。

繼續閱讀