【代码审计】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 ...
随机推荐
- 【SIP协议】学习初学笔记
1.SIP这玩意是怎么走来和如何构建的? 通俗的说,SIP就是一个轻量级信令协议,它可以作为音频.视频.及时信息的信令. 说到SIP是怎么出来的就要提H.323,而提到这个标准由不得不提到ITU-T, ...
- Android---如何返回上一Activity
Android 代码用来返回上一个activity 调用onKeyDown()时发生java.lang.NullPointerException. 来自:CSDN博客推荐文章 | 时间:2012 ...
- 【Html】Vue动态插入组件
html: <div id="app"> <p>{{ message }}</p> <button @click="add('a ...
- moodle中的完形填空题的文本编写方法
moodle中的完形填空题的文本编写方法 [完形填空题]考题把一段文字挖去一些空,让考生根据上下文正确地完成这些填空.完型填空题中的一段短文可以包括各种题目,如选择,填空,和数字题等. 题目的编辑是在 ...
- 3ds Max 中的导航控件ViewCube入门介绍
介绍 ViewCube 3D导航控件提供当前方向的视觉反馈,让用户可以调整视图方向以及在标准视图与等距视图间进行切换. 软件环境:3d Max2015 第一步.启动3d Max软件,打开场景文件 Vi ...
- 第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传
第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传 实现原理 前台用cropper插件,将用户上传头像时裁剪图片的坐标和图片,传到逻辑处理 ...
- Java如何处理运行时异常?
在Java编程中,如何处理运行时异常? 此示例显示如何处理java程序中的运行时异常. package com.yiibai; public class RuntimeExceptions { sta ...
- (转) IDirectSoundBuffer::SetVolume的参数与音量分贝的函数关系
假如将播放器的控制音量切割成0-100的话,由于IDirectSoundBuffer::SetVolume(LONG lVolume)中参数的输入值是[-10000,0] MySetVolume( D ...
- C# 时间比较方法DateTime.Compare
public static int Compare(DateTime t1,DateTime t2) 返回值 类型:System..::.Int32 有符号数字,指示 t1 和 t2 的相对值. 值类 ...
- C# 判断字符串为空有哪几种方法
Length法:);Empty法:bool isEmpty = (str == String.Empty);General法:bool isEmpty = (str == ""); ...