0x00 简介
ThinkPHP3.2的远程代码执行漏洞。该漏洞是在受影响的版本中,业务代码中如果模板赋值方法assign的第一个参数可控,则可导致模板文件路径变量被覆盖为携带攻击代码的文件路径,造成任意文件包含,执行任意代码。
环境
windows 10
phpstudy 5.6
Thinkphp 3.2.3完整版
0x01 复现过程
demo:
demo代码说明:如果需要测试请把demo代码放入对应位置,代码位置:ApplicationHomeControllerIndexController.class.php,因为程序要进入模板渲染方法方法中,所以需要创建对应的模板文件,内容随意,模板文件位置:ApplicationHomeViewIndex (View没有Index文件夹需要自己创建)
<?php
namespace HomeController;
use ThinkController;
class IndexController extends Controller {
public function index($value=''){
$this->assign($value);
$this->display();
}
}
0x02 利用步骤:
创建log发送请求 注意,m=后面的code不要url编码,否则包含的时候会失败)
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
包含log
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
Debug开启和关闭的路径不同:
开启: ApplicationRuntimeLogsCommon<log>
关闭: ApplicationRuntimeLogsHome<log>
0x03 漏洞点分析
1.assign函数返回模板变量
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
2.到display函数开始解析
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
3.到达View.Class.php发现把payload传入到Hook::Listen函数
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
4.进入循环在将payload传入self::exec函数
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
5.调用BehaviorParseTemplateBehavior类 (将log文件写入缓存php)
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
6.调用fetch函数
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
最后load函数加载
![ThinkPHP3.2.x RCE漏洞复现 ThinkPHP3.2.x RCE漏洞复现]()
(不会描述,原文章描述的很好)
参考链接
https://mp.weixin.qq.com/s/_4IZe-aZ_3O2PmdQrVbpdQ
https://blog
文章标题:ThinkPHP3.2.x RCE漏洞复现
本文作者:九世
发布时间:2021-07-12, 17:32:20
最后更新:2021-07-12, 17:46:23
原始链接:http://422926799.github.io/posts/94587123.html
版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。
最后
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
无害实验室拥有对此文章的修改和解释权如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的
本文始发于微信公众号(无害实验室sec):ThinkPHP3.2.x RCE漏洞复现
评论