JSON格式的胜利:一次未授权接口的曲折发现之旅​
字数 1126 2025-09-01 11:26:11

JSON格式的胜利:未授权接口发现技术详解

1. 渗透测试背景与初始评估

1.1 目标系统

  • 目标URL:http://www.xxxx.com/#/login
  • 系统类型:业务系统登录页面

1.2 初始攻击尝试与结果

  1. 弱口令爆破

    • 尝试组合:admin/admin123、test/123456等
    • 系统响应:"账号或密码错误"
    • 防御机制:触发5分钟锁定策略
  2. 登录绕过尝试

    • 修改Cookie:authenticated=false改为true → 服务端校验失效
    • 删除身份校验参数 → 302重定向至登录页
    • 添加X-Forwarded-For头伪造IP → 无权限响应
  3. 目录扫描

    • 有效发现:/robots.txt、/static/等非敏感路径
    • 结果:大量404响应

2. 关键突破点:前端代码分析

2.1 前端资源分析

  • 开发者工具(F12)发现两个核心JS文件:
    1. vendor.js:第三方库文件
    2. index.js:业务核心代码

2.2 API接口发现

index.js中发现多个API接口路径,包括:

  • /api/user/login
  • /api/user/info
  • /api/data/list
  • /api/config/get

3. 自动化接口探测技术

3.1 手工测试局限性

  • 单个接口测试效率低下
  • 需要系统化的探测方法

3.2 Python自动化脚本实现

import re
import sys
import json

def extract_paths(js_content):
    """
    从JavaScript代码中提取所有以/开头或./开头的路径
    包括带变量的路径处理
    """
    # 模式1: 匹配"/..."形式的路径(带变量处理)
    pattern1 = r'["\'](/[^"\'\s]+)["\']'
    # 模式2: 匹配"./..."形式的相对路径
    pattern2 = r'["\'](\.[^"\'\s]+)["\']'
    
    paths = re.findall(pattern1, js_content) + re.findall(pattern2, js_content)
    return list(set(paths))  # 去重

def main():
    if len(sys.argv) < 2:
        print("Usage: python extract_api.py <js_file>")
        return
    
    with open(sys.argv[1], 'r', encoding='utf-8') as f:
        content = f.read()
    
    api_paths = [path for path in extract_paths(content) if '/api/' in path]
    
    with open('api_list.txt', 'w') as f:
        for path in api_paths:
            f.write(path + '\n')
    
    print(f"Found {len(api_paths)} API paths. Saved to api_list.txt.")

if __name__ == '__main__':
    main()

3.3 脚本功能说明

  1. 使用正则表达式匹配两种路径模式:
    • 绝对路径:以/开头
    • 相对路径:以./开头
  2. 特别筛选包含/api/的路径
  3. 结果去重后保存到api_list.txt

4. 未授权访问漏洞利用

4.1 测试策略

  1. 对发现的API接口进行逐个测试
  2. 重点关注:
    • 无需认证的接口
    • 返回敏感数据的接口
    • 允许修改操作的接口

4.2 典型漏洞场景

  1. 开发环境残留:测试/开发环境接口未移除
  2. 权限校验遗漏:部分接口忘记添加权限控制
  3. 接口协议认知差:开发人员对接口安全理解不足

5. 防御建议

5.1 开发阶段

  1. 实施统一的API网关进行权限控制
  2. 自动化API文档生成与安全检查
  3. 开发/测试环境与生产环境严格隔离

5.2 运维阶段

  1. 定期API接口审计
  2. 实施严格的访问控制策略
  3. 敏感接口监控与告警

5.3 安全测试

  1. 将API接口扫描纳入常规安全测试
  2. 特别关注前端暴露的接口路径
  3. 自动化API安全测试工具集成

6. 总结与经验

  1. 关键发现:前端代码常暴露后端API结构
  2. 突破思路:从表面防御转向协议层分析
  3. 核心原则:漏洞常生于逻辑边界的模糊地带
  4. 方法论:自动化工具可大幅提高测试效率

通过这种系统化的方法,安全测试人员可以有效地发现和验证未授权访问漏洞,帮助组织提高系统安全性。

JSON格式的胜利:未授权接口发现技术详解 1. 渗透测试背景与初始评估 1.1 目标系统 目标URL:http://www.xxxx.com/#/login 系统类型:业务系统登录页面 1.2 初始攻击尝试与结果 弱口令爆破 尝试组合:admin/admin123、test/123456等 系统响应:"账号或密码错误" 防御机制:触发5分钟锁定策略 登录绕过尝试 修改Cookie: authenticated=false 改为 true → 服务端校验失效 删除身份校验参数 → 302重定向至登录页 添加X-Forwarded-For头伪造IP → 无权限响应 目录扫描 有效发现:/robots.txt、/static/等非敏感路径 结果:大量404响应 2. 关键突破点:前端代码分析 2.1 前端资源分析 开发者工具(F12)发现两个核心JS文件: vendor.js :第三方库文件 index.js :业务核心代码 2.2 API接口发现 在 index.js 中发现多个API接口路径,包括: /api/user/login /api/user/info /api/data/list /api/config/get 3. 自动化接口探测技术 3.1 手工测试局限性 单个接口测试效率低下 需要系统化的探测方法 3.2 Python自动化脚本实现 3.3 脚本功能说明 使用正则表达式匹配两种路径模式: 绝对路径:以 / 开头 相对路径:以 ./ 开头 特别筛选包含 /api/ 的路径 结果去重后保存到 api_list.txt 4. 未授权访问漏洞利用 4.1 测试策略 对发现的API接口进行逐个测试 重点关注: 无需认证的接口 返回敏感数据的接口 允许修改操作的接口 4.2 典型漏洞场景 开发环境残留 :测试/开发环境接口未移除 权限校验遗漏 :部分接口忘记添加权限控制 接口协议认知差 :开发人员对接口安全理解不足 5. 防御建议 5.1 开发阶段 实施统一的API网关进行权限控制 自动化API文档生成与安全检查 开发/测试环境与生产环境严格隔离 5.2 运维阶段 定期API接口审计 实施严格的访问控制策略 敏感接口监控与告警 5.3 安全测试 将API接口扫描纳入常规安全测试 特别关注前端暴露的接口路径 自动化API安全测试工具集成 6. 总结与经验 关键发现 :前端代码常暴露后端API结构 突破思路 :从表面防御转向协议层分析 核心原则 :漏洞常生于逻辑边界的模糊地带 方法论 :自动化工具可大幅提高测试效率 通过这种系统化的方法,安全测试人员可以有效地发现和验证未授权访问漏洞,帮助组织提高系统安全性。