暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【漏洞复现】thinkphp6.0之文件上传getshell

Littlebin404安全日常 2020-12-22
3292




















漏洞描述





















2020113thinkphp团队在V6.0.2版本更新中提到修复了可能的session安全隐患,该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,特定情况下还能getshell























漏洞描述





















ThinkPHP6.0.0-6.0.1






















环境搭建





















      

Thinkphp6.0下载地址:

https://codeload.github.com/top-think/framework/zip/v6.0.0



根据官方提示,复现环境使用php 7.3.4



注:将composer换成国内镜像,不然创建新项目会卡住,执行:

composer config -g repo.packagist composer https://packagist.phpcomposer.com


tp6源码根目录下创建新项目tp6

composer create-project topthink/think tp6



进入tp6目录,把6.0.2替换成6.0.0的版本,执行:

composer require topthink/framework:6.0.0



在项目根目录下,执行


php think run:



访问 localshost:8000  ,确认环境搭建成功:
























环境搭建





















修改/app/controller/Index.php文件,新增:

session(demo,$_GET[a]);



修改 /app/middleware.php 文件如下,删除SessionInit的注释:



访问tp6项目,使用burpsuit抓包拦截,修改请求包:



注:PHPSESSID的值一定满足32位(包括.php),接着再通过变量a传递任意代码;


Send,返回200,即执行成功



可以看到文件在runtime\session下生成,php脚本也成功写入:



php脚本内容如下:



访问:


localhost:8000/runtime/session/sess_1234567890123456789012345678.php



看到phpinfo的内容,则证明代码执行成功!!!!可上传一句话木马等进行getshell提权等操作。






















漏洞修复




















将thinphp版本更新到官网最新版,即thinkphp6.0.2

或者:

对session id 加一个过滤 使用 ctype_alnum():

$this->id = is_string($id) && strlen($id) === 32ctype_alnum($id) && ? $id :md5(microtime(true) . session_create_id());



安全是一门朴素的学问,分享即进步!



文章转载自Littlebin404安全日常,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论