梦想CMS注入漏洞分析&发现小彩蛋

0x01 前言

查资料的时候,偶然间看到这样一个漏洞,在一个提交表单的地方,插入SQL语句,便可以进行报错注入。看着有点像二次注入,对于这样类型的注入,我个人遇到的还是比较少的,再加上一般这种地方多数会尝试XSS,所以进行了分析,看看漏洞到底是如何产生的。

0x02 环境搭建

1、首先准备phpstudy,这里使用的是2016版本的,php版本为5.6.27


2、下载cms源码
cms下载地址:
http://www.lmxcms.com/file/d/down/xitong/20210628/202106281714266126.zip


3、访问http://192.168.150.8/install/进行安装


4、输入相应信息即可。
注意:需要提前创建好数据库
 

0x03 漏洞复现

1、访问http://192.168.150.8/admin.php?m=Login,输入账号密码进入后台


2、在采集管理功能处点击创建节点


3、payload如下:

1' and updatexml(0,concat(0x7e,database()),1) and '

4、经测试节点名字和备注均能够触发漏洞
1)备注功能点触发
 


2)节点名字功能点触发

0x04 漏洞分析

1、因为漏洞是sql注入,所以首先可以使用数据库语句监控工具进行监控执行的语句。这里我使用的是seay自带的数据库监控工具。


2、输入账号密码,点击下断


3、发送sql注入的数据包后,点击更新


4、可以看到是一个插入数据库的语句

INSERT INTO lmx_cj(name,mid,content) VALUES('11111111111111111111111','1','1' and updatexml(0,concat(0x7e,database()),1) and '')


5、后面的数据包中可以看到是进行了查询


6、这里很明显就是一个插入数据库的功能,将数据插入到lmx_cj表中,因为updatexml函数导致了报错。查看这个数据表,里面是没有数据的。


7、插入正常的字符串,里面成功添加了数据。
 


8、那么下面开始代码分析,从数据包中很明显可以看到访问的路径为admin.php?&m=Acquisi&a=add。分析过MVP框架的代码便可以很明显看出一个是对应的文件Acquisi,里面调用了add函数。
先来查看一下admin.php文件,里面包含了/inc/config.inc.php和/inc/run.inc.php两个文件。


9、分别打开2个文件查看,跟文件名上表示的一样,一个是配置,一个是路由


10、其中有一个地方值得注意一下,action即方法是放在根目录下或者extend/目录下的c文件夹中,同理model即模块是放在m文件夹中。


然后就是执行问题了,这里可以看到区分了伪静态和单入口,大体意思其实跟tp框架的很像,一者是/模板/方法/参数名/参数值,一者是/?m=模板&a=方法


看最后面

eval('$action=new '.$m.$extendEnt.'();');

这里就是可以定位到漏洞文件所在的地方,很明显传入的m的值为Acquisi,所以这个请求对应的类为AcquisiAction()
11、在/c/admin/AcquisiAction.class.php找到了它


12、在add方法中可以看到,其实就是检测了是不是有从post请求中传入add,并且在data中的name对应的值不为空。其中存在几个函数分别是d()、p()、add()


13、定位一下d()方法,使用foreach函数,数组键分别赋值,看前面可以知道fieldCj就是一个name,mid,content的数组;$type这里有一个很重要的(int)类型强制转换,$is_int为传入的数组mid,并且$v为mid时,将其进行强制转换,也就是post包中传入的mid固定为整型。
 


14、再看一下p()方法,$type=1,$_POST传入的数据赋值给$data;因为前面只传入了一个1,所以$pe、$sql、$mysql均为false;下面在代码注释中进行说明。

function p($type=1,$pe=false,$sql=false,$mysql=false){
    if($type == 1){
        $data = $_POST;  //进入这里
    }else if($type == 2){
        $data = $_GET;
    }else{
        $data = $type;
    }
    if($sql) filter_sql($data);             //过
    if($mysql) mysql_retain($data);     //过
    foreach($data as $k => $v){
        if(is_array($v)){               //未传入数组,过
            $newdata[$k] = p($v,$pe,$sql,$mysql);
        }else{
            if($pe){                        //过
                $newdata[$k] = string::addslashes($v);
            }else{
                $newdata[$k] = trim($v);    //首尾去空后赋值给数组newdata[]
            }
        }
    }
    return $newdata;
}


