参考

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

总结

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

点击收藏 | 2 关注 | 2 打赏
  • 动动手指,沙发就是你的了!
登录 后跟帖