【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析
0x00 环境准备
QYKCMS官网:http://www.qykcms.com/
网站源码版本:QYKCMS_v4.3.2(企业站主题)
程序源码下载:http://bbs.qingyunke.com/thread-13.htm
测试网站首页:

0x01 代码分析
1、漏洞文件位置:/include/lib_post.php 第153-200行:
- case 'feedback':
- $fromurl=$_SERVER["HTTP_REFERER"];
- if(!strstr($fromurl,setup_weburl))ajaxreturn(3,'未知的URL来源,请刷新重新提交或联系工作人员');
- $lang=strtolower(arg('lang','post','url'));
- $name=arg('name','post','txt');
- $email=arg('email','post','url');
- $phone=arg('phone','post','url');
- $content=arg('content','post','txt');
- $attachment=arg('attach称ment','post','url');
- 10. checkstr($name,'none',1,50,'您的呼');
- 11. if($email!='')checkstr($email,'email',1,200,'电子邮箱');
- 12. if($phone!='')checkstr($phone,'none',1,20,'联系电话');
- 13. checkstr($content,'none',1,1000,'留言内容');
- 14. if(setup_feedback_cn){
- 15. if(!preg_match("/[\x7f-\xff]/",$content)){
- 16. $errtip=getlang('send','notcn');
- 17. ajaxreturn(1,$errtip);
- 18. }
- 19. }
- 20. if(setup_errkey!=''){
- 21. if(!checkerrkey($content)){
- 22. $errtip=getlang('send','errkey');
- 23. ajaxreturn(1,$errtip);
- 24. }
- 25. }
- 26. $user_ip=getip();
- 27. if(setup_feedback_limit){
- 28. $ltime=time()-setup_feedback_limit;
- 29. $ftime=db_count('feedback','webid='.$web['id'].' and time_add>'.$ltime.' and user_ip="'.$user_ip.'"');
- 30. if($ftime){
- 31. $errtip=sprintf(getlang('comment','limiterr'),setup_feedback_limit);
- 32. ajaxreturn(1,$errtip);
- 33. }
- 34. }
- 35. require_once('include/class_ip.php');
- 36. $ipdata=new IpLocation();
- 37. $add=$ipdata->getlocation($user_ip);
- 38. $user_iptext=$add['country'];
- 39. $attachment_new='';
- 40. if($attachment!=''){
- 41. $attachment_new='feedback/'.$attachment;
- 42. @rename(setup_upfolder.$web['id'].'/'.setup_uptemp.$attachment,setup_upfolder.$web['id'].'/'.$attachment_new);
- 43. }
- 44. $content1=nl2br($content);
- 45. $content2=str_replace('<br>','{br}',$content1);
- 46. $tab='webid,dataid,languages,name,email,phone,user_ip,user_iptext,content,attachment,time_add';
- 47. $val=$web['id'].',0,"'.$lang.'","'.$name.'","'.$email.'","'.$phone.'","'.$user_ip.'","'.$user_iptext.'","'.$content2.'","'.$attachment_new.'",'.time();
- 48. db_intoshow('feedback',$tab,$val);
这段代码对游客提交的留言进行处理,然后写入数据库进行查看,在留言提交的几个参数$lang,$email,$phone,$attachment,其中$lang的参数是url,但是$email,$phone有格式检测不能利用,发现把ip也写入了数据库,我们进一步查看程序中如何获取ip的?
文件位置:/admin_system/include/lib/login.php 第447-453行:
- function getip(){
- if(!empty($_SERVER["HTTP_CLIENT_IP"]))$cip = $_SERVER["HTTP_CLIENT_IP"];
- else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
- else if(!empty($_SERVER["REMOTE_ADDR"]))$cip = $_SERVER["REMOTE_ADDR"];
- else $cip = "127.0.0.1";
- return $cip;
- }
可以发现程序先从客户端获取IP,这是可以伪造的,伪造IP将XSS Payload写入数据库,后台数据库查询出来展示的时候,便会触发XSS,导致程序在实现上存在存储型XSS跨站脚本漏洞,攻击者通过该漏洞可在页面中插入恶意js代码,获得用户cookie等信息,导致用户被劫持。
0x02 漏洞利用
1、在首页点击在线留言—填写数据—抓包—修改X-Forwarded-For头部信息:

