程式碼審計之Empire CMS v7.5個人空間偽造任意使用者留言
*本文作者:q601333824,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。
概述
帝國CMS簡稱Empire CMS,當前的最新版本為7.5,個人空間可以匿名留言和登入留言,由於許可權控制不當,可以偽造任意使用者登入留言, 自己無聊挖著玩的東西,喜歡的可以自己復現玩玩。
相關環境
原始碼資訊:EmpireCMS_7.5_SC_UTF8
漏洞型別:越權
下載地址:http://www.phome.net/download/
漏洞檔案:/e/member/mspace/gbookfun.php
漏洞分析
1. 檢視程式碼檔案,插入留言的時候,從getcvar(‘mluserid’)獲取uid,然後當$uid存在時候再從getcvar(‘mlusername’)獲取使用者名稱,最後再進行插入留言,如果uid不存在的話,就設定uid=0,就是匿名留言了。
2. 最後再檢視getcvar函式的定義,引數的來源是從$_COOKIE裡面取出來了,字首+$_COOKIE的值。
3. 看到這裡有的人就可以想到利用方法了,這個時候只要構造mluserid和mlusername引數就可以偽造任意使用者登入留言了。
利用方法
1. 先獲取$_COOKIE引數需要的字首,開啟瀏覽器就可以知道$_COOKIE的字首是啥玩意了,我本地的$_COOKIE的字首是ugbve。
2. 然後在控制檯執行document.cookie=’ugbvemluserid=1;path=/’和document.cookie=’ugbvemlusername=admin;path=/’,指定COOKIE為根目錄,因為留言頁面和提交介面不在同一個目錄,如果不設定根目錄,介面獲取不到COOKIE的(不用這個方法也可以自己抓包修改COOKIE就行,我懶得開啟burpsuite,所以直接在控制檯運行了)。
6. 這個時候在別人空間留言,都會以登入狀態的admin,進行留言了,測試效果,剛才的留言是以admin的身份進行的留言,並且可以點選檢視對方的空間。
最後總結
1. 其實就是判斷是不是匿名留言的時候,沒有判斷使用者是否是真的登入狀態而進行留言。
2. 漏洞挖挖總還是有的。
修復建議
1. 從_COOKIE取出使用者uid的時候,這個位置少了判斷使用者是否在登入狀態下留言,想修復的同志,可以在這個位置加上登入判斷。
*本文作者:q601333824,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載。