1. 程式人生 > >【程式碼審計】XYHCMS V3.5URL重定向漏洞分析

【程式碼審計】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行:

  1. public function index()  
  2. {  
  3.   
  4.     $url = I('url', 0, '');  
  5.     if (!empty($url)) {  
  6.         redirect($url);  
  7.     }  
  8.   
  9. }  
  10. 10.   

11. public function link()  

12. {  

  1. 13.   
  2. 14.     $url = I('url', 0, '');  
  3. 15.     if (!empty($url)) {  
  4. 16.         $url = base64_decode($url);  
  5. 17.         redirect($url);  
  6. 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--,每週原創一篇技術乾貨。