15、前面对数据处理完之后,调用了这个类的modle中的add()方法

$this->model->add($data);

所以我们需要在m文件夹中寻找Acquisi的model文件


16、打开一看,第一个函数add就是我们需要的


17、右键,选择定位函数(其实使用phpstorm快一点,奈何我这个是虚拟机,没有那个条件装那么大的软件)


18、很幸运,只有一个,不用进行筛选了


19、调用了一个新函数addDB,从字面上的意思理解是添加到数据库,继续定位函数


20、找到函数之后进行分析,首先将数据进行键值分离,然后存入到数组field[]和value[]中,关于implode()函数的用法,我百度了一下,可以理解为使用逗号将数组中的每个值进行连接。然后,就放入到sql语句中了。
 


21、然后是执行query函数,将sql语句直接执行,如果没有返回结果就将错误信息返回。


22、总结一下利用链
首先从admin.php文件 -> 再到/inc/run.inc.php文件 -> 然后调用了传入的m参数值AcquisiAction类 -> AcquisiAction类中的add() -> 对数据经过一些处理,调用了d()、p()函数 -> 调用AcquisiAction类对应的Model中的add方法 -> 调用addModel() -> 调用addDB() -> 在addDB方法中进行了数组的转换就直接放入到sql语句中 ->调用了query()方法,执行了sql语句,然后如果执行结果为空,则将错误打印出来。

23、分析之后我发现一个有意思的东西,既然没有经过任何过滤,那么是不是存在存储型XSS漏洞呢,试了一下,确实存在。


两个参数均存在。

0x05 总结

分析完一条完整的利用链了,漏洞利用那么简单,但是实际分析确实还是有一点难的,当然如果有PHPstrom可能会好一些,函数之间的跳转会方便点,并且可以通过截断数据进行debug调试,也比这样轻松。但是总的来说还是成功分析完了,这里其实有一些地方的分析还是存在不足之处的,也希望大家体谅小白对代码的熟练度还不够。
小彩蛋:
因为页面会直接返回错误语句,那么这里不就也存在XSS漏洞了?let me try try~

首先单引号让数据报错,然后后面插入xss payload
'<img src=1 onerror=alert(1)>


然后,在位置2它出现了~


查看了一下,位置1没有触发是因为<不见了


那么尝试一下闭合,成功触发。

')<img src=1 onerror=alert(1)>'

