Thinkphp文件包含漏洞分析及复现

admin 2022年12月13日02:16:15评论106 views字数 803阅读2分40秒阅读模式

昨天传的沸沸扬扬的Thinkphp RCE,分析了一下看了看,其实是个相当鸡肋的漏洞,话不多说,咱们进入正题

补丁链接:

https://github.com/top-think/framework/commit/4c328dc99c575f61b58742a46b053f3e7c0b7a32


Thinkphp文件包含漏洞分析及复现


靶机环境搭建:

Composer安装存在漏洞版本的thinkphp,修改app/middleware.php 开启多语言

Thinkphp文件包含漏洞分析及复现


问题存在于thinkmiddlewareLoadLangPack
跟入vendor/topthink/framework/src/think/middleware/LoadLangPack.php 
handle函数



Thinkphp文件包含漏洞分析及复现


关键函数为detect,进入参数污染阶段




Thinkphp文件包含漏洞分析及复现

可以在这三处污染$langSet

Thinkphp文件包含漏洞分析及复现
当语言设置中allow_lang_list 为空时,成功污染参数,并将污染后的参数返回
Thinkphp文件包含漏洞分析及复现

此时$langset 已经为经过我们污染的参数,跟入函数switchLangSet
vendor/topthink/framework/src/think/Lang.php

Thinkphp文件包含漏洞分析及复现
此时参数污染至load 函数,跟入load函数
vendor/topthink/framework/src/think/Lang.php
Thinkphp文件包含漏洞分析及复现

此时参数污染至parse函数
vendor/topthink/framework/src/think/Lang.php
Thinkphp文件包含漏洞分析及复现
由于vendor/topthink/framework/src/think/Lang.php:switchLangSet将尾缀直接拼接,所以type为php,成功包含

简单写个poc,在根目录创建个1.php
Thinkphp文件包含漏洞分析及复现打一下

Thinkphp文件包含漏洞分析及复现

成功包含


看一下修复方案


Thinkphp文件包含漏洞分析及复现

将污染后的值进行了正则匹配,过滤掉了../不再能跳目录,所以修复了


凌日实验室近期内可能会进行公众号迁移,望周知

原文始发于微信公众号(远洋的小船):Thinkphp文件包含漏洞分析及复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月13日02:16:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Thinkphp文件包含漏洞分析及复现http://cn-sec.com/archives/1459339.html

发表评论

匿名网友 填写信息