文章首发于先知社区:https://xz.aliyun.com/t/7131
参考
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初始化下面代码注释去掉
1 | return [ |
修改控制器
在app/controller/Index.php里增加
1 | public function **test(){ |
测试
注意session长度,要为32
如果不是32,会重新设置session
分析
setId会有两次被调用,第一次是读session
第二次是在最后$http->end 执行到SessionInit->end() -> Session->save()
think\Session\Store->save()
跟进
拼接sess_
再拼接目录
得到文件名和目录,创建目录
继续跟进
writeFile
总结
第一次写分析漏洞,措辞和分析如果有误,欢迎指教