【程式碼審計】XYHCMS V3.5URL重定向漏洞分析
0x00 環境準備
XYHCMS官網:http://www.xyhcms.com/
網站原始碼版本:XYHCMS V3.5(2017-12-04 更新)
程式原始碼下載:http://www.xyhcms.com/Show/download/id/2/at/0.html
測試網站首頁:
0x01 程式碼分析
1、漏洞檔案位置:/App/Home/Controller/GoController.class.php 第30-46行:
- public function index()
- {
- $url = I('url', 0, '');
- if (!empty($url)) {
- redirect($url);
- }
- }
- 10.
11. public function link()
12. {
- 13.
- 14. $url = I('url', 0, '');
- 15. if (!empty($url)) {
- 16. $url = base64_decode($url);
- 17. redirect($url);
- 18. }
這段函式中對提交的url引數進行處理,未經任何驗證,只是簡單的判斷url引數是否為空,然後傳到目標函式redirect中執行,導致程式在實現上存在URL重定向漏洞,遠端攻擊者可通過特製的URL利用該漏洞將使用者重定向到任意網站,實施釣魚攻擊。
0x02 漏洞利用
這個漏洞不需要任何許可權,只要構造連結,傳送給目標使用者即可。
漏洞利用方式一:
通過這種方式,將把使用者引導到百度首頁
http://127.0.0.1/index.php?s=/Home/go/index/url/http:\\www.baidu.com
漏洞利用方式二:
將http://www.baidu.com進行Base64編碼,這種攻擊方式更隱蔽,使用者不易發現,構造連結如下:
http://127.0.0.1/index.php?s=/Home/go/link/url/aHR0cDovL3d3dy5iYWlkdS5jb20=
0x03 修復建議
理論上講,url重定向屬於CSRF的一種,我們需要對傳入的URL做有效性的認證,保證該URL來自於正確的地方,限制的方式同防止csrf一樣可以包括:
1 referer的限制
如果確定傳遞URL引數進入的來源,我們可以通過該方式實現安全限制,保證該URL的有效性,避免惡意使用者自己生成跳轉連結
2 加入有效性驗證Token
我們保證所有生成的連結都是來自於我們可信域的,通過在生成的連結里加入使用者不可控的Token對生成的連結進行校驗,可以避免使用者生成自己的惡意連結從而被利用,但是如果功能本身要求比較開放,可能導致有一定的限制。
最後
歡迎關注個人微信公眾號:Bypass--,每週原創一篇技術乾貨。