文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ThinkPHP文件包含漏洞分析

2023-09-08 16:16

关注

出品|长白山攻防实验室(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!

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

定期更新优质文章分享

来源地址:https://blog.csdn.net/include_voidmain/article/details/128262482

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