热门标签 | 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



推荐阅读
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • DedeCMS 6月7日补丁更新后版权链接问题分析与解决
    本文探讨了在安装DedeCMS官方于6月7日发布的最新安全补丁后,出现的版权链接问题。更新完成后,底部自动生成了“Power by DedeCMS”的链接,尽管配置文件中的`cfg_powerby`字段并未包含相关信息。文章详细分析了这一现象的原因,并提供了有效的解决方法,帮助用户快速恢复网站的正常显示。 ... [详细]
  • MySQL作为一款广泛使用的关系型数据库管理系统,在实际应用中,许多用户习惯于使用root账户进行操作,但这会带来显著的安全隐患。本文将详细探讨如何通过创建专用账户和实施严格的权限管理,有效规避以root用户运行MySQL所带来的潜在安全威胁。同时,文章还将提供一系列最佳实践,帮助用户增强数据库的整体安全性。 ... [详细]
  • FreeBSD环境下PHP GD库安装问题的详细解决方案
    在 FreeBSD 环境下,安装 PHP GD 库时可能会遇到一些常见的问题。本文详细介绍了从配置到编译的完整步骤,包括解决依赖关系、配置选项以及常见错误的处理方法。通过这些详细的指导,开发者可以顺利地在 FreeBSD 上完成 PHP GD 库的安装,确保其正常运行。此外,本文还提供了一些优化建议,帮助提高安装过程的效率和稳定性。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 成都服务器租赁适用于哪些网站业务部署——Vecloud专业解析
    成都,作为四川省的省会,不仅是西南地区唯一的副省级城市,也是国家重要的高新技术产业基地和商贸物流中心。Vecloud专业解析指出,成都服务器租赁服务特别适合各类网站业务的部署,尤其是需要高效、稳定和安全的在线应用。无论是电子商务平台、内容管理系统还是大数据分析,成都的服务器租赁都能提供强大的支持,满足不同企业的需求。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 本文深入解析了HTML框架集(FRAMESET)的使用方法及其应用场景。首先介绍了几个关键概念,如如何通过FRAMESET标签将主视图划分为多个独立的区域,每个区域可以加载不同的HTML文件。此外,还详细探讨了FRAMESET在实际开发中的优缺点,并提供了具体的实例代码,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 近期,针对Axis2默认凭据漏洞的攻击案例在安全社区引起了广泛关注。这些攻击通常利用Axis2的默认用户名和密码进行渗透测试,技术手段相对固定。本文在综合分析多个案例的基础上,详细探讨了该漏洞的安全风险,并提出了有效的防范措施,以帮助企业和开发者加强Web服务的安全防护。 ... [详细]
  • 在PHP中使用`exec`函数执行Shell命令时,需要特别注意安全性问题。当使用来自远程的数据构建命令时,极易引发命令注入漏洞。本文详细探讨了如何避免使用污染数据,确保系统命令的安全执行,并提供了多种防护措施和最佳实践。 ... [详细]
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社区 版权所有