文章初发布于先知社区:https://xz.aliyun.com/t/10445

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lmxcms1.4更新内容包括: 增加功能: 增加采集功能,采集功能非常强大,绝对可比拟市面上的任何cms的采集功能 增加上传图片生成缩略图可以根据宽度自动缩放高度比例 增加tags可以绑定栏目 增加随机信息调用标签 randdata 使用方法看手册 增加随机调用tags标签 randtags 使用方法看手册 后台去除嵌入广告 修复功能: 数据库恢复(注意:请在升级完成后重新备份数据库,避免以前备份过的无法恢复) 搜索时间间隔参数无效的bug 修复执行sql语句由于表前缀导致的错误 相关链接标签链接有误的bug lmxcms基于php语言和mysql数据库开发,系统采用业界流行的MVC设计模式开发,使得系统结构更加清晰明了,便于进行二次开发和管理,并且lmxcms内嵌了smarty模板引擎,使程序与模板分离,如果您足够了解lmxcms完全可以自定义模板标签。 lmxcms1.4主要包括以下功能: 自定义模型:可以完全自由的根据网站需要添加修改所需字段。系统安装默认自带新闻模型和产品模型。 纯静态html生成:支持纯静态html生成,不仅可以减少数据库请求,加快页面载入速度,也更加适合搜索引擎优化(SEO)。 自定义表单:可以自由创建表单字段,每个表单可以自由组合表单所需要字段。 站内搜索:自由组合搜索条件,包括按照模型、栏目、字段、搜索模板、时间范围等,并且支持搜索关键字记录。 友情链接:支持文字和图片形式的友情链接。 广告系统:后台支持文字、图片、html三种形式的广告系统。 在线留言:支持自定义开启和关闭留言板,留言板页面支持调用留言数据。 焦点图系统:后台可以创建焦点图片,并且系统默认了5种样式的焦点图。 数据备份:后台可以备份和恢复数据库,并且可以自由下载数据库到本地。 模板管理:后台支持自定义切换模板风格,支持在线编辑模板(需要修改配置文件)。 文件管理:系统内嵌了swfupload上传插件,可以在文件管理里面来管理后台上传的各种图片、文件、附件等。 扩展变量:支持自定义扩展变量,可以在模板任意输出该变量内容。 日志操作:后台的每一个操作都会记录到日志操作中,有需要时查看。 Tags功能:支持tags标签功能,增加信息可以选择或者自动创建,每个tags标签也可以定义不同的模板。 采集系统:支持图片远程保存,图片的各种理等。 专题功能:支持自定义创建专题功能,增加信息可以选择专题,每个专题可以定义不同模板等。 自动、手动分词:增加、修改信息时,可以选择自动把正文或者标题提取为关键字功能。 提取描述:增加信息时可以选择自动提取正文中的第一段为描述信息。        相关阅读 同类推荐:lmxcms后台密码找回插件 企业网站源码
lmxcms基于php语言和mysql数据库开发,系统采用业界流行的MVC设计模式开发,使得系统结构更加清晰明了,便于进行二次开发和管理,并且lmxcms内嵌了smarty模板引擎,使程序与模板分离,如果您足够了解lmxcms完全可以自定义模板标签。 lmxcms主要包括以下功能: 自定义模型:可以完全自由的根据网站需要添加修改所需字段。系统安装默认自带新闻模型和产品模型。 纯静态html生成:支持纯静态html生成,不仅可以减少数据库请求,加快页面载入速度,也更加适合搜索引擎优化(SEO)。 自定义表单:可以自由创建表单字段,每个表单可以自由组合表单所需要字段。 站内搜索:自由组合搜索条件,包括按照模型、栏目、字段、搜索模板、时间范围等,并且支持搜索关键字记录。 友情链接:支持文字和图片形式的友情链接。 广告系统:后台支持文字、图片、html三种形式的广告系统。 在线留言:支持自定义开启和关闭留言板,留言板页面支持调用留言数据。 焦点图系统:后台可以创建焦点图片,并且系统默认了5种样式的焦点图。 数据备份:后台可以备份和恢复数据库,并且可以自由下载数据库到本地。 模板管理:后台支持自定义切换模板风格,支持在线编辑模板(需要修改配置文件)。 文件管理:系统内嵌了swfupload上传插件,可以在文件管理里面来管理后台上传的各种图片、文件、附件等。 扩展变量:支持自定义扩展变量,可以在模板任意输出该变量内容。 日志操作:后台的每一个操作都会记录到日志操作中,有需要时查看。 Tags功能:支持tags标签功能,增加信息可以选择或者自动创建,每个tags标签也可以定义不同的模板。 专题功能:支持自定义创建专题功能,增加信息可以选择专题,每个专题可以定义不同模板等。 自动、手动分词:增加、修改信息时,可以选择自动把正文或者标题提取为关键字功能。 提取描述:增加信息时可以选择自动提取正文中的第一段为描述信息。 lmxcms v1.3 更新日志: lmxcms1.3增加功能: 加入专题功能 加入tags标签功能 静态模式下可以使用中文路径(服务器或者空间必须支持中文文件夹),否则为拼音模式,可以在 config.inc.php中设置路径模式 加入伪静态访问模式 加入栏目绑定域名功能 需要配合域名解析 加入后台登录密码错误次数限制 加入控制后台操作日志开关 /inc/config.inc.php 参数控制 增加设置内容信息关键字和关键字链接 增加提取正文为描述信息 增加提取标题或正文为关键字 修改内容信息页面布局 lmxcms1.3修复: 修复图片上传、水印错误 修复删除图片、文件不删除本地文件的错误 修复数据库备份因数据量过大导致内存溢出错误,优化数据库备份、恢复、下载功能
梦想cms以下简称“lmxcms”,是由“10年”(网名)开发的一套简单实用的网站管理系统(cms),完全免费开源,无授权限制,你可以用本系统在任何地方使用而不用花费任何费用。 lmxcms基于php语言和mysql数据库开发,系统采用业界流行的MVC设计模式开发,使得系统结构更加清晰明了,便于进行二次开发和管理,并且lmxcms内嵌了smarty模板引擎,使程序与模板分离,如果您足够了解lmxcms完全可以自定义模板标签。 lmxcms主要包括以下功能: 自定义模型:可以完全自由的根据网站需要添加修改所需字段。系统安装默认自带新闻模型和产品模型。 纯静态html生成:支持纯静态html生成,不仅可以减少数据库请求,加快页面载入速度,也更加适合搜索引擎优化(SEO)。 自定义表单:可以自由创建表单字段,每个表单可以自由组合表单所需要字段。 站内搜索:自由组合搜索条件,包括按照模型、栏目、字段、搜索模板、时间范围等,并且支持搜索关键字记录。 友情链接:支持文字和图片形式的友情链接。 广告系统:后台支持文字、图片、html三种形式的广告系统。 在线留言:支持自定义开启和关闭留言板,留言板页面支持调用留言数据。 焦点图系统:后台可以创建焦点图片,并且系统默认了5种样式的焦点图。 数据备份:后台可以备份和恢复数据库,并且可以自由下载数据库到本地。 模板管理:后台支持自定义切换模板风格,支持在线编辑模板(需要修改配置文件)。 文件管理:系统内嵌了swfupload上传插件,可以在文件管理里面来管理后台上传的各种图片、文件、附件等。 扩展变量:支持自定义扩展变量,可以在模板任意输出该变量内容。 日志操作:后台的每一个操作都会记录到日志操作中,有需要时查看。 lmxcms v1.1更新如下: 功能增加: “article”标签调用数据,可以自定义返回变量名。 增加错误404页面,在根目录下自己编辑页面即可。 更新留言板同一ip一定时间范围内最大留言条数。 增加自定义开启搜索功能,在config.inc.php配置文件中设置。 bug修复 后台卡死修复。 后台切换模板没有清除缓存修复。
lmxcms基于php语言和mysql数据库开发,系统采用业界流行的MVC设计模式开发,使得系统结构更加清晰明了,便于进行二次开发和管理,并且lmxcms内嵌了smarty模板引擎,使程序与模板分离,如果您足够了解lmxcms完全可以自定义模板标签。 lmxcms1.4主要包括以下功能: 自定义模型:可以完全自由的根据网站需要添加修改所需字段。系统安装默认自带新闻模型和产品模型。 纯静态html生成:支持纯静态html生成,不仅可以减少数据库请求,加快页面载入速度,也更加适合搜索引擎优化(SEO)。 自定义表单:可以自由创建表单字段,每个表单可以自由组合表单所需要字段。 站内搜索:自由组合搜索条件,包括按照模型、栏目、字段、搜索模板、时间范围等,并且支持搜索关键字记录。 友情链接:支持文字和图片形式的友情链接。 广告系统:后台支持文字、图片、html三种形式的广告系统。 在线留言:支持自定义开启和关闭留言板,留言板页面支持调用留言数据。 焦点图系统:后台可以创建焦点图片,并且系统默认了5种样式的焦点图。 数据备份:后台可以备份和恢复数据库,并且可以自由下载数据库到本地。 模板管理:后台支持自定义切换模板风格,支持在线编辑模板(需要修改配置文件)。 文件管理:系统内嵌了swfupload上传插件,可以在文件管理里面来管理后台上传的各种图片、文件、附件等。 扩展变量:支持自定义扩展变量,可以在模板任意输出该变量内容。 **志操作:后台的每一个操作都会记录到**志操作中,有需要时查看。 Tags功能:支持tags标签功能,增加信息可以选择或者自动创建,每个tags标签也可以定义不同的模板。 采集系统:支持图片远程保存,图片的各种理等。 专题功能:支持自定义创建专题功能,增加信息可以选择专题,每个专题可以定义不同模板等。 自动、手动分词:增加、修改信息时,可以选择自动把正文或者标题提取为关键字功能。 提取描述:增加信息时可以选择自动提取正文中的第一段为描述信息。 lmxcms1.4更新内容包括: 增加功能: 增加采集功能,采集功能非常强大,绝对可比拟市面上的任何cms的采集功能 增加上传图片生成缩略图可以根据宽度自动缩放高度比例 增加tags可以绑定栏目 增加随机信息调用标签 randdata 使用方法看手册 增加随机调用tags标签 randtags 使用方法看手册 后台去除嵌入广告 修复功能: 数据库恢复(注意:请在升级完成后重新备份数据库,避免以前备份过的无法恢复) 搜索时间间隔参数无效的bug 修复执行sql语句由于表前缀导致的错误 相关链接标签链接有误的bug

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值