ThinkPHP6.0 任意文件操作
2020-02-01 16:50:13 Author: xz.aliyun.com(查看原文) 阅读量:271 收藏

https://woj.app/6032.html

https://paper.seebug.org/1114/

https://github.com/top-think/framework/commit/1bbe75019ce6c8e0101a6ef73706217e406439f2

从只检测长度为32到增加ctype_alnum

tp6启用.env,感觉跟laravel越来越靠近

根目录cp .example.env .env

修改app/middleware.php

把session初始化下面代码注释去掉

return [

*// 全局请求缓存*
  • // \think\middleware\CheckRequestCache::class,*

  • // 多语言加载*

  • // \think\middleware\LoadLangPack::class,*

  • // Session初始化*

  • *\think\middleware\SessionInit::class

];

修改控制器

在app/controller/Index.php里增加

public function test(){

session(**'demo'**, $_GET[**'c'**]);

}

测试

注意session长度,要为32

如果不是32,会重新设置session

分析

setId会有两次被调用,第一次是读session

第二次是在最后$http->end 执行到SessionInit->end() -> Session->save()

think\Session\Store->save()

跟进

拼接sess_

再拼接目录

得到文件名和目录,创建目录

继续跟进

writeFile

就写入了

第一次写分析漏洞,措辞和分析如果有误,欢迎指教


文章来源: http://xz.aliyun.com/t/7131
如有侵权请联系:admin#unsafe.sh