【代码审计】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

测试网站首页:

 【代码审计】XYHCMS V3.5URL重定向漏洞分析_第1张图片

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=

 【代码审计】XYHCMS V3.5URL重定向漏洞分析_第2张图片

 

0x03 修复建议

理论上讲,url重定向属于CSRF的一种,我们需要对传入的URL做有效性的认证,保证该URL来自于正确的地方,限制的方式同防止csrf一样可以包括:

1 referer的限制

如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接

2 加入有效性验证Token

我们保证所有生成的链接都是来自于我们可信域的,通过在生成的链接里加入用户不可控的Token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用,但是如果功能本身要求比较开放,可能导致有一定的限制。

 

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】XYHCMS V3.5URL重定向漏洞分析_第3张图片 

你可能感兴趣的:(【代码审计】XYHCMS V3.5URL重定向漏洞分析)