ThinkPHP文件包含漏洞分析
出品|长白山攻防实验室(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文件包含漏洞分析相关推荐
- CVE-2020-1938 幽灵猫( GhostCat ) Tomcat-Ajp协议 任意文件读取/JSP文件包含漏洞分析
title: CVE-2020-1938 幽灵猫( GhostCat ) Tomcat-Ajp协议 任意文件读取/JSP文件包含漏洞分析 date: 2021-05-19 01:07:08 categ ...
- 文件包含漏洞分析和防御
目录 简介 形成原因 文件包含函数 判断类型 文件包含 本地文件包含(LFI) 防御 本地包含技巧 php://协议的使用 data:协议 日志包含: session 远程文件包含(RFI) 文件读取 ...
- test.php.bak,记一次phpmyadmin 4.8.1 远程文件包含漏洞(BUUCTF web)
题目很简单,一个滑稽 打开源码,发现存在source.php文件 于是访问文件,发现出现一串php源码 提示存在hint.php,于是访问发现一句话 flag not here, and flag i ...
- Tomcat AJP 文件包含漏洞(CVE-2020-1938)
目录 1.漏洞简介 2.AJP13 协议介绍 Tomcat 主要有两大功能: 3.Tomcat 远程文件包含漏洞分析 4.漏洞复现 5.漏洞分析 6.RCE 实现的原理 1.漏洞简介 2020 年 2 ...
- 文件包含漏洞不能包含php,ThinkPHP5漏洞分析之文件包含
本系列文章将针对 ThinkPHP 的历史漏洞进行分析,今后爆出的所有 ThinkPHP 漏洞分析,也将更新于 ThinkPHP-Vuln 项目上.本篇文章,将分析 ThinkPHP 中存在的 文件包 ...
- ThinkPHP Lang多语言本地文件包含漏洞(QVD-2022-46174)漏洞复现
1.漏洞描述 ThinkPHP是一个在中国使用较多的PHP框架.在其6.0.13版本及以前,存在一处本地文件包含漏洞.当ThinkPHP开启了多语言功能时,攻击者可以通过lang参数和目录穿越实现文件 ...
- 熊海CMS_V1.0代码审计与漏洞分析及采坑日记(一)--文件包含漏洞
前言 最近几天在给协会的学弟讲代码审计入门相关内容,便找了这个熊海CMS_V1.0来教学,结果在这个过程中遇到蛮多问题的,于是这篇文章详细记录了对熊海CMS_V1.0从搭建到审计与漏洞分析的过程,其中 ...
- [代码审计]ThinkPHP5的文件包含漏洞
目录 漏洞影响范围 漏洞分析 POC 漏洞影响范围 加载模版解析变量时存在变量覆盖问题,导致文件包含漏洞的产生 漏洞影响版本:5.0.0<=ThinkPHP5<=5.0.18 .5.1.0 ...
- Apache Tomcat 文件包含漏洞(CVE-2020-1938)
安全公告编号:CNTA-2020-0004 2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020- ...
最新文章
- mongodb查找报错
- rails设置表单默认值amp;amp;隐藏表单
- 你好,这是微视AI还原的李焕英
- 米兔点读笔点读包_小米米兔点读笔评测:养成教育只要轻松一点
- 一起学nRF51xx 8 - Time
- MKL学习——向量操作
- Go在谷歌:以软件工程为目的的语言设计
- 智能会议系统---(4)VOIP 实现
- 在字节,校招刚入职就得到业界大会talk机会是一种怎样的体验?
- AtCoder Beginner Contest 136 解题报告
- cmd echo写入shell_为什么说Shell脚本就是最好的教程和笔记呢?
- Java架构师—PDMan数据库建模工具使用
- 三极管在ad中的原理图库_AD18 原理图库
- Remi教程GUI设计番外篇
- 大白话图解:什么是 CDN
- 重心法选址 matlab程序,Excel重心法选址计算题的详细步骤
- CRM:网站证书过期怎么办
- 计算机毕业设计JAVA家庭健康预警系统mybatis+源码+调试部署+系统+数据库+lw
- 面试官:2 年招到 18 个前端教你怎么招人
- (论文翻译)AutoEncoder 聚类算法 - DEPICT
热门文章
- 统计字符串中所包含的各个英文小写字符及其对应的数量。
- 泰拉瑞亚手机版html,泰拉瑞亚提基套装怎么得 提基套装属性详解
- 泰拉瑞亚 Terraria Mac版
- 泰拉瑞亚 (Terraria v1.4.1.2) ---PC
- 北航计算机九推经验,前辈种树 | 工科九推经验贴
- 第10课:主流的分布式消息队列方案解读及比较
- 软件产品登记证书申请程序 软件产品登记证书用途
- 使用SAS创建日历表
- 台式电脑win7计算机无法启动,台式机无法开机怎么重装win7系统
- Windows 7系统中的彩蛋“God Mode”