zoukankan      html  css  js  c++  java
  • 炒冷饭之ThinkPHP3.2.X RCE漏洞分析

    昨天在朋友圈看到某乙方的安全实验室发布了一个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]=.ApplicationRuntimeLogsHome21_06_30.log
    
    
    标签:ThinkPHP3.2.3 RCE 变量覆盖 文件包含 代码执行

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

     发现并没有这样写的

    于是手工构造了一下:

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

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

     然后根据payload 继续测试,&value[_filename]=.ApplicationRuntimeLogsHome21_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方法中,处理后调用BehaviorParseTemplateBehavior类中的run方法处理$params这个带有日志文件路径的值。

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

    进入ThinkTemplate类中的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缓存技术的多种方法
    超赞的Linux软件分享(持续更新)
    Android与IOS的优缺点比较 对 Android 与 IOS 比较是个个人的问题。 就好比我来说,我两个都用。我深知这两个平台的优缺点。所以,我决定分享我关于这两个移动平台的观点。另外,然后谈谈我对新的 Ubuntu 移动平台的印象和它的优势。 IOS 的优点 虽然这些天我是个十足的 Android 用户,但我必须承认 IOS 在某些方面做的是不错。首先,苹果公司在他们的设备更新方面有更
    简单说说JavaBean的使用
    mysql 压缩版安装
    分布式网站部署
    shiro启用注解方式
    ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决
    windows 下设置nginx负载均衡
    windows mysql 主从热备
  • 原文地址:https://www.cnblogs.com/sevck/p/15012267.html
Copyright © 2011-2022 走看看