出品|长白山攻防实验室(ID:A_Tree)

0x00

声明

以下内容,来自长白山攻防实验室的A_Tree作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

0x02

漏洞介绍

ThinkPHP是一个开源免费的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。

近日,监测到其出现文件包含,代码执行漏洞,漏洞编号:QVD-2022-46174,当ThinkPHP开启了多语言功能时,攻击者可以通过lang参数和目录穿越实现文件包含,当存在其他扩展模块如 pear 扩展时,攻击者可进一步利用文件包含实现远程代码执行。

0x03

漏洞类型

文件包含,代码执行

0x04

 漏洞影响范围

ThinkPHP   6.0.1—6.0.13,5.0.x,5.1.x

0x05

漏洞复现

漏洞复现环境:

GITHUB开源项目:

基于ThinkPHP5.0搭建的NIUSHOP开源建站系统。

环境链接:https://github.com/znlccy/niushop

此系统默认没有开启ThinkPHP多语言功能,需要做出如下修改。

修改/application/config.php文件中的lang_swit-ch_on参数为Ture

修改后再主页测试全局lang参数是否生效:

?lang=zh-cn

?lang=en-us

上述两个请求,发现语言进行了切换,环境即搭建成功。在网站根目录创建phpinfo文件作为测试包含文件。

访问URL:?lang=..\..\info

执行info文件,漏洞利用成功。

0x06

漏洞分析

先看PHP官方补丁内容:在think5中修改的文件定位在了think\lang.php的detect方法,定位漏洞位置。

观察未修复的漏洞文件:在detect()其结果为定义了一个self::$range,通过源码分析可得,此参数受到下列参数影响:

我们将其中:$_GET[self::$langDetectVar]输出出来,验证参数内容的可控程度,其参数内容完全可控,并且detect的返回值完全由lang参数决定。

我们继续跟进调用Lang::detect()的文件内容:App.php

App.php文件内容:在config中的多语言机制开启时(lang_switch_on = true)执行了detect()将self::range通过URL中发lang参数定义,我们在上面分析过了,接下来分别执行了range()方法和load()方法。

我们首先跟进range()方法:在App.php中调用range为Lang::range() 因此,range()此时直接return了self::$range此参数在detect中被URL的lang参数控制。

Langset(Lang::range()):继续跟进如langset方法,此时$lang为URL中的lang(污点参数)

非空后将类中私有langset进行赋值,并且$this全部返回。

接下来执行Lang::load()方法:在进入方法前,其中传入load()的变量中,$request->langset()为我们URL中的lang(污点参数)。

跟进lang():可见file参数被转换为列表后进行遍历,当遍历的路径存在时便include目标,file中的内容为我们可控内容,即导致文件包含。

将列表file输出,方便观察:可见内容为从application\lang路径和think\lang路径加上我们URL中lang参数的内容,但是需要我们的此时lang参数为..\..\info.php但是在file列表的内容为info.php.php因此我们不能加上php的后缀。

那么此时我们只需要保证is_file($_file)为真即可包含实现文件包含漏洞。

?Lang = ..\..\info

0x07

总结

此漏洞造成原因相对简单,就是输入参数过滤不严格,修复排查方案为查看当前网站源代码中app目录下的config文件中lang_switch_on是否True即可,如果涉及到语言切换的需要,那么就更新thinkPHP或者手动改一下Lang:: detect()中的源码也行。See Bay!

欢迎关注长白山攻防实验室微信公众号

定期更新优质文章分享

