专栏首页安恒信息漏洞报告 | ThinkPHP配置不当可导致远程代码执行

漏洞报告 | ThinkPHP配置不当可导致远程代码执行

ThinkPHP配置不当可导致远程代码执行

漏洞分析报告

1. 漏洞描述

ThinkPHP是一款国内流行的开源PHP框架,近日被爆出存在可能的远程代码执行漏洞,攻击者可向缓存文件内写入PHP代码,导致远程代码执行。虽然该漏洞利用需要有几个前提条件,但鉴于国内使用ThinkPHP框架的站点数量之多,该漏洞还是存在一定的影响范围。

2. 漏洞危害

攻击者可通过该漏洞获取网站的控制权限,可修改页面,导致数据泄漏等问题。

3. 影响版本

ThinkPHP 3、ThinkPHP 5

4. 漏洞利用前置条件

缓存名已知(使用了开源程序/源码泄漏等情况),或者缓存名可猜测(使用了常见的名词,如user, news, goods等)。

/runtime/目录下的文件可通过Web访问。

缓存内容可控或部分可控,可带入PHP代码。

5. 风险等级

高危

6. 漏洞分析

以ThinkPHP 3.2.3为例:

这是一个简单的新闻管理页面,首页调用index方法,列出系统内已有的新闻标题。addnews方法用于插入一条新的新闻数据。detail方法通过获取新闻的tid号查询出新闻的详细内容。

由于新闻的内容较多,查询较慢,通常采用缓存的方式提高访问速度。在这时,如果采用数据缓存的方式,就会产生安全隐患。

这里的逻辑是如果能查到缓存,则直接读取缓存数据,否则从数据库里查出数据,并调用S函数进行缓存。S函数的实现:

首先实例化一个Think\Cache类,然后调用该类的set方法。首先看一下实例化操作:

实例化了Cache类,并调用Connect方法:

可以在ThinkPHP/Conf/convention.php中找到DATA_CACHE_TYPE的默认值为File:

$class=’Think\\Cache\\Driver\\File’,所以S函数的操作为实例化File类并调用其set方法:

在这里可以看到$value的值只是被序列化之后就传入//注释后,而//注释符只是一个单行注释,只需传入换行符就能绕过防御。在137行,$data数据被写入文件,文件名在125行被赋值,跟进一下filename这个函数:

$name = md5(C(‘DATA_CACHE_KEY’).$name) 而DATA_CACHE_KEY在配置文件中默认为空:

于是当访问http://127.0.0.1/thinkphp323/home/news/detail?tid=1时管理页面会去寻找缓存目录下md5(new_1)= b00e5c9873c2a37766a94d11c19131e8.php 这个文件。

下图是访问http://127.0.0.1/thinkphp323/home/news/detail?tid=1的结果:

缓存文件的内容:

按照上面的分析,通过addnews方法插入一段恶意的代码:

然后用detail方法查看tid为2的记录触发数据缓存:

利用上述计算方法,此时产生的缓存文件名为md5(new_2)= 04f886bf57f9070935c4a0f972032380.php。内容如下:

直接在浏览器访问:

可以发现输入的恶意代码已经被执行了。

修复建议

在查阅相关资料过程中,发现有文章指出用如下代码进行防御:$data=str_replace(PHP_EOL, '', $data); 经过分析和测试,该防御方式存在绕过方式,而且会影响程序的缓存功能。

新版的ThinkPHP中已经有对缓存的内容进行一定的防护,但是依然可以绕过防护,写入PHP代码。因此主要还是要依靠用户进行安全的配置,为了避免该漏洞产生,安恒应急响应中心建议:

1. 用户在部署程序时勿将ThinkPHP中/public/目录之外的其它目录(尤其是/runtime/)放置到Web目录下。

2. 开发者在程序安装完成后使程序随机生成DATA_CACHE_KEY(在convention.php文件中),以免缓存文件名被猜测出来。

对于已经在使用ThinkPHP框架的用户,可以按下面方法加固站点:

* 进行修改之前请提前备份好数据!

1. 检查Web目录下是否存在/runtime/(/Runtime/)目录,或 /application/(/Application/)目录,如果存在这两个目录,则极有可能未正确部署程序。

修改HTTP服务配置,将Wen路径修改到ThinkPHP的./public目录。

2. 添加缓存文件名前缀

在ThinkPHP3中:将convention.php文件中的DATA_CACHE_KEY设置为随机字符串。

参考:https://www.kancloud.cn/manual/thinkphp/1835

在ThinkPHP5中:在缓存初始化操作之前,设置文件前缀

```

$options = [

// 缓存类型为File

'type' => 'File',

// 缓存有效期为永久有效

'expire'=> 0,

//缓存前缀

'prefix'=> 'think',

// 指定缓存目录

'path' => APP_PATH.'runtime/cache/',

];

Cache::connect($options);

```

- END -

本文分享自微信公众号 - 安恒信息(DBAPP2013)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Thinkphp5 远程代码执行漏洞事件分析报告

    2018年12月10日,ThinkPHP 官方发布《ThinkPHP 5.* 版本安全更新》,修复了一个远程代码执行漏洞。由于 ThinkPHP 框架对控制器名...

    Seebug漏洞平台
  • 【漏洞预警】ThinkPHP远程代码执行漏洞处置手册

    近日,ThinkPHP官方发布了更新通告,在新发布的版本中修复了一个高危的远程代码执行漏洞。由于框架对控制器名没有进行足够的检测,会导致在没有开启强制路由的情况...

    绿盟科技安全情报
  • 推荐一个内网渗透扫描神器

    Perun是一款主要适用于乙方安服、渗透测试人员和甲方RedTeam红队人员的网络资产漏洞扫描器/扫描框架,它主要适用于内网环境,加载漏洞检测Vuln模块后能够...

    HACK学习
  • 网站有漏洞被攻击篡改了数据该怎么修复解决

    2019年1月14日消息,thinkphp又被爆出致命漏洞,可以直接远程代码执行,getshell提权写入网站木马到网站根目录,甚至直接提权到服务器,该漏洞影响...

    技术分享达人
  • ThinkPHP 5.0.0~5.0.23 RCE 漏洞复现

    2019 年 1 月 11 日,360CERT 发现某安全社区出现关于 ThinkPHP5 RCE 漏洞的威胁情报,不久之后 ThinkPHP5 官方与 Git...

    墙角睡大觉
  • 网站安全检测 网站漏洞修复 对thinkphp通杀漏洞利用与修复建议

    thinkphp在国内来说,很多站长以及平台都在使用这套开源的系统来建站,为什么会这么深受大家的喜欢,第一开源,便捷,高效,生成静态化html,第二框架性的易于...

    网站安全专家
  • 网站安全检测 对thinkphp通杀漏洞利用与漏洞修复建议

    thinkphp在国内来说,很多站长以及平台都在使用这套开源的系统来建站,为什么会这么深受大家的喜欢,第一开源,便捷,高效,生成静态化html,第二框架性的易于...

    技术分享达人
  • 【漏洞通报】ThinkPHP3.2.x RCE漏洞通报

    近日,默安玄甲实验室发现网络上出现针对ThinkPHP3.2的远程代码执行漏洞。该漏洞是在受影响的版本中,业务代码中如果模板赋值方法assign的第一个参数可控...

    Khan安全团队
  • webpack带来的安全风险

    最近在资产收集过程中,发现越来越多的vue应用,大部分会使用webpack进行打包,如果没有正确配置,就会导致vue源码泄露。

    ChaMd5安全团队
  • 攻防世界-php_rce

    页面也说明了是ThinkPHP V5版本 百度得知这个版本的确有远程代码执行漏洞

  • 漏洞情报|XStream远程代码执行漏洞风险通告(CVE-2020-26217)

    近日,腾讯云安全运营中心监测到,XStream官方发布安全公告,披露了一个XStream远程代码执行漏洞(漏洞编号:CVE-2020-26217),漏洞被利用...

    云鼎实验室
  • 漏洞情报|Drupal远程代码执行漏洞(CVE-2020-13671)风险通告

    近日,腾讯云安全运营中心监测到,Drupal官方通报了一个Drupal任意文件上传漏洞,该漏洞可使攻击者远程执行恶意代码。漏洞编号CVE-2020-13671...

    云鼎实验室
  • thinkphp网站最新版本6.X漏洞修复解决办法

    大年初五,根据我们SINE安全的网站安全监测平台发现,thinkphp官方6.0版本被爆出高危的网站代码漏洞,该漏洞可导致网站被植入网站木马后门文件也叫webs...

    网站安全专家
  • thinkphp网站最新版本6.X漏洞修复解决办法

    大年初五,根据我们SINE安全的网站安全监测平台发现,thinkphp官方6.0版本被爆出高危的网站代码漏洞,该漏洞可导致网站被植入网站木马后门文件也叫webs...

    技术分享达人
  • ThinkPHP渗透之经验决定成败

    如上图,目标就一个登陆框,最近 Thinkphp 程序很多,根据后台地址结构,猜测可能是 ThinkPHP ,随手输入 xxx 得到 thinkPHP 报错页面...

    HACK学习
  • Tencent Xcheck代码安全检测:ThinkAdmin远程代码执行漏洞预警

    Xcheck是腾讯自研的静态应用安全测试(SAST,Static application security testing)工具。现已支持Python、Node...

    Deen_
  • 网站被劫持 解决网站反复被跳转的处理方案

    临近2019年底,网站安全事件频发,攻击者加大了对网站的攻击力度,一定是在为过年钱做准备,大捞一把过个好年。就在最近,某客户网站被入侵并被篡改了首页代码,网站从...

    网站安全专家
  • 漏洞情报|Apache Struts远程代码执行漏洞风险公告(CVE-2020-17530)

    2020年12月8日,腾讯云安全运营中心监测到,Apache Struts 官方披露了编号为S2-061的远程代码执行漏洞,CVE编号:CVE-2020-17...

    云鼎实验室
  • 漏洞情报|SolarWinds Orion远程代码执行漏洞风险通告(CVE-2020-10148)

    2020年12月28日,腾讯云安全运营中心监测到,SolarWinds Orion被披露出远程代码执行漏洞,漏洞编号CVE-2020-10148。 为避免您的...

    云鼎实验室

扫码关注云+社区

领取腾讯云代金券