漏洞概要
关注数(24)
关注此漏洞
漏洞标题:mcms最新版任意表的任意字段注入+添加管理员+任意数据删除
提交时间:2015-03-03 12:25
修复时间:2015-06-01 12:42
公开时间:2015-06-01 12:42
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:15
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2015-03-03: 细节已通知厂商并且等待厂商处理中
2015-03-03: 厂商已经确认,细节仅向厂商公开
2015-03-06: 细节向第三方安全合作伙伴开放
2015-04-27: 细节向核心白帽子及相关领域专家公开
2015-05-07: 细节向普通白帽子公开
2015-05-17: 细节向实习白帽子公开
2015-06-01: 细节向公众公开
简要描述:
mcms最新版任意表的任意字段注入+添加管理员+任意数据删除
详细说明:
前两天在wooyun提了两个漏洞,一天就确认修复了,而且出了新版本,那我就去官网下个最新(v_3.1.1.enterprise)的来看看学习学习吧。
问题一:任意表的任意字段注入
注入一枚:POST /app/user/info.php?m=save&ajax=1 POST中有个参数model_name,这个参数是用来与数据表前缀(TB_PRE)拼接需要操作的数据表的表名的,在获得model_name时并没有过滤,因此,在数据表名可就可以进行注入了,当然,可以利用任意表的任意字段来进行注入。
看看代码/app/user/info.php
$model_name直接通过POST获取,没有经过过滤处理,也没有进行表的属性判断就与表前缀进行了拼接,因此,这里可以实现任意表的任意字段注入。
Payload:POST提交
因为是time-based blind 注入,猜测管理员用户名的第一个字母时,若错误,延迟2s。如下图
若正确,则延迟3s(视环境而定,可自行缩短延迟时间),如下图
按上面的方法依次做下去(burp intruder或者自己写个脚本跑),可测试管理员用户名为:mcmsadmin,密码为: 891c796e40d55cabc96051ca971c1894
问题二:任意添加管理员
问题点还是出在上面的代码中,因为需要操作的数据表的表名是用户输入的,而且没有经过任何属性的判断,又因为执行的SQL语句是replace into,因此,可以向用户表(mcms_user)中添加数据,这里以添加系统管理员为例进行说明。
系统管理员的登录密码是这样构造的
所以在添加管理员时,按上面的方法进行构造,其中所需要的各个字段都可由直接通过下图中的方法写入数据库。
成功添加系统管理员
问题三:任意数据删除
在问题二中也提到了,由于需要操作的数据表的表名是用户输入的,而且没有经过任何属性的判断,又因为执行的SQL语句是replace into,因此,可以利用replace into对所有数据表进行replace。也即构造下面的语句即可把数据表中的所有数据删除,这里以user表为例进行说明
根据replace into的性质,只要循replace表的主键值,就可以把表清空,可写个python脚本或使用burp suite可轻松清空所有数据表。
过程见下图
漏洞证明:
修复方案:
版权声明:转载请注明来源 路人甲@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2015-03-03 12:41
厂商回复:
过滤不严,感谢
最新状态:
暂无