漏洞概要
关注数(24)
关注此漏洞
漏洞标题:DocCms最新版UPDATE注入一枚
提交时间:2014-10-28 10:41
修复时间:2015-01-26 10:42
公开时间:2015-01-26 10:42
漏洞类型:SQL注射漏洞
危害等级:中
自评Rank:10
漏洞状态:未联系到厂商或者厂商积极忽略
Tags标签:
无
漏洞详情
披露状态:
2014-10-28: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-01-26: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
DocCms最新版UPDATE注入一枚
详细说明:
这次这个漏洞不是因为编码问题造成的了,而是过滤不够完善。
Doccms中首先对输入进行了全局过滤
Doccms在/loader/doc.php对输入的内容进行了全局的过滤,如下
跟进cleanArrayForMysql看一下,/inc/function.php
可以看到对用户的输入调用了mysql_real_escape_string()进行过滤,这个函数把sql的几个特殊字符过滤掉了,特别是’。先来看看对’是如何处理的,如下图:
可以看到DocCms把'转换成了/'。那如果想注入的话,不用’就可以了。
比如本次注入的地方,在 在线留言-->社会调查-->投票,这里会调用/content/poll/index.php中的send()方法,看看这个方法都做了些什么。
可以看到对$request['choice']并没有再次过滤就带入了sql执行,因此,只要构造不含有’的注入语句就可以了。
这个地方$request['choice']作为id执行update,而id是数字型的,不存在闭合’的问题,因此构造不含’的注入语句就比较容易了。投票这里存在error-based blind注入,exp如下:
从上面send()方法中可以看到,对投票者的ip进行了限制,第个ip只能投一票,相信你有N+1种方法可以避开这个限制~
漏洞证明:
修复方案:
过滤,只对'过滤往往还会造成注入,可以增加对sql关键词的过滤
版权声明:转载请注明来源 路人甲@乌云
漏洞回应