【代码审计】711cms_V1.0.5前台XSS跨站脚本漏洞分析
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行中:
- public function xss_clean($str, $is_image = FALSE)
- {
- // Is the string an array?
- if (is_array($str))
- {
- foreach ($str as $key => &$value)
- {
- $str[$key] = $this->xss_clean($value);
- }
- 10.
- 11. return $str;
- 12. }
- 13.
- 14. // Remove Invisible Characters
- 15. $str = remove_invisible_characters($str);
- 16.
- 17. /*
- 18. * URL Decode
- 19. *
- 20. * Just in case stuff like this is submitted:
- 21. *
- 22. * <a href="http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D">Google</a>
- 23. *
- 24. * Note: Use rawurldecode() so it does not remove plus signs
- 25. */
- 26. if (stripos($str, '%') !== false)
- 27. {
- 28. do
- 29. {
- 30. $oldstr = $str;
- 31. $str = rawurldecode($str);
- 32. $str = preg_replace_callback('#%(?:\s*[0-9a-f]){2,}#i', array($this, '_urldecodespaces'), $str);
- 33. }
- 34. while ($oldstr !== $str);
- 35. unset($oldstr);
- 36. }
这段函数对XSS攻击进行过滤,比如<script>将被转换为[removed],接着看:
2、漏洞文件位置:/cms/controllers/Index.php 第77-88行:
- public function search($keywords='')
- {
- $keywords = urldecode($keywords);
- if(!$keywords)
- $keywords = $this->input->get('keywords', true);
- if (!$keywords) {
- redirect('/');
- }
- $this->template->assign('keywords', $keywords);
- 10. $this->template->assign('show_sort_id', 1);
- 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对用户参数进行编码 。
安全代码示例:
- <?php
- $aa=$_GET['dd'];
- echo htmlspecialchars($aa)."123";
- ?>
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

【代码审计】711cms_V1.0.5前台XSS跨站脚本漏洞分析的更多相关文章
- 【代码审计】EasySNS_V1.6 前台XSS跨站脚本漏洞分析
0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/ind ...
- 【代码审计】YUNUCMS_v1.0.6 前台反射型XSS跨站脚本漏洞分析
0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...
- 【代码审计】LaySNS_v2.2.0 前台XSS跨站脚本漏洞
0x00 环境准备 LaySNS官网:http://www.laysns.com/ 网站源码版本:LaySNS_v2.2.0 程序源码下载:https://pan.lanzou.com/i0l38 ...
- 【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析
0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...
- 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析
0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...
- thinkphp5.0.22远程代码执行漏洞分析及复现
虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...
- CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析
漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...
- 渗透测试学习 十七、 XSS跨站脚本漏洞详解
一般用途:拿cookie进后台,将后台地址一起发送过来 特点:挖掘困难,绕过困难 大纲: XSS漏洞基础讲解 XSS漏洞发掘与绕过 XSS漏洞的综合利用 XSS漏洞基础讲解 XSS介绍: 跨站脚 ...
- 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析
0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...
随机推荐
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- label文字居中
height: height,//"20px" "line-height": height, autosize:true, &qu ...
- Java调用SQL Server存储过程
1.调用普通存储过程(1)创建存储过程CREATE Procedure [dbo].[GetContactListByName] /*根据联系人姓名获取联系人信息*/@Name nvarchar(5 ...
- Android 扩大view点击范围
Android4.0设计规定的有效可触摸的UI元素标准是48dp,转化为一个物理尺寸约为9毫米.7~10毫米,这是一个用户手指能准确并且舒适触摸的区域. 如下图所示,你的UI元素可能小于48dp,图标 ...
- linux之sshfs
1.挂载 sshfs -p shiyu@ml.cs.tsinghua.edu.cn:/mfs/shiyu/ ~/mfs 2.卸载 fusermount -u ~/mfs
- 【3】JVM-OutOfMemory异常重现
JVM中常见的OOM,那么如何通过自己编写代码产生这些OOM异常呢?通过写代码重现异常,是为了避免在工作中写出有OOM BUG的代码.之前虽然看过相关文章,但是没自己写过这些代码,这次在编写的实际过程 ...
- SpringMVC系列(十)<mvc:default-servlet-handler/>(处理静态资源)和<mvc:annotation-driven />
一.<mvc:default-servlet-handler/>处理静态资源 若将 DispatcherServlet 请求映射配置为 /,则 Spring MVC 将捕获WEB 容器的所 ...
- Tomcat 部署一工程时Deploy Location 为什么 是 INVALID
1.eclipse项目: 在项目的.settings目录下,找到org.eclipse.wst.common.component文件: <?xml version="1.0" ...
- (弃) Keystone CLI_选项与子命令概况
本文档介绍icehouse发行版keystone命令 keystone Command-Line Interface (CLI)提供用于和keystone服务器交互的方便工具,但是该命令行工具逐渐受到 ...
- Activiti5小试牛刀demo流程
demo流程目标:刚接触Activiti5,先大致了解下Activiti5的架构,熟悉下开发流程 搭建开发环境 首先给MyEclipse安装Activiti Designer插件,下载网址http:/ ...