热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

炒冷饭之ThinkPHP3.2.XRCE漏洞分析

昨天在朋友圈看到某乙方的安全实验室发布了一个ThinkPHP3.2.xRCE漏洞通报,以为TP3.2的版本研究出新的漏洞姿势,刚好记得腾讯的XSRC应该是基于TP3.2的版本进行开

昨天在朋友圈看到某乙方的安全实验室发布了一个ThinkPHP3.2.x RCE漏洞通报,以为TP3.2的版本研究出新的漏洞姿势,刚好记得腾讯的XSRC应该是基于TP3.2的版本进行开发的,于是跟进了这个漏洞。

 

根据描述说:

标题:ThinkPHP3.2.x_assign方法第一个变量可控=>变量覆盖=>任意文件包含=>RCE
作者:北门
-王境泽@玄甲实验室
审稿:梦想小镇
-晨星@玄甲实验室
攻击方式:远程
漏洞危害:严重
攻击url: http:
//x.x.x.x/index.php?m=Home&c=Index&a=index&value[_filename]=.\Application\Runtime\Logs\Home_06_30.log

标签:ThinkPHP3.
2.3 RCE 变量覆盖 文件包含 代码执行

于是开始对XSRC的源码进行审计:

 

 发现并没有这样写的

于是手工构造了一下:

 

 把$key的变量移除search_key的,变为第一个参数为可控变量。

根据payload发现,这个RCE需要依赖本地文件包含,TP的有个runtime log可以记录错误model到log中,构造比较简单index.php?c=

 

 然后根据payload 继续测试,&value[_filename]=.\Application\Runtime\Logs\Home\21_06_30.log,(LOG修改自己的日期),发现依旧不成功,决定再继续读一遍他的分析,附图直接引用文章上的,已经列出的分析很清晰了

 

 可控变量进入assign方法赋值给$this→tVar变量:

 

 

赋值结束后进入display方法中,display方法开始解析并获取模板文件内容,此时模板文件路径和内容为空:

 

 

程序进入fetch方法中,传入的参数为空,程序会去根据配置获取默认的模板文件位置(./Application/Home/View/Index/index.html)。之后,系统配置的默认模板引擎为think,所以程序进入else分支,获取$this→tVar变量值赋值给$params,之后进入Hook::listen方法中。l

 

 

listen方法处理后,进入exec方法中

 

 

进入exec方法中,处理后调用Behavior\ParseTemplateBehavior类中的run方法处理$params这个带有日志文件路径的值。

 

 

程序进入run方法中,一系列判断后,进入else分支,调用Think\Template类中的fetch方法对变量$_data(为带有日志文件路径的变量值)进行处理。

 

 

进入Think\Template类中的fetch方法,获取缓存文件路径后,进入Storage的load方法中。

 

 

跟进到Storage的load方法中,$_filename为之前获取的缓存文件路径,$var则为之前带有_filename=日志文件路径的数组,$vars不为空则使用extract方法的EXTR_OVERWRITE默认描述对变量值进行覆盖,之后include该日志文件路径,造成文件包含。

 

 

 

 

这个是摘抄分析的原文,这里有个重点是$assign的第一个参数,将会导入TP中,获取$this→tVar变量值赋值给$params

 

最终被include,文件包含。

 然后修改paylload:

 

 

 

成功执行,这个漏洞主要依赖代码的xxx[_filename] 在和同事交流的时候,发现这个洞,其实14年就提处来了,并且乌云已经报告过了,不知道为什么今天又发出来了。。

phith0n之前分析过一个类似的:CodeIgniter框架内核设计缺陷可能导致任意代码执行

https://bugs.leavesongs.com/php/codeigniter%E6%A1%86%E6%9E%B6%E5%86%85%E6%A0%B8%E8%AE%BE%E8%AE%A1%E7%BC%BA%E9%99%B7%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%E4%BB%BB%E6%84%8F%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C/

wooyun之前提交的这个:ThinkPHP远程代码执行隐患(需满足特定条件)

https://wooyun.laolisafe.com/bug_detail.php?wybug_id=wooyun-2014-051906

分析的逻辑也都一样,思路不错,可惜是很久之前的,当做是个炒冷饭吧,可以留作一个后门小技巧。

 

【漏洞通报】ThinkPHP3.2.x RCE漏洞通报

https://mp.weixin.qq.com/s/_4IZe-aZ_3O2PmdQrVbpdQ

 

注明:本文章无恶意攻击任何厂商并尊重厂商技术实力,应该是漏洞的作者可能也没发现这个是历史漏洞。

【版权所有@Sevck 博客地址http://www.cnblogs.com/sevck】 可以转载,注明出处.



推荐阅读
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文详细介绍了跨站脚本攻击(XSS)的基本概念、工作原理,并通过实际案例演示如何构建XSS漏洞的测试环境,以及探讨了XSS攻击的不同形式和防御策略。 ... [详细]
  • 本文探讨了在 PHP 的 Zend 框架下,使用 PHPUnit 进行单元测试时遇到的 Zend_Controller_Response_Exception 错误,并提供了解决方案。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文探讨了在不同场景下如何高效且安全地存储Token,包括使用定时器刷新、数据库存储等方法,并针对个人开发者与第三方服务平台的不同需求提供了具体建议。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Unity技巧:实现背景音乐的开关功能
    本文详细介绍了如何在Unity中通过脚本控制背景音乐的开启与关闭,适合初学者参考。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • 开发笔记:每篇半小时1天入门MongoDB——3.MongoDB可视化及shell详解
    开发笔记:每篇半小时1天入门MongoDB——3.MongoDB可视化及shell详解 ... [详细]
  • 本文详细探讨了编程中的命名空间与作用域概念,包括其定义、类型以及在不同上下文中的应用。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有