ThinkPHP文件包含漏洞分析相关推荐

  1. CVE-2020-1938 幽灵猫( GhostCat ) Tomcat-Ajp协议 任意文件读取/JSP文件包含漏洞分析

    title: CVE-2020-1938 幽灵猫( GhostCat ) Tomcat-Ajp协议 任意文件读取/JSP文件包含漏洞分析 date: 2021-05-19 01:07:08 categ ...

  2. 文件包含漏洞分析和防御

    目录 简介 形成原因 文件包含函数 判断类型 文件包含 本地文件包含(LFI) 防御 本地包含技巧 php://协议的使用 data:协议 日志包含: session 远程文件包含(RFI) 文件读取 ...

  3. test.php.bak,记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)

    题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...

  4. Tomcat AJP 文件包含漏洞(CVE-2020-1938)

    目录 1.漏洞简介 2.AJP13 协议介绍 Tomcat 主要有两大功能: 3.Tomcat 远程文件包含漏洞分析 4.漏洞复现 5.漏洞分析 6.RCE 实现的原理 1.漏洞简介 2020 年 2 ...

  5. 文件包含漏洞不能包含php,ThinkPHP5漏洞分析之文件包含

    本系列文章将针对 ThinkPHP 的历史漏洞进行分析,今后爆出的所有 ThinkPHP 漏洞分析,也将更新于 ThinkPHP-Vuln 项目上.本篇文章,将分析 ThinkPHP 中存在的 文件包 ...

  6. ThinkPHP Lang多语言本地文件包含漏洞(QVD-2022-46174)漏洞复现

    1.漏洞描述 ThinkPHP是一个在中国使用较多的PHP框架.在其6.0.13版本及以前,存在一处本地文件包含漏洞.当ThinkPHP开启了多语言功能时,攻击者可以通过lang参数和目录穿越实现文件 ...

  7. 熊海CMS_V1.0代码审计与漏洞分析及采坑日记(一)--文件包含漏洞

    前言 最近几天在给协会的学弟讲代码审计入门相关内容,便找了这个熊海CMS_V1.0来教学,结果在这个过程中遇到蛮多问题的,于是这篇文章详细记录了对熊海CMS_V1.0从搭建到审计与漏洞分析的过程,其中 ...

  8. [代码审计]ThinkPHP5的文件包含漏洞

    目录 漏洞影响范围 漏洞分析 POC 漏洞影响范围 加载模版解析变量时存在变量覆盖问题,导致文件包含漏洞的产生 漏洞影响版本:5.0.0<=ThinkPHP5<=5.0.18 .5.1.0 ...

  9. Apache Tomcat 文件包含漏洞(CVE-2020-1938)

    安全公告编号:CNTA-2020-0004 2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020- ...

最新文章

  1. mongodb查找报错
  2. rails设置表单默认值amp;amp;隐藏表单
  3. 你好,这是微视AI还原的李焕英
  4. 米兔点读笔点读包_小米米兔点读笔评测:养成教育只要轻松一点
  5. 一起学nRF51xx 8 -  Time
  6. MKL学习——向量操作
  7. Go在谷歌:以软件工程为目的的语言设计
  8. 智能会议系统---(4)VOIP 实现
  9. 在字节,校招刚入职就得到业界大会talk机会是一种怎样的体验?
  10. AtCoder Beginner Contest 136 解题报告
  11. cmd echo写入shell_为什么说Shell脚本就是最好的教程和笔记呢?
  12. Java架构师—PDMan数据库建模工具使用
  13. 三极管在ad中的原理图库_AD18 原理图库
  14. Remi教程GUI设计番外篇
  15. 大白话图解:什么是 CDN
  16. 重心法选址 matlab程序,Excel重心法选址计算题的详细步骤
  17. CRM:网站证书过期怎么办
  18. 计算机毕业设计JAVA家庭健康预警系统mybatis+源码+调试部署+系统+数据库+lw
  19. 面试官:2 年招到 18 个前端教你怎么招人
  20. (论文翻译)AutoEncoder 聚类算法 - DEPICT

热门文章

  1. 统计字符串中所包含的各个英文小写字符及其对应的数量。
  2. 泰拉瑞亚手机版html,泰拉瑞亚提基套装怎么得 提基套装属性详解
  3. 泰拉瑞亚 Terraria Mac版
  4. 泰拉瑞亚 (Terraria v1.4.1.2) ---PC
  5. 北航计算机九推经验,前辈种树 | 工科九推经验贴
  6. 第10课:主流的分布式消息队列方案解读及比较
  7. 软件产品登记证书申请程序 软件产品登记证书用途
  8. 使用SAS创建日历表
  9. 台式电脑win7计算机无法启动,台式机无法开机怎么重装win7系统
  10. Windows 7系统中的彩蛋“God Mode”