漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2014-079053
漏洞标题:Finecms一处代码引发多处SQL注入(Order by注入技巧)
相关厂商:dayrui.com
漏洞作者: phith0n
提交时间:2014-10-16 16:03
修复时间:2015-01-14 16:04
公开时间:2015-01-14 16:04
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:18
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2014-10-16: 细节已通知厂商并且等待厂商处理中
2014-10-16: 厂商已经确认,细节仅向厂商公开
2014-10-19: 细节向第三方安全合作伙伴开放
2014-12-10: 细节向核心白帽子及相关领域专家公开
2014-12-20: 细节向普通白帽子公开
2014-12-30: 细节向实习白帽子公开
2015-01-14: 细节向公众公开
简要描述:
做开发的时候发现的。
与finecms的斗争永无止境~
详细说明:
说一下位置:
/dayrui/core/D_Member_Home.php 81行:
再下来的109行:
首先从$_GET里获得了order并直接放入order by语句中,造成SQL注入。
因为有多个类继承了这个类,所以此处SQL注射造成多处功能中枪,包括finecms各个子功能。
漏洞证明:
举个例子,拿news来说。
首先修改/dayrui/core/D_Common.php 304行:
在IS_ADMIN后面或了一个1,将数据库debug开启。这时候,访问http://xxxx/member/index.php?s=news&c=home&kw=&order=aaaa'
即可看到报错:
但既然默认是不会报错的,那么order by 后面除了延时注入,还有什么别的注入方法?
在CI的AR中,一旦数据库语句运行出错,其后跟随的result()或result_array()函数就会抛出一个致命错误:Call to a member function result_array() on a non-object,导致php不能继续执行。所以,即使error_reporting(0),或不开启php报错,我们也可以通过观察页面是否执行完全来判断SQL语句是否执行成功。
所以,给予了我们盲注的条件:出错和正确的显示的页面不同。
废话说了一大堆,直接给利用方法吧:
以上方法构造了一个出错的SQL语句,通过子查询返回结果条数来出错。若子查询返回条数大于1,则会爆“Subquery returns more than 1 row”错误。所以,当ord('r')>113的时候,where语句真,select出来多条结果,造成SQL语句报错,进而导致php出现Fatal error。当ord('r')>114的时候,where语句假,select出来0条结果,不会报错。
修复方案:
不知道。
版权声明:转载请注明来源 phith0n@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:8
确认时间:2014-10-16 16:09
厂商回复:
8
最新状态:
暂无