安全矩阵

 找回密码
 立即注册
搜索
查看: 2707|回复: 0

ThinkPHP6.0 任意文件操作

[复制链接]

141

主题

153

帖子

517

积分

高级会员

Rank: 4

积分
517
发表于 2022-3-10 16:49:57 | 显示全部楼层 |阅读模式
ThinkPHP6.0 任意文件操作imti**** [url=]衡阳信安[/url] 2022-03-10 00:00
参考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
启动session修改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


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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-24 08:21 , Processed in 0.013244 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表