0x00 环境准备

XYHCMS官网:http://www.xyhcms.com/

网站源码版本:XYHCMS V3.5(2017-12-04 更新)

程序源码下载:http://www.xyhcms.com/Show/download/id/2/at/0.html

测试网站首页:

0x01 代码分析

1、文件位置: /App/Manage/Controller/SystemController.class.php 第194行开始:

  1. public function site() {
  2. if (IS_POST) {
  3. $data = I('config', array(), 'trim');
  4. foreach ($data as $key => $val) {
  5. if (stripos($val, '<?php') !== false) {
  6. $data[$key] = preg_replace('/<\?php(.+?)\?>/i', '', $val);
  7. }
  8. }
  9. $data['CFG_IMGTHUMB_SIZE'] = strtoupper($data['CFG_IMGTHUMB_SIZE']);
  10. 10.         $data['CFG_IMGTHUMB_SIZE'] = str_replace(array(',', 'X'), array(',', 'X'), $data['CFG_IMGTHUMB_SIZE']);
  11. 11.         if (empty($data['CFG_IMGTHUMB_SIZE'])) {
  12. 12.             $this->error('缩略图组尺寸不能为空');
  13. 13.         }
  14. 14.           if (!empty($data['CFG_IMAGE_WATER_FILE'])) {
  15. 15.             $img_ext = pathinfo($data['CFG_IMAGE_WATER_FILE'], PATHINFO_EXTENSION);
  16. 16.             $img_ext = strtolower($img_ext);
  17. 17.             if (!in_array($img_ext, array('jpg', 'gif', 'png', 'jpeg'))) {
  18. 18.                 $this->error('水印图片文件不是图片格式!请重新上传!');
  19. 19.                 return;
  20. 20.             }
  21. 21.           }
  22. 22.           foreach ($data as $k => $v) {
  23. 23.             $ret = M('config')->where(array('name' => $k))->save(array('s_value' => $v));
  24. 24.         }
  25. 25.         if ($ret !== false) {
  26. 26.             F('config/site', null);
  27. 27.             $this->success('修改成功', U('System/site'));
  28. 28.           } else {
  29. 29.               $this->error('修改失败!');
  30. 30.         }
  31. 31.         exit();
  32. 32.     }

这段函数中对提交的参数进行处理,然后写入配置文件。注意看红色部分代码,接收到的参数进行正则匹配,如果检测’<?php’,就通过正则将这部分脚本代码替换为空,但显然这样过滤是不严谨的,存在被绕过的情况。PHP有多个代码风格,标准的”<?php ?>”被过滤,那么我们可以通过变换代码风格,达到绕过代码过滤,写入配置文件,导致任意代码执行,最后控制网站服务器权限

  1. PHP代码风格:
  2. 标准风格:<?php  ?>
  3. ASP风格 :<%  %>
  4. 长风格:<script language='php'></script>

0x02 漏洞利用

1、        登录网站后台,在系统设置—网站设置—会员配置:

提交构造的PHP长风格的一句话木马,绕过代码过滤,写入配置文件,达到任意代码执行的目的。

2、        通过访问http://127.0.0.1/App/Runtime/Data/config/site.php,成功触发代码执行漏洞。

3、        利用菜刀连接,控制网站服务器权限:

0x03 修复建议

1、写入配置文件前,对特殊字符(如<、>等)进行htmlencode处理;

2、全局配置可考虑写入数据库进行调用。

最后

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

【代码审计】XYHCMS V3.5代码执行漏洞分析的更多相关文章

  1. 【代码审计】OTCMS_PHP_V2.83_代码执行漏洞分析

      0x00 环境准备 OTCMS官网:http://otcms.com 网站源码版本:网钛CMS PHP版 V2.83 [更新于2017.12.31] 程序源码下载:http://d.otcms.c ...

  2. 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析

      0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...

  3. 【代码审计】DouPHP_v1.3代码执行漏洞分析

      0x00 环境准备 DouPHP官网:http://www.douco.com/ 程序源码下载:http://down.douco.com/DouPHP_1.3_Release_20171002. ...

  4. 【代码审计】iZhanCMS_v2.1 代码执行漏洞分析

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

  5. 【代码审计】CmsEasy_v5.7 代码执行漏洞分析

      0x00 环境准备 CmsEasy官网:http://www.cmseasy.cn/ 网站源码版本:CmsEasy_v5.7_UTF8-0208 程序源码下载: http://ftp.cmseas ...

  6. [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)

    Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626) ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞 https://www.f ...

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

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

  8. 【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析

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

  9. 【代码审计】大米CMS_V5.5.3 代码执行漏洞分析

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

随机推荐

  1. [java web]Idea+maven+spring4+hibernate5+struts2整合过程

    摘要 最近也在网上找了些教程,试着使用maven进行包依赖关系的管理,也尝试着通过注解的方式来整合ssh框架.在这个过程中,踩了不少的坑.折腾很长时间,才算把架子折腾起来.这里把结果整理下,作为以后工 ...

  2. EBS R12视图打不到数据

    兩個原因引起的,一個是語言,一個是oualter session set nls_language ='AMERICAN';alter session set nls_language='SIMPLI ...

  3. Oracle 11g不同情形下的登录分析

    对于Oracle刚開始学习的人.甚至有些经验的Oracle DBA来说,Oracle的账户登录问题往往非常棘手.即便成功登录oracle也是知其然而不知其所以然. 作者经过系统学习和重复实践,本着打破 ...

  4. Next Permutation leetcode java

    题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...

  5. 本地项目文件夹同步到GitLab的操作步骤

    一.需求 本地有一个微信小程序的项目源码,只是文件夹的形式,包括一些js和一些页面,想把这个文件夹用GitLab管理,于是就需要把本地文件夹push到服务器的GitLab上面 二.操作 2.1:本地文 ...

  6. [Python设计模式] 第9章 如何准备多份简历——原型模式

    github地址:https://github.com/cheesezh/python_design_patterns 题目 设计一个简历类,必须有姓名,可以设置性别和年龄,即个人信息,可以设置曾就职 ...

  7. python3下载图片

    import urllib.request import socket import re import sys import os targetDir = r"E:\\DATA\常用py脚 ...

  8. MAC EI Capitan上更新系统自带SVN版本号(关闭SIP方能sudo rm)

    继昨晚之后.决定更新系统自带的svn.自带的svn版本号是1.7.看官网svn:http://www.wandisco.com/subversion/download#osx 最新版本号是1.9.13 ...

  9. linux 磁盘空间满了,排查记录

    先贴命令:du -m --max-depth=1或du -h --max-depth=1du:用于统计linux中文件或目录所占磁盘空间的大小du参数######-m:以M为单位展示查询结果-h:以K ...

  10. mongodb复制集Replica Set使用简介

    MongoDB高可用 对于MongoDB,可以支持使用单机模式提供服务,但是在实际的生产环境中,单机模式将面临很大的风险,一旦这个数据库服务出现问题,就会导致线上的服务出现错误甚至崩溃.因此,在实际生 ...