0x00 环境准备

711CMS官网: https://www.711cms.com/

网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20)

程序源码下载:https://www.711cms.com/versions/711cms_V1.0.5.zip

测试网站首页:

0x01 代码分析

1、首先我们来看一下全局防护代码: /system/core/Security.php,代码太长,摘录部分函数,第352-387行中:

  1. public function xss_clean($str, $is_image = FALSE)
  2. {
  3. // Is the string an array?
  4. if (is_array($str))
  5. {
  6. foreach ($str as $key => &$value)
  7. {
  8. $str[$key] = $this->xss_clean($value);
  9. }
  10. 10.
  11. 11.         return $str;
  12. 12.     }
  13. 13.
  14. 14.     // Remove Invisible Characters
  15. 15.     $str = remove_invisible_characters($str);
  16. 16.
  17. 17.     /*
  18. 18.      * URL Decode
  19. 19.      *
  20. 20.      * Just in case stuff like this is submitted:
  21. 21.      *
  22. 22.      * <a href="http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D">Google</a>
  23. 23.      *
  24. 24.      * Note: Use rawurldecode() so it does not remove plus signs
  25. 25.      */
  26. 26.     if (stripos($str, '%') !== false)
  27. 27.     {
  28. 28.         do
  29. 29.         {
  30. 30.             $oldstr = $str;
  31. 31.             $str = rawurldecode($str);
  32. 32.             $str = preg_replace_callback('#%(?:\s*[0-9a-f]){2,}#i', array($this, '_urldecodespaces'), $str);
  33. 33.         }
  34. 34.         while ($oldstr !== $str);
  35. 35.         unset($oldstr);
  36. 36.     }

这段函数对XSS攻击进行过滤,比如<script>将被转换为[removed],接着看:

2、漏洞文件位置:/cms/controllers/Index.php 第77-88行:

  1. public function search($keywords='')
  2. {
  3. $keywords = urldecode($keywords);
  4. if(!$keywords)
  5. $keywords = $this->input->get('keywords', true);
  6. if (!$keywords) {
  7. redirect('/');
  8. }
  9. $this->template->assign('keywords', $keywords);
  10. 10.     $this->template->assign('show_sort_id', 1);
  11. 11.     $this->template->display('search.php');

12. }

这段search函数中,对接收到的参数进行url解码,然后带入数据库中执行,keyword在输入输出过程中只有全局防护代码在防护,全局防护代码过滤不严谨,存在被绕过的情况,导致程序在实现上存在反射型XSS跨站脚本漏洞,允许攻击者可在页面中插入恶意js代码,获得用户cookie等信息,导致用户被劫持。

0x02 漏洞利用

1、网站首页搜索框---XSS Payload:

111"onclick="\u0061\u006C\u0065\u0072\u0074(/xss/)

0x03 修复建议

1、全局防护是有必要的,但是并不是万能的,过滤能更严谨些;

2、建议对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE处理。 PHP应用:可以使用htmlspecialchars对用户参数进行编码 。

安全代码示例:

  1. <?php
  2. $aa=$_GET['dd'];
  3. echo htmlspecialchars($aa)."123";
  4. ?>

最后

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

【代码审计】711cms_V1.0.5前台XSS跨站脚本漏洞分析的更多相关文章

  1. 【代码审计】EasySNS_V1.6 前台XSS跨站脚本漏洞分析

    0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/ind ...

  2. 【代码审计】YUNUCMS_v1.0.6 前台反射型XSS跨站脚本漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...

  3. 【代码审计】LaySNS_v2.2.0 前台XSS跨站脚本漏洞

      0x00 环境准备 LaySNS官网:http://www.laysns.com/ 网站源码版本:LaySNS_v2.2.0 程序源码下载:https://pan.lanzou.com/i0l38 ...

  4. 【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

  5. 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析

      0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...

  6. thinkphp5.0.22远程代码执行漏洞分析及复现

    虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...

  7. CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析

    漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...

  8. 渗透测试学习 十七、 XSS跨站脚本漏洞详解

      一般用途:拿cookie进后台,将后台地址一起发送过来 特点:挖掘困难,绕过困难  大纲: XSS漏洞基础讲解 XSS漏洞发掘与绕过 XSS漏洞的综合利用 XSS漏洞基础讲解 XSS介绍: 跨站脚 ...

  9. 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...

随机推荐

  1. MinGW下编译openssl, json-c

    目的:在windows环境下,编译开源库openssl 环境:windows 10 ,Mingw及自带msys工具,openssl-1.0.2j 工具主要使用MinGW(含msys1.0), IDE选 ...

  2. matlab中的常用的函数——在稀疏表示中学习到的

    1, 矩阵的逆: inv()函数: 2. 矩阵的伪逆: pinv()函数: 3. 矩阵的克罗内克尔积: kron()函数: 4. 得到一个dct变换的字典: dctmtx()函数, 它可以得到一个 n ...

  3. FTP服务器的配置与实现

    一.准备工作 实验目的:完成FTP服务器的配置,并能熟练操作. 环境搭建: 虚拟机  vmware workstation windows2003镜像文件 Serv-U 主机 二.步骤 1,在虚拟机中 ...

  4. Android开发之旅(二)服务生命周期和广播接收者生命周期

    引言 应用程序组件有一个生命周期——一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  5. e805. 监听JProgressBar的数值变化

    Whenever the value of a progress bar is changed, a change event is fired. In fact, the event is also ...

  6. TPshop标签

    很多cms 中有很多 标签, 商品标签 文章标签  列表标签  几十个标签, 让开发者头疼, 难记,  TPshop开发者考虑到这点, 用了一个万能标签, 开发者非常方便实用 TPshop万能标签只要 ...

  7. windows版mysql配置--my.ini

    完整配置如下: # power by phpStudy 2014 www.phpStudy.net 官网下载最新版 [client] port=3306 [mysql] [mysqld] port=3 ...

  8. 浅谈你感兴趣的 CLR GC 机制底层

    本文内容是学习CLR.via C#的21章后个人整理,有不足之处欢迎指导. 昨天是1024,coder的节日,我为自己coder之路定下一句准则--保持学习,保持自信,保持谦逊,保持分享,越走越远. ...

  9. GBT算法在拖动滑块辨别人还是机器中的应用

    1.数据源格式:(x,y,t),第一个值x是x坐标范围是1-250的整数,y是1-10的整数,t是滑块从上一个坐标到下一个坐标的时间差,ok是判断是人操作的,Fail是判断是机器操作的,数据看的出,同 ...

  10. GridView如何将分页数据全部导出为EXCEL?

    GRIDVIEW分页状态下将全部数据导出 protected void Button2_Click(object sender, EventArgs e)//按button2将gridview将数据导 ...