昨天传的沸沸扬扬的Thinkphp RCE,分析了一下看了看,其实是个相当鸡肋的漏洞,话不多说,咱们进入正题
补丁链接:
https://github.com/top-think/framework/commit/4c328dc99c575f61b58742a46b053f3e7c0b7a32
靶机环境搭建:
Composer安装存在漏洞版本的thinkphp,修改app/middleware.php 开启多语言
问题存在于thinkmiddlewareLoadLangPack
跟入vendor/topthink/framework/src/think/middleware/LoadLangPack.php
handle函数
关键函数为detect,进入参数污染阶段
可以在这三处污染$langSet
当语言设置中allow_lang_list 为空时,成功污染参数,并将污染后的参数返回
此时$langset 已经为经过我们污染的参数,跟入函数switchLangSet
vendor/topthink/framework/src/think/Lang.php
此时参数污染至load 函数,跟入load函数
vendor/topthink/framework/src/think/Lang.php
此时参数污染至parse函数
vendor/topthink/framework/src/think/Lang.php
由于vendor/topthink/framework/src/think/Lang.php:switchLangSet将尾缀直接拼接,所以type为php,成功包含
简单写个poc,在根目录创建个1.php
打一下
成功包含
看一下修复方案
将污染后的值进行了正则匹配,过滤掉了../不再能跳目录,所以修复了
凌日实验室近期内可能会进行公众号迁移,望周知
原文始发于微信公众号(远洋的小船):Thinkphp文件包含漏洞分析及复现
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论