2、前台留言成功,当管理员后台查看留言的时候,成功触发XSS语句。

0x03 修复建议
建议对参数做html转义过滤(要过滤的字符包括:单引号、双引号、大于号、小于号,&符号),防止脚本执行。在变量输出时进行HTML ENCODE处理。
最后
欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。

【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析的更多相关文章
- 【代码审计】iZhanCMS_v2.1 前台存储型XSS漏洞分析
0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...
- 【代码审计】eduaskcms_v1.0.7前台存储型XSS漏洞分析
0x00 环境准备 eduaskcms官网:https://www.eduaskcms.xin 网站源码版本:eduaskcms-1.0.7 程序源码下载:https://www.eduaskcm ...
- 【代码审计】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 ...
- 【代码审计】711cms_V1.0.5前台XSS跨站脚本漏洞分析
0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...
- 【代码审计】大米CMS_V5.5.3 后台多处存储型XSS漏洞分析
0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...
- 【代码审计】LaySNS_v2.2.0 前台XSS跨站脚本漏洞
0x00 环境准备 LaySNS官网:http://www.laysns.com/ 网站源码版本:LaySNS_v2.2.0 程序源码下载:https://pan.lanzou.com/i0l38 ...
- 74CMS 3.0 存储型XSS漏洞
一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...
- 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚
首先本地搭建环境,我所使用的是Windows PHPstudy集成环境.使用起来非常方便.特别是审计的时候.可以任意切换PHP版本. 本文作者:226safe Team – Poacher 0×01 ...
随机推荐
- SVN clean失败解决方法【转】
原文地址:http://blog.csdn.net/victory08/article/details/42100325/ svn执行clean up后出现提示:svn cleanup failed– ...
- XMPP接受发送消息
在现阶段的通信服务中,各种标准都有,因此会出现无法实现相互连通,而XMPP(Extensible Message and presence Protocol)协议的出现,实现了整个及时通信服务协议的互 ...
- JS中的HTML片段
经常在js里面写一些html模板,但是由于语法不同,没有办法啊直接将html黏贴在js中. var html = "<!DOCTYPE html>"+ "&l ...
- 微软BI 之SSIS 系列 - 变量查询语句引起列输出顺序不一致的解决方法
开篇介绍 这个问题来自于 天善BI社区,看了一下比较有意思,因为我自己认为在 SSIS中处理各种类型文件的经验还比较丰富(有一年的时间几乎所有ETL都跟文件相关),但是这个问题确实之前没有特别考虑过. ...
- windows性能监控
see also:http://www.cnblogs.com/upDOoGIS/archive/2010/11/19/1881970.html CPU Processor : % Processor ...
- maven 设置跳过测试
1.在执行mvn命令时增加以下参数可以跳过测试: -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下. -Dmaven.test ...
- Oracle11g登录名和密码不区分大小写
问题描述: oracle11g对账户密码实行大小写识别,烦的一比!想移除此限制 问题解决: oracle 11g以前的版本的用户名和密码是不区分大小写!oracle 11g 用户名和密码默认区分大小写 ...
- hihocoder第238周:杨氏矩阵的个数
题目链接 问题描述 给定一个N行M列的矩阵,往里面填入$1-N\times M$个数字,使得这个矩阵每行.每列都满足递增.问:有多少种填法? 问题分析 这个问题很难,如果能够直接想到,那就是天才了. ...
- sklearn:Python语言开发的通用机器学习库
引言:深入理解机器学习并全然看懂sklearn文档,须要较深厚的理论基础.可是.要将sklearn应用于实际的项目中,仅仅须要对机器学习理论有一个主要的掌握,就能够直接调用其API来完毕各种机器学习问 ...
- SNF快速开发平台MVC-审核流,审核完成后会给下一个审核人发邮件,下一个审核人可以不登录系统,在邮件里进行审核处理
审核流设计和使用参考以下资料: 审核流设计 http://www.cnblogs.com/spring_wang/p/4874531.html 审核流实例 http://www.cnblogs.com ...