i春秋作家:Qclover

原文来自:EmpireCMS_V7.5的一次审计

0x01 概述

最近在做审计和WAF规则的编写,在CNVD和CNNVD等漏洞平台寻找各类CMS漏洞研究编写规则时顺便抽空对国内一些小的CMS进行了审计,另外也由于代码审计接触时间不是太常,最近一段时间也跟着公司审计项目再次重新的学习代码审计知识,对于入行已久的各位审计大佬来说,自己算是新手了。对于审计也正在不断的学习和积累中。于是抽空在CNVD上选取了一个国内小型CMS进行审计,此次审计的CMS为EmpireCMS_V7.5版本。从官方下载EmpireCMS_V7.5后进行审计,审计过程中主要发现有三处漏洞(应该还有其他漏洞暂未审计):配置文件写入、后台代码执行及后台getshell,造成这几处漏洞的原因几乎是由于对输入输出参数未作过滤和验证所导致。

0x02 前言

帝国网站管理英文译为”EmpireCMS”,它是基于B/S结构,安全、稳定、强大、灵活的网站管理系统.帝国CMS 7.5采用了系统模型功能:用户通过此功能可直接在后台扩展与实现各种系统,如产品、房产、供求…等等系统,因此特性,帝国CMS系统又被誉为“万能建站工具”;大容量数据结构设计;高安全严谨设计;采用了模板分离功能:把内容与界面完全分离,灵活的标签+用户自定义标签,使之能实现各式各样的网站页面与风格;栏目无限级分类;前台全部静态:可承受强大的访问量;强大的信息采集功能;超强广告管理功能……

0x03 代码审计部分

拿到该CMS后先把握大局按照往常一样先熟悉该CMS网站基本结构、入口文件、配置文件及过滤,常见的审计方法一般是:通读全文发(针对一些小型CMS)、敏感函数回溯法以及定向功能分析法,自己平常做审计过程中这几个方法用的也比较多。在把握其大局熟悉结构后,再通过本地安装去了解该CMS的一些逻辑业务功能并结合黑盒进行审计,有时候黑盒测试会做到事半功倍。

常见的漏洞个人总结有:

1)程序初始化安装

2)站点信息泄漏

3)文件上传

4)文件管理

5)登陆认证

6)数据库备份

7)找回密码

8)验证码

若各位大佬在审计过程中还有发现其他漏洞可补充交流。

于是首先从程序初始化安装开始进行审计….,如下:

3.1 配置文件写入

开始进行审计安装程序,根据经验安装问题一般出现在配置数据输入配置时导致,常见引发问题漏洞的参数用户输入数据库名参数、可控的表前缀等可控参数,于是乎定位到代码位置install/index.php 645行附近,可以看到表名前缀phome_,并将获取表名前缀交给了mydbtbpre参数。继续往下看并跟踪参数传递。

在代码位置/e/install/data/fun.php 347~379行发现,将用户前端输入的表前缀(默认phome_)替换掉默认的phome_后带入了sql语句中进行表的创建,并且可以发现过程中未作过滤。

创建表的同时将配置数据包含可控的表前缀一起写入到config.php配置文件,代码位置/e/install/data/fun.php 587~645行

整个install过程中并未对用户数据进行过滤,导致配置文件代码写入。

配置文件代码写入复现:

3.2 后台任意代码执行

漏洞代码发生在后台数据备份处代码/e/admin/ebak/ChangeTable.php 44行附近,通过审计发现执行备份时,对表名的处理程序是value=”” 通过php短标签形式直接赋值给tablename[]。

进行备份时未对数据库表名做验证,导致任意代码执行。

任意代码执行复现:

3.3 后台getshell

代码位置:e\admin\ecmscom.php

跟踪AddUserpage跳转至代码e\class\comdofun.php页面AddUserpage函数定义94行至114行处,继续跟踪代码在116行可以看到将path变量参数传入ReUserpage函数

跟踪并跳转至该函数的定义如下图所示:

进入该函数继续跟踪DoFileMkDir至e/class/connect.php 2151行该DoFileMkDir函数,可以看到先执行了dirnamej进行了罗列当前可供选择的目录,如下图

然后执行了DoMkdir函数进行了创建文件操作

代码位置为/adm1n/ebak/class/function.php

在path传递和创建过程中并未对path进行验证和限制。

同时在进行pagetext页面内容进行写入时,也未进行过滤引发代码执行的危险函数

代码位置为:e/class/functions.php 4280行

导致用户可通过更改文件名并写入php执行代码创建自定义含恶意代码的文件名页面从而导致getshell。

复现:

总结:

可以看到,该CMS存在较多与变量参数相关的漏洞,究其原因,就是没有对变量进行过滤和验证所导致。噢,半夜了,先这样吧,这次先审计到这吧,酱紫。下次审计若发现较新漏洞再继续吧….感谢!

