Js跟踪到未授权访问
字数 1194 2025-08-10 08:28:42

JavaScript 验证绕过漏洞分析与防御

0x00 漏洞概述

本文分析了一个通过跟踪JavaScript代码发现的后台未授权访问漏洞。攻击者通过分析登录页面的JavaScript验证逻辑,发现系统仅验证用户名而忽略了密码和验证码的校验,从而实现了未授权访问后台管理系统的攻击。

0x01 漏洞发现过程

1. 初始分析

  • 目标系统:http://xxx.xxxx.com/login.do
  • 原始注入漏洞已修复(通过RSA加密验证输入)

2. JavaScript代码跟踪

发现关键文件:login.min.js,其中包含以下重要信息:

// 定义验证变量
a -> loginId (用户名)
b -> password (密码)
c -> verifycode (验证码)

// 关键接口
/frameword/login_login.do  // 登录验证接口
/frameword/login_toManage.do  // 后台管理接口

3. 验证逻辑分析

JavaScript中的验证逻辑存在缺陷:

post(baseUrl_+"/framework/login_login.do",
    {loginId:a,password:b,verifycode:c,abc:Math.random()},
    function(a){
        "true"==a ? 
        window.location=baseUrl_+"/framework/login_toManage.do" : 
        "code Faild" == a ? ...
    }
)

关键问题:系统仅验证了loginId参数(a),而忽略了passwordverifycode的校验。

0x02 漏洞利用步骤

  1. 构造请求

    • 使用已知或猜测的有效用户名(如admin)
    • 密码和验证码可随意填写
  2. 直接访问后台接口

    • 在验证通过后,直接访问/framework/login_toManage.do
    • 成功获取管理员权限
  3. 后续利用

    • 利用后台功能(如文件上传)获取Webshell
    • 进一步渗透内网

0x03 漏洞原理

该漏洞属于客户端验证不完整导致的安全问题,具体表现为:

  1. 验证逻辑缺陷

    • 前端JavaScript仅验证用户名有效性
    • 后端未对密码和验证码进行二次验证
  2. 接口暴露

    • 后台管理接口/framework/login_toManage.do未做权限校验
    • 可直接通过URL访问
  3. 信任前端验证

    • 系统过度信任前端传递的参数
    • 缺乏服务端完整的验证机制

0x04 防御措施

1. 服务端完整验证

// 伪代码示例
public boolean validateLogin(String username, String password, String verifyCode) {
    // 验证所有必填参数
    if(isEmpty(username) || isEmpty(password) || isEmpty(verifyCode)) {
        return false;
    }
    
    // 验证验证码
    if(!verifyCode.equals(session.get("verifyCode"))) {
        return false;
    }
    
    // 验证用户名密码
    User user = userDao.getByUsername(username);
    if(user == null || !password.equals(user.getPassword())) {
        return false;
    }
    
    return true;
}

2. 接口权限控制

  • 对所有管理接口添加权限校验
  • 使用拦截器或过滤器验证会话有效性

3. 安全开发建议

  1. 前后端分离验证

    • 前端可做基础验证提升用户体验
    • 后端必须做完整验证确保安全
  2. 敏感接口保护

    • 管理接口不应直接暴露
    • 应通过中间层进行权限控制
  3. 代码混淆与压缩

    • 对前端JavaScript进行混淆处理
    • 避免敏感信息泄露
  4. 日志监控

    • 记录所有登录尝试
    • 设置异常登录告警

0x05 漏洞挖掘技巧

  1. JavaScript分析

    • 审查所有与认证相关的JS文件
    • 查找关键接口和验证逻辑
  2. 接口枚举

    • 尝试直接访问发现的接口
    • 测试参数最小集
  3. 逻辑漏洞测试

    • 尝试省略非必需参数
    • 测试边界条件和异常输入
  4. 工具辅助

    • 使用Burp Suite拦截和分析请求
    • 利用浏览器开发者工具调试JavaScript

0x06 总结

本案例展示了由于验证逻辑不完整导致的严重安全漏洞。开发人员应始终遵循"不信任前端"的原则,在服务端实现完整的验证机制。安全测试人员在进行渗透测试时,应特别关注JavaScript验证逻辑和隐藏接口,这些往往是发现逻辑漏洞的关键点。

JavaScript 验证绕过漏洞分析与防御 0x00 漏洞概述 本文分析了一个通过跟踪JavaScript代码发现的后台未授权访问漏洞。攻击者通过分析登录页面的JavaScript验证逻辑,发现系统仅验证用户名而忽略了密码和验证码的校验,从而实现了未授权访问后台管理系统的攻击。 0x01 漏洞发现过程 1. 初始分析 目标系统: http://xxx.xxxx.com/login.do 原始注入漏洞已修复(通过RSA加密验证输入) 2. JavaScript代码跟踪 发现关键文件: login.min.js ,其中包含以下重要信息: 3. 验证逻辑分析 JavaScript中的验证逻辑存在缺陷: 关键问题:系统仅验证了 loginId 参数(a),而忽略了 password 和 verifycode 的校验。 0x02 漏洞利用步骤 构造请求 : 使用已知或猜测的有效用户名(如admin) 密码和验证码可随意填写 直接访问后台接口 : 在验证通过后,直接访问 /framework/login_toManage.do 成功获取管理员权限 后续利用 : 利用后台功能(如文件上传)获取Webshell 进一步渗透内网 0x03 漏洞原理 该漏洞属于 客户端验证不完整 导致的安全问题,具体表现为: 验证逻辑缺陷 : 前端JavaScript仅验证用户名有效性 后端未对密码和验证码进行二次验证 接口暴露 : 后台管理接口 /framework/login_toManage.do 未做权限校验 可直接通过URL访问 信任前端验证 : 系统过度信任前端传递的参数 缺乏服务端完整的验证机制 0x04 防御措施 1. 服务端完整验证 2. 接口权限控制 对所有管理接口添加权限校验 使用拦截器或过滤器验证会话有效性 3. 安全开发建议 前后端分离验证 : 前端可做基础验证提升用户体验 后端必须做完整验证确保安全 敏感接口保护 : 管理接口不应直接暴露 应通过中间层进行权限控制 代码混淆与压缩 : 对前端JavaScript进行混淆处理 避免敏感信息泄露 日志监控 : 记录所有登录尝试 设置异常登录告警 0x05 漏洞挖掘技巧 JavaScript分析 : 审查所有与认证相关的JS文件 查找关键接口和验证逻辑 接口枚举 : 尝试直接访问发现的接口 测试参数最小集 逻辑漏洞测试 : 尝试省略非必需参数 测试边界条件和异常输入 工具辅助 : 使用Burp Suite拦截和分析请求 利用浏览器开发者工具调试JavaScript 0x06 总结 本案例展示了由于验证逻辑不完整导致的严重安全漏洞。开发人员应始终遵循"不信任前端"的原则,在服务端实现完整的验证机制。安全测试人员在进行渗透测试时,应特别关注JavaScript验证逻辑和隐藏接口,这些往往是发现逻辑漏洞的关键点。