【代码审计】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重定向漏洞分析

0x01 代码分析

1、漏洞文件位置:/App/Home/Controller/GoController.class.php   第30-46行:

  1. public function index()
  2. {
  3. $url = I('url', 0, '');
  4. if (!empty($url)) {
  5. redirect($url);
  6. }
  7. }
  8. 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重定向漏洞分析

0x03 修复建议

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

1 referer的限制

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

2 加入有效性验证Token

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

最后

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

【代码审计】XYHCMS V3.5URL重定向漏洞分析

上一篇:Redis介绍以及安装(Linux)


下一篇:Ubuntu16.04下编译OpenCV2.4.13静态库(.a文件)