漏洞概要 关注数(109) 关注此漏洞
缺陷编号: WooYun-2014-52685
漏洞标题: DedeCMS某全版本通杀SQL注入(续)
相关厂商: Dedecms
漏洞作者: kobin97
提交时间: 2014-03-03 21:30
公开时间: 2014-06-01 21:31
漏洞类型: SQL注射漏洞
危害等级: 高
自评Rank: 15
漏洞状态: 厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org
Tags标签: 第三方不可信程序 白盒测试
漏洞详情
披露状态:
2014-03-03: 细节已通知厂商并且等待厂商处理中
2014-03-04: 厂商已经确认,细节仅向厂商公开
2014-03-07: 细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-04-28: 细节向核心白帽子及相关领域专家公开
2014-05-08: 细节向普通白帽子公开
2014-05-18: 细节向实习白帽子公开
2014-06-01: 细节向公众公开
简要描述:
0x00 前言
不可否认,官方应对安全漏洞的能力以及这次发布的安全补丁也是十分的失败的!
大家再回来看看:http://www.wooyun.org/bugs/wooyun-2014-051889 (文章:http://drops.wooyun.org/papers/979) 分析,确实是很黄很暴力!
但:大家再看看,造成这次漏洞的原因是加密太简单?分析这个漏洞的人也是傻眼了吧?补丁是否能真正解决问题?下面我们来分析下看看。
详细说明:
0x01 漏洞分析
回头看buy_action.php 这个文件(修复版)。
代码 25行
很明显,造成这次漏洞的原因是变更覆盖。
但官方修复却是 加强mchStrCode函数的加密强度。
我们再看调用:mchStrCode 的地方
同文件的 112 行
傻了,这 $key 和 $val 都可以控制呀。。
如果可以直接传入
GLOBALS[cfg_dbprefix] 不就可以造成变量覆盖了吗?
但了解dede的人都知道,在文件:include/common.inc.php 有全局过滤 GLOBALS 开头键、值的过滤函数,绕过这个好像比较登天还要难吧!
但实际上,&$key=$val 这样的拼接,还可以值里输入 &a=x 这样的呀,解释后不就可以利用了么?
0x02 漏洞测试
此处是一个盲注,为了测试方便,我们直接修复执行语句的文件,打印出执行的语句:
echo $this->queryString."<br>";
http://localhost/member/buy_action.php?
POST
pid=1&product=card&a=b%26GLOBALS[cfg_dbprefix]=dede_member_operation where mid=9999 or @`'` or (ascii(substring((select pwd from dede_admin limit 0,1),1,1))=97)#%26product=@`'`
注意到 %26 即 &
然后点击购买并支付
可以看到语句被成功地注入到查询中。
根据回应不同,我们可以盲注成数据库中的数据。
0x03 漏洞深入分析
128行
如果覆盖变量 $paytype ,可以造成本地文件包含?通过包含文件是否就能拿shell了?
不难发现 parse_str 受GPC控制,利用条件也就是GPC OFF
测试之
拿shell方法暂不研究了,有兴趣的可以继续。
0x04 总结
有时漏洞点一个,但利用方式很多,把主要造成漏洞的地方修复了,才是真正的修复,而不是看别人指那就修复那。
漏洞证明:
上面已经包含证明过程
修复方案:
变量覆盖的地方。
版权声明:转载请注明来源 kobin97@乌云
漏洞回应
厂商回应:
危害等级:中
漏洞Rank:7
确认时间:2014-03-04 12:19
厂商回复:
感谢反馈,已经修复。
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值