热门标签 | 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】 可以转载,注明出处.



推荐阅读
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
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社区 版权所有