热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Thinkphp多语言RCE

七月份的时候挖到这个洞,卖给了国内一个项目,如今距离修复的 commit 已经过去了将近三个月,在这里公开漏洞细节影响范围Thinkphp,v6.0.1~v6.0.13,v5.0.

七月份的时候挖到这个洞,卖给了国内一个项目,如今距离修复的 commit 已经过去了将近三个月,在这里公开漏洞细节



影响范围

Thinkphp,v6.0.1~v6.0.13,v5.0.x,v5.1.x


fofa指纹

header="think_lang"

简单描述

如果 Thinkphp 程序开启了多语言功能,那就可以通过 get、header、COOKIE 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含这个 trick 即可实现 RCE。


攻击条件



  1. 开启多语言功能


thinkphp6 ,打开多语言功能

https://www.kancloud.cn/manual/thinkphp6_0/1037637

app/middleware.php :

php
// 全局中间件定义文件
return [
// 全局请求缓存
// \think\middleware\CheckRequestCache::class,
// 多语言加载
\think\middleware\LoadLangPack::class,
// Session初始化
// \think\middleware\SessionInit::class
];

thinkphp5 ,打开多语言功能

https://static.kancloud.cn/manual/thinkphp5/118132

config/app.php

application/config.php

'lang_switch_on' => true

测试环境搭建


这里以 thinkphp 6.0.12 为例


官方下载代码:

https://github.com/top-think/think

root@ubuntu:/var/www/#git clone https://github.com/top-think/think.git think_git
root@ubuntu:/var/www/#cd think_git
root@ubuntu:/var/www/think_git#git checkout v6.0.12

更改 composer.json ,安装 v6.0.12 :

"require": {
"php": ">=7.2.5",
"topthink/framework": "6.0.12",
"topthink/think-orm": "^2.0"
},

root@ubuntu:/var/www/think_git#composer install

然后打开多语言功能:

app/middleware.php

php
// 全局中间件定义文件
return [
// 全局请求缓存
// \think\middleware\CheckRequestCache::class,
// 多语言加载
\think\middleware\LoadLangPack::class,
// Session初始化
// \think\middleware\SessionInit::class
];

启动 docker compose :

version: "3.3" # optional since v1.27.0
services:
web:
image: php:7.4-apache
ports:
- "8888:80"
volumes:
- /var/www/think_git:/var/www/html

进行攻击

header 、COOKIE 、query string 都可以作为 payload 的传入点,进行目录穿越 + pearcmd 文件包含,可以写 webshell :

# exp

pearcmd 文件包含这个 trick ,可以参考 p 牛的文章:https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp



漏洞分析、调试


thinkphp 6

调试环境:windows ,php7.3,thinkphp6.0.12

打开多语言中间件:

image-20220708225627088

访问:

http://127.0.0.1:82/?lang=../../../../../public/index

每个 middleware 的 handle() 函数都会被调用,这里断在 LoadLangPack.php 的 handle() ,直接在最开头调用 $langset = $this->detect($request); :

image-20220708234013378

跟进这个 detect() ,可以看到依次排查了 GET["lang"] 、HEADER["think-lang"] 、COOKIE["think_lang"] ,并且将其不做任何过滤,直接赋值给了 $langSet :

image-20220708234039203

然后默认情况下,即 allow_lang_list 这个配置为空,$langSet 被赋值给 $range,而 $range 被返回:

image-20220708234055980

回到 handle() ,如果返回的 $langset 不等于默认的 langset ,即 zh-cn ,那么就会调用 $this->lang->switchLangSet($langset) ,正是在这里面实现了 文件包含:

image-20220708234225249

跟进 switchLangSet() ,可以看到调用了 $this->load() ,而传入的参数直接拼接而成,本例中传入的最终结果是 D:\var\www\think6\vendor\topthink\framework\src\lang\../../../../../index.php :

image-20220708234319076

跟进这个 load() ,可以看到直接将传入的参数作为文件名,先判断文件在不在,如果在就传入 parse() 中,进行文件包含:

image-20220708234349146

跟进 parse() ,可以看到进行了文件包含:

image-20220708234424907

既然可以通过目录穿越实现任意 php 文件的包含,那么用 pearcmd 文件包含这个 trick ,就能 RCE 了


thinkphp 5

调试环境:windows ,php7.3,thinkphp5.1.41

打开多语言中间件:

image-20220711145319484

访问

http://127.0.0.1:81/?lang=../../../../../public/index

调用了 Lang.php 中的 detect(),包含的文件名可以来自 get 、COOKIE:

image-20220711145947527

然后进行文件包含:

image-20220711150159797


修复漏洞

官方已完成修复:

https://github.com/top-think/framework/commit/c4acb8b4001b98a0078eda25840d33e295a7f099



推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 如何找到并加速缓慢的代码,提高性能
    本文讲述了如何找到并加速缓慢的代码,提高系统性能。作者通过优化内部循环、利用多处理器运行内部循环以及减少内部循环运行次数等方式来提高代码的执行效率。以一个游戏开发中的案例为例,作者介绍了如何通过调查和排查问题,找到导致帧率下降的设计缺陷,并进行修复。文章总结了优化代码的关键点,并提供了一些实用的方法和技巧。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 2019独角兽企业重金招聘Python工程师标准
    本文介绍了2019独角兽企业重金招聘Python工程师的标准。同时解释了Alpha、Beta、RC、GA、RTM、OEM、RVL、EVAL、RTL、α、β、λ等相关术语的含义和区别。 ... [详细]
  • 微软发布“年终”补丁  360与谷歌Project Zero同获致谢
      北京时间12月10日,微软例行补丁日发布了12月安全公告,修复了Windows、IE、Office等系统和软件的24处漏洞微软补丁官网。本月补丁日谷歌Pro ... [详细]
  • 物联网市场:得安全者得天下
    物,联网,市场,得 ... [详细]
  • 玩转直播系列之消息模块演进(3)
    一、背景即时消息(IM)系统是直播系统重要的组成部分,一个稳定的,有容错的,灵活的,支持高并发的消息模块是影响直播系统用户体验的重要因素。IM长连接服务在直播系统有发挥着举足轻重的 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • Shodan简单用法Shodan简介Shodan是互联网上最可怕的搜索引擎,与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“ ... [详细]
author-avatar
hengldkslf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有