从ThinkPHP谈基于框架开发程序的安全性二(有开源程序实例)

漏洞概要

缺陷编号:WooYun-2014-089437

漏洞标题:从ThinkPHP谈基于框架开发程序的安全性二(有开源程序实例)

相关厂商:ThinkPHP

漏洞作者:xfkxfk

提交时间:2014-12-31 10:21

公开时间:2015-04-02 10:23

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

Tags标签:

漏洞详情

披露状态:

2014-12-31: 细节已通知厂商并且等待厂商处理中
2014-12-31: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2015-02-24: 细节向核心白帽子及相关领域专家公开
2015-03-06: 细节向普通白帽子公开
2015-03-16: 细节向实习白帽子公开
2015-04-02: 细节向公众公开

简要描述:

从ThinkPHP谈基于框架开发程序的安全性二,继续讨论基于框架开发可能带来的问题,厂商忽略不忽略都没关系,主要是给大家提出来,不管是程序员安全意识的问题,还是框架本身的设计缺陷,总之在使用这些框架开发时不要给自己挖坑了。

详细说明:

首先我们来看看官方文档:http://**.**.**.**/manual_3_2.html#model_instance这里主要介绍了模型实例化的一些方法终点介绍了D方法和M方法的使用D方法实例化

M方法实例化

最后官方提到:

问题:那么,要是我们在实例化模型时,程序员想动态传入模型内容咧?;例如:

这样是不是可行我们来写个例子看一下。

这里我们动态传入要实例化的模型类

可以看到我们正常传入user模型,这里执行正常我们来看看代码先看看D函数:/ThinkPHP/Common/functions.php

当class没有定义时$class = '\\Common\\'.$layer.'\\'.$name.$layer;然后:$model = class_exists($class)? new $class($name) : new Think\Model($name);此时,实例化model,new Think\Model($name);继续跟进Model的实例化过程:

这里当name不为空时$this->name = $name;将name,就是我们传入的值赋给了实例化的model做了属性那么,我们传入恶意的数据进入模型类呢?会不会引发问题?这里我们加一个恶意的传值进去实例化,看的更清楚

可以看到,传入恶意的值,引发了sql报错,恶意数据直接带入了模型内,导致问题产生

看结果,上面的答案是:

可能官方说没让程序员这么用或者大家会说这样用的人太少了其实,这都说的通,我们来看看实例ThinkSNS文件/apps/public/Lib/Action/FeedAction.class.php

变量post直接冲POST接受参数然后遍历变量post的值,使用 t 函数进行过滤,t 函数的处理过程就不在赘述,存在绕过最后变量post进入shareFeed函数,跟进文件/addons/model/ShareModel.class.php:

这里的data就是传进来的psot$data['type'],$data['app_name'],$data['curtable']进入了D函数此时已经产生了SQL注入漏洞漏洞证明,提升普通用户为管理员等:

还有文件/addons/widget/CommentWidget/CommentWidget.class.php

$data ['table'] = $data ['table_name']然后$dao = M ( $data ['table'] );同样,我们可控的元素进入了实例化Model中这里导致盲注:

还有文件/addons/model/CommentModel.class.php存在多出这样的问题很多这样的问题就不在一一列举了最后,不管这是谁的问题,如果使用不当,或者和是这么使用了就会产生漏洞主要是给大家提出来,不管是程序员安全意识的问题,还是框架本身的设计缺陷,总之在使用这些框架开发时不要给自己挖坑了。

漏洞证明:

修复方案:

可控实例化对象时,处理后在赋值与实例对象

漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-04-0210:23

厂商回复:

这个说是TP的漏洞有点牵强,充其量算是Thinksns的漏洞,否则就什么都怪到框架头上了。

漏洞Rank:10 (WooYun评价)

最新状态:

暂无

评价

  1. 2010-01-01 00:00 秋风 白帽子 | Rank:372 漏洞数:32)

    NB!

  2. 2010-01-01 00:00 泳少 白帽子 | Rank:158 漏洞数:20)

    学习的是思路

  3. 2010-01-01 00:00 xfkxfk 白帽子 | Rank:1829 漏洞数:172)

    @ThinkPHP 我不是说了么,这只是个坑而已,看谁往进跳了,只是提醒大家不要给自己挖坑

  • N/A