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行:

  1. case 'feedback':
  2. $fromurl=$_SERVER["HTTP_REFERER"];
  3. if(!strstr($fromurl,setup_weburl))ajaxreturn(3,'未知的URL来源,请刷新重新提交或联系工作人员');
  4. $lang=strtolower(arg('lang','post','url'));
  5. $name=arg('name','post','txt');
  6. $email=arg('email','post','url');
  7. $phone=arg('phone','post','url');
  8. $content=arg('content','post','txt');
  9. $attachment=arg('attach称ment','post','url');
  10. 10.     checkstr($name,'none',1,50,'您的呼');
  11. 11.     if($email!='')checkstr($email,'email',1,200,'电子邮箱');
  12. 12.     if($phone!='')checkstr($phone,'none',1,20,'联系电话');
  13. 13.     checkstr($content,'none',1,1000,'留言内容');
  14. 14.     if(setup_feedback_cn){
  15. 15.         if(!preg_match("/[\x7f-\xff]/",$content)){
  16. 16.             $errtip=getlang('send','notcn');
  17. 17.             ajaxreturn(1,$errtip);
  18. 18.             }
  19. 19.         }
  20. 20.     if(setup_errkey!=''){
  21. 21.         if(!checkerrkey($content)){
  22. 22.             $errtip=getlang('send','errkey');
  23. 23.             ajaxreturn(1,$errtip);
  24. 24.             }
  25. 25.         }
  26. 26.     $user_ip=getip();
  27. 27.     if(setup_feedback_limit){
  28. 28.         $ltime=time()-setup_feedback_limit;
  29. 29.         $ftime=db_count('feedback','webid='.$web['id'].' and time_add>'.$ltime.' and user_ip="'.$user_ip.'"');
  30. 30.         if($ftime){
  31. 31.             $errtip=sprintf(getlang('comment','limiterr'),setup_feedback_limit);
  32. 32.             ajaxreturn(1,$errtip);
  33. 33.             }
  34. 34.         }
  35. 35.     require_once('include/class_ip.php');
  36. 36.     $ipdata=new IpLocation();
  37. 37.     $add=$ipdata->getlocation($user_ip);
  38. 38.     $user_iptext=$add['country'];
  39. 39.     $attachment_new='';
  40. 40.     if($attachment!=''){
  41. 41.         $attachment_new='feedback/'.$attachment;
  42. 42.         @rename(setup_upfolder.$web['id'].'/'.setup_uptemp.$attachment,setup_upfolder.$web['id'].'/'.$attachment_new);
  43. 43.         }
  44. 44.     $content1=nl2br($content);
  45. 45.     $content2=str_replace('<br>','{br}',$content1);
  46. 46.     $tab='webid,dataid,languages,name,email,phone,user_ip,user_iptext,content,attachment,time_add';
  47. 47.     $val=$web['id'].',0,"'.$lang.'","'.$name.'","'.$email.'","'.$phone.'","'.$user_ip.'","'.$user_iptext.'","'.$content2.'","'.$attachment_new.'",'.time();
  48. 48.     db_intoshow('feedback',$tab,$val);

这段代码对游客提交的留言进行处理,然后写入数据库进行查看,在留言提交的几个参数$lang,$email,$phone,$attachment,其中$lang的参数是url,但是$email,$phone有格式检测不能利用,发现把ip也写入了数据库,我们进一步查看程序中如何获取ip的?

文件位置:/admin_system/include/lib/login.php 第447-453行:

  1. function getip(){
  2. if(!empty($_SERVER["HTTP_CLIENT_IP"]))$cip = $_SERVER["HTTP_CLIENT_IP"];
  3. else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  4. else if(!empty($_SERVER["REMOTE_ADDR"]))$cip = $_SERVER["REMOTE_ADDR"];
  5. else $cip = "127.0.0.1";
  6. return $cip;
  7. }

可以发现程序先从客户端获取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跨站脚本漏洞分析的更多相关文章

  1. 【代码审计】iZhanCMS_v2.1 前台存储型XSS漏洞分析

      0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...

  2. 【代码审计】eduaskcms_v1.0.7前台存储型XSS漏洞分析

      0x00 环境准备 eduaskcms官网:https://www.eduaskcms.xin 网站源码版本:eduaskcms-1.0.7 程序源码下载:https://www.eduaskcm ...

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

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

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

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

  5. 【代码审计】711cms_V1.0.5前台XSS跨站脚本漏洞分析

      0x00 环境准备 711CMS官网: https://www.711cms.com/ 网站源码版本:711CMS 1.0.5 正式版(发布时间:2018-01-20) 程序源码下载:https: ...

  6. 【代码审计】大米CMS_V5.5.3 后台多处存储型XSS漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

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

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

  8. 74CMS 3.0 存储型XSS漏洞

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

  9. 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚

    首先本地搭建环境,我所使用的是Windows PHPstudy集成环境.使用起来非常方便.特别是审计的时候.可以任意切换PHP版本. 本文作者:226safe Team – Poacher 0×01 ...

随机推荐

  1. Linux centOS Ubuntu --- 使用systemctl添加开机启动

    我们对service和chkconfig两个命令都不陌生,systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体. systemctl is-enable ...

  2. 开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo(转)

    热衷于开源框架探索的我发现ASP.NET MVC与jQuery easyUI的组合很给力.由于原先一直受Ext JS框架的licence所苦恼,于是痛下决心寻找一个完全免费的js框架——easyUI. ...

  3. 用 Prettier 统一团队的代码风格~

    使用 prettier 自動調整 JavaScript 樣式 GFM 格式说明 为什么你不能缺少Linter(以及代码美化工具) 使用 prettier 自動調整 JavaScript 樣式 Reac ...

  4. 反向代理WebSocket连接自动断掉的问题

    Nginx可能设置了超时时间,导致WebSocket一会儿就断了 解决方法: 1.增加Nginx配置 proxy_read_timeout 500s; 注:三种超时时间,参见 https://www. ...

  5. 解决netaddr不能安装0.7.6以上版本

    今天在Jenkins上添加了两个新jobs,但是同事提交代码后的自动测试运行出现错误.查看原因是tox命令在安装包依赖的时候,找不到大于0.7.6以上的版本,但可是我们明明安装过0.7.10了呀. 后 ...

  6. CSS 布局整理

    1.css垂直水平居中 效果: HTML代码: <div id="container"> <div id="center-div">&l ...

  7. 阿里云服务器CentOS7怎么分区格式化/挂载硬盘

    一.在阿里云上购买了服务器的硬盘后就可以操作了,先看看硬盘情况: 硬盘vda是系统盘:vdb是在阿里云后台购买的另一块硬盘. 第一次使用要分区:fdisk /dev/vdb1 在提示符下依次输入:n+ ...

  8. iPhone X 适配 ( iOS 11适配 )

    总结: 1.状态栏高度发生变化,解决方案:布局的时候这个高度不要写死,通过方法获取高度. 2.导航栏的视图层级结构发生变化而导致 UI(titleView.UIBarButtonItem) 问题. 3 ...

  9. JavaBean之lombok

    参见:https://www.ibm.com/developerworks/cn/opensource/os-lombok/ http://blog.didispace.com/java-lombok ...

  10. nodeJs--模块module.exports与实例化方法

    在nodejs中,提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象.而在e ...