EmpireCMS_V7.5的一次审计
i春秋作家:Qclover
原文来自:EmpireCMS_V7.5的一次审计
EmpireCMS_V7.5的一次审计
1概述
最近在做审计和WAF规则的编写,在CNVD和CNNVD等漏洞平台寻找各类CMS漏洞研究编写规则时顺便抽空对国内一些小的CMS进行了审计,另外也由于代码审计接触时间不是太常,最近一段时间也跟着公司审计项目再次重新的学习代码审计知识,对于入行已久的各位审计大佬来说,自己算是新手了。对于审计也正在不断的学习和积累中。于是抽空在CNVD上选取了一个国内小型CMS进行审计,此次审计的CMS为EmpireCMS_V7.5版本。从官方下载EmpireCMS_V7.5后进行审计,审计过程中主要发现有三处漏洞(应该还有其他漏洞暂未审计):配置文件写入、后台代码执行及后台getshell,造成这几处漏洞的原因几乎是由于对输入输出参数未作过滤和验证所导致。
2前言
帝国网站管理英文译为”EmpireCMS”,它是基于B/S结构,安全、稳定、强大、灵活的网站管理系统.帝国CMS 7.5采用了系统模型功能:用户通过此功能可直接在后台扩展与实现各种系统,如产品、房产、供求…等等系统,因此特性,帝国CMS系统又被誉为“万能建站工具”;大容量数据结构设计;高安全严谨设计;采用了模板分离功能:把内容与界面完全分离,灵活的标签+用户自定义标签,使之能实现各式各样的网站页面与风格;栏目无限级分类;前台全部静态:可承受强大的访问量;强大的信息采集功能;超强广告管理功能……
3代码审计部分
拿到该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存在较多与变量参数相关的漏洞,究其原因,就是没有对变量进行过滤和验证所导致。噢,半夜了,先这样吧,这次先审计到这吧,酱紫。下次审计若发现较新漏洞再继续吧….感谢!
大家有任何问题可以提问,更多文章可到i春秋论坛阅读哟~
EmpireCMS_V7.5的一次审计的更多相关文章
- [CMS漏洞]EmpireCMS_V7.5的一次审计【转载】
i春秋作家:Qclover 原文来自:EmpireCMS_V7.5的一次审计 0x01 概述 最近在做审计和WAF规则的编写,在CNVD和CNNVD等漏洞平台寻找各类CMS漏洞研究编写规则时顺便抽空对 ...
- ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- ABP文档 - 审计日志
文档目录 本节内容: 简介 关于 IAuditingStore 配置 通过特性启用/禁用 注意 简介 维基百科:“一个审计追踪(也叫审计日志)是一个安全相关的时序记录.记录组.和/或记录源和目标,作为 ...
- 解析大型.NET ERP系统 数据审计功能
数据审计,英语表达是Audit,是追踪数据变化的过程,记录数据变化前后的值,供参考分析.通过设置,ERP可以追踪一个表的所有字段的变化,也可以只记录指定的字段的值变化.欧美企业每年都有独立的审计部门, ...
- Linux简单的日志审计
生产环境日志审计解决方案 所谓的日志审计,就是记录所有系统及相关的用户行为,并且可以自动分析.处理.展示(包括文本或者录像) 1) :通过环境变量以及rsyslog服务进行全部日志审计(信息太 ...
- ABP理论学习之审计日志
返回总目录 本篇目录 介绍 配置 通过特性开启/关闭 注意 我项目中的例子 介绍 维基百科说: "审计跟踪(也叫审计日志)是与安全相关的按照时间顺序的记录,记录集或者记录源,它们提供了活动序 ...
- Oracle 10g安全加固(审计、监听密码)
环境: Linux 6.4 + Oracle 10.2.0.4 1. Oracle 10g 审计功能 2. 对数据库监听器的关闭和启动设置密码 1. Oracle 10g 审计功能 Oracle 10 ...
- Linux系统实战项目——sudo日志审计
Linux系统实战项目——sudo日志审计 由于企业内部权限管理启用了sudo权限管理,但是还是有一定的风险因素,毕竟运维.开发等各个人员技术水平.操作习惯都不相同,也会因一时失误造成误操作,从而 ...
- 利用paramiko模块实现堡垒机+审计功能
paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...
随机推荐
- 查找linux下进程占用CPU过高的原因,以php-fpm为例
很多时候,线上服务器的进程在某时间段内长时间占用CPU过高,为了优化,我们需要找出原因. 1.找出占用CPU最高的10个进程 ps aux | sort -k3nr | head -n 10 或查看占 ...
- Linux使用yum安装JDK
安装jdk8 检查系统是否自带open-jdk输入命令: #rpm -qa|grep java #rpm -qa|grep jdk 如果没有输入信息表示没有安装,如果安装可以输入命令:#rpm -qa ...
- winform自定义控件中其他遮挡控件点击事件
自定义控件在其他窗口调用时,里面的lable阻挡了控件的点击事件 解决方法 自定义控件中lable的 点击事件 private void Lable1_Click(object sender, Eve ...
- 微信小程序实战[01]
接触微信小程序也有一段时间了,以天气预报练一下手. 主要实现了以下功能: (1) 首页图标式菜单,便于以后扩展功能 (2)首页顶部滚动消息 (3)页面右上角三点菜单转发功能,便于小程序的传播 (4)天 ...
- VB 性能优化点
1.将Single,Double和Currency类型的变量替换为Integer或Long类型的变量:10倍 2.避免使用变体: 慢:Dim FSO as object Set FSO = N ...
- 当Vue中img的src是动态渲染时不显示问题
最近遇见动态渲染img时,想起了当初刚开始写vue时,曾经遇见的一个小小坑. Vue中:img的src属性是动态渲染时不显示问题1.需求:展示用户头像,数据从后台获取,如果没有拿到则显示默认图片. 如 ...
- java -关于包装类自动装箱与拆箱拓展+整形常量池
关于自动装箱与拆箱 1.包装类与基本数据类型的自动转换,叫装箱和拆箱(类型自动转换) 2.自动装箱拆箱是在编译器,编译器自动配转换方法,实现装箱和拆箱.所以这个过程发生在编译期 3.只有需要相互类型转 ...
- 处理机调度算法( RR 、HRRF)
1. P117页,练习15:最高响应比( HRRF) 2. P119页,练习22(2):时间片轮转( RR ) 3. 现设定采用三级反馈队列调度算法,三个队列分别为0.1和2,对应时间片为2.4.8. ...
- jsp页面的html代码显示不出来,提示Uncaught SyntaxError: Unexpected token <
jsp页面的html代码显示不出来,提示Uncaught SyntaxError: Unexpected token < <input type="hidden" na ...
- Asp.Net项目与TCP服务端交互
private void SocketSend(string sendstr) { //将字符串转换成字节数组 Byte[] fsSize = System.Text.Encoding.Default ...