[CMS漏洞]EmpireCMS_V7.5的一次审计【转载】的更多相关文章

  1. EmpireCMS_V7.5的一次审计

    i春秋作家:Qclover 原文来自:EmpireCMS_V7.5的一次审计 EmpireCMS_V7.5的一次审计 1概述    最近在做审计和WAF规则的编写,在CNVD和CNNVD等漏洞平台寻找 ...

  2. FrameScan-GUI CMS漏洞扫描

    工具简介 FrameScan-GUI是一款python3和Pyqt编写的具有图形化界面的cms漏洞检测框架,是FrameScan的加强版.支持多种检测方式,支持大多数CMS,可以自定义CMS类型及自行 ...

  3. FrameScan CMS漏洞扫描

    工具简介 GithubL:https://github.com/qianxiao996/FrameScan FrameScan是一款python3编写的简易的cms漏洞检测框架,支持多种检测方式,支持 ...

  4. Catfish CMS漏洞集合

    转自https://larryxi.github.io/ 0x00 背景 版本:V 4.2.35 官网下载:http://www.catfish-cms.com/page/4.html 文章内容仅作学 ...

  5. CMS漏洞

    例1, discuz!后台弱口令/暴力破解 1.http://club.lenovo.com.cn/admin.php

  6. CMS漏洞检测工具 – CMSmap

    CMSmap是一个Python编写的针对开源CMS(内容管理系统)的安全扫描器,它可以自动检测当前国外最流行的CMS的安全漏洞. CMSmap主要是在一个单一的工具集合了不同类型的CMS的常见的漏洞. ...

  7. 应用安全-CMF/CMS漏洞整理

    CMS识别 云悉 http://whatweb.bugscaner.com/batch.html CakePHP  CakePHP <= / Cache Corruption Exploit 2 ...

  8. 动易CMS漏洞收集

    动易SiteWeaver6.8短消息0day跨站漏洞 user用户登陆,默认账号密码 admin/admin888 短消息代码模式下编辑,预览 <img src="../Skin/bl ...

  9. Web漏洞扫描工具(批量脱壳、反序列化、CMS)

    一.什么是Web漏洞扫描工具 即是指“扫描Web应用以查找安全漏洞(如跨站脚本,SQL注入,命令执行,目录遍历和不安全服务器配置)的自动化工具”,其中许多可能是由不安全或不正确的编码和设计.另一方面, ...

随机推荐

  1. MySQL 启动、登录、退出和目录结构

    一.启动 MySQL 服务器启动方式有两种: (1)通过服务的方式自动启动 (2)手动启动的方式 1.windows 服务方式启动 操作步骤: 也可以在 cmd 窗口 输入 services.msc ...

  2. Python opencv提取视频中的图片

    作者:R语言和Python学堂链接:https://www.jianshu.com/p/e3c04d4fb5f3 这个函数就是本文要介绍的video2frames()函数,功能就是从视频中提取图片,名 ...

  3. Flutter——FloatingActionButton组件(浮动按钮组件)

    FloatingActionButton 简称 FAB ,可以实现浮动按钮,也可以实现类似闲鱼 app 的地步凸起导航.     属性名称 属性值 child 子视图,一般为 Icon,不推荐使用文字 ...

  4. sql的时间格式

    sql中的时间格式转换主要有:date_format函数,str_to_date函数 1. 首先选择一个数据库 use db_name; 2. 显示当前时区的时间: SELECT NOW(); 3. ...

  5. kubernetes核心组件kube-proxy - 运维笔记

    一.  kube-proxy 和 service  kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重 ...

  6. DotnetCore下Grpc的简单使用(基于3.0版本)

    目录: 一.简单介绍DotnetCore3.0如何将.proto文件生成对应的服务端和客户端类 二.介绍如何在服务端使用Grpc,以及Grpc需要的条件(HTTP2.TLS) 三.介绍如何创建Grpc ...

  7. django实现发送邮件功能

    django实现邮件发送功能 1)首先注册一个邮箱,这里以163邮箱为例 2)注册之后登录,进行如下修改 找到设置,设置一个授权码,授权码的目的仅仅是让你有权限发邮件,但是不能登录到邮箱进行修改,发送 ...

  8. P2341 [HAOI2006]受欢迎的牛[SCC缩点]

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜 欢B,B喜 ...

  9. mysql 新手入门 官方文档+官方中文文档附地址

    点评: 官方文档地址 官方中文文档地址 sql语句扩展

  10. 关于nginx的动静分离配置和分析

    最近博客的图片多了起来(其实也不多,主要因为服务器差劲),于是打算将静态文件剥离出来,做一个分离. 如何安装和配置nginx就不说了,再server节点下面添加如下: 意思是对所有以这些为后缀的文件都 ...