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方法。首先看一