65:JS安全&浏览器插件&工具箱等

一、核心前提:为什么要关注JS代码文件?

JS(JavaScript)作为前端核心开发语言,与PHP、JAVA等后端语言有本质区别------​即使没有后端源代码,也能通过浏览器(F12开发者工具)直接查看前端JS源代码​,相当于为渗透测试提供了"白盒测试"的便利。

挖掘JS代码的核心价值的在于:

  • 获取隐藏的URL、接口地址,拓展攻击面;
  • 查找敏感配置信息(如加密算法、APIKey、Token等);
  • 分析前端验证逻辑,寻找绕过方法;
  • 识别开发框架,挖掘框架相关历史漏洞。

二、JS应用安全漏洞核心利用方式

JS代码中的漏洞主要源于"信息泄露""逻辑缺陷""危险函数/框架漏洞",具体利用方式可分为4类,也是本节课重点讲解的内容:

(一)敏感信息泄露(高频高危)

核心是JS代码中未加密、未隐藏的敏感数据被攻击者获取,最典型的就是云服务配置(如阿里云OSS的AccessKeyId、AccessKeySecret)、用户凭证(密码、Token、Session)等。

1. 案例演示(OSS直传场景)

小迪通过本地搭建OSS直传Demo演示,核心代码如下(含漏洞):

复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8"/>
  <title>OSS 直传 Demo</title>
</head>
<body>
  <h2>选择文件直传到 OSS</h2>
  <input type="file" id="fileInput" />
  <button onclick="upload()">上传</button>

  <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk.min.js"></script>
  <script>
    // ⚠️ 漏洞点:敏感信息明文暴露
    const accessKeyId     = '你的AccessKeyId'; // 阿里云访问密钥ID
    const accessKeySecret = '你的AccessKeySecret'; // 阿里云访问密钥Secret
    const bucket          = '你的bucket名字'; // OSS存储桶名称
    const region          = 'oss-cn-hangzhou';   // OSS区域

    // 初始化OSS客户端
    const client = new OSS({
      accessKeyId,
      accessKeySecret,
      bucket,
      region
    });

    async function upload() {
      const file = document.getElementById('fileInput').files[0];
      if (!file) return alert('请先选择文件');

      try {
        const result = await client.put(file.name, file);
        alert('上传成功!地址:' + result.url);
      } catch (e) {
        alert('上传失败:' + e.message);
      }
    }
  </script>
</body>
</html>
2. 漏洞挖掘方法
  • 手动挖掘:浏览器F12 → 进入"Sources"面板,查看所有加载的JS文件,搜索关键字(accessKey、secretKey、token、password、ak/sk等);
  • 工具辅助:使用浏览器插件(如FindSomething),自动扫描JS中的敏感信息,效率更高。
3. 漏洞利用后果

获取AccessKeyId和AccessKeySecret后,攻击者可通过工具(如ak_as后cf利用工具)、在线平台接管目标云平台(如阿里云),查看/控制云产品(云服务器、OSS存储桶等),造成严重的数据泄露和服务器控制权丢失。

4. 利用步骤(实操)
  1. 通过F12/插件获取JS中的ak/sk;
  2. 打开ak_as后cf利用工具,选择对应云厂商(如阿里云);
  3. 填入获取的accessKeyId、accessKeySecret,完成配置;
  4. 执行命令(如cf alibaba ls),查看目标云平台的资源,实现接管。

(二)前端验证逻辑绕过(高频易利用)

核心漏洞:开发者仅在前端JS中做验证逻辑(如登录校验、参数校验),未在后端做二次校验,攻击者可通过抓包修改返回数据,绕过前端限制,实现未授权访问、登录绕过等。

1. 案例演示(登录场景)

本地搭建登录Demo,前端用jQuery写验证逻辑,后端用PHP做简单判断,代码如下:

前端代码(含漏洞):
复制代码
<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="utf-8" />  
    <title>登录 Demo</title>  
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>  
</head>  
<body>  
<h2>登录</h2>  
<form id="loginForm">  
    <input type="text"     name="username" placeholder="用户名" required />  
    <input type="password" name="password" placeholder="密码"   required />  
    <button type="submit">登录</button>  
</form>  
<p id="msg"></p>  

<script>  
    // 前端验证逻辑:仅判断后端返回的code是否为200,无后端二次校验
    $('#loginForm').on('submit', function (e) {  
        e.preventDefault();  
        $.ajax({  
            url: 'login.php',  
            type: 'POST',  
            data: $(this).serialize(),  
            dataType: 'json',  
            success: function (res) {  
                $('#msg').text(res.message || '');  
                if (res.code === 200) {  // 核心判断条件,可被绕过
                    window.location.href = 'home.html'; // 登录成功跳转后台
                }  
            },  
            error: function () {  
                $('#msg').text('网络错误');  
            }  
        });  
    });  
</script>  
</body>  
</html>
后端PHP代码:
复制代码
<?php  
header('Content-Type: application/json');  
header('Access-Control-Allow-Origin: *');   // 本地调试用,可省略  

$u = $_POST['username'] ?? '';  
$p = $_POST['password'] ?? '';  

// 后端仅做账号密码校验,未对前端跳转逻辑做二次限制
if ($u === 'admin' && $p === '123456') {  
    echo json_encode([  
        'code'    => 200,  
        'message' => '登录成功,即将跳转......'  
    ]);  
} else {  
    echo json_encode([  
        'code'    => 403,  
        'message' => '用户名或密码错误!'  
    ]);  
}  
?>
2. 漏洞挖掘与利用步骤
  1. 尝试用错误账号密码登录,抓包查看后端返回数据(此时code为403,登录失败);
  2. 通过F12查看前端JS代码,发现登录成功的判断条件是"res.code === 200";
  3. 在Burp中修改后端返回的code值,将403改为200,然后放包;
  4. 浏览器会触发前端跳转逻辑,成功进入后台页面,实现登录绕过。
3. 漏洞核心原因

开发者误将"前端验证"当作"核心安全校验",忽略了攻击者可通过抓包修改后端返回数据,未在后端对"是否允许跳转后台"做二次权限校验,导致逻辑绕过。

(三)URL、接口地址暴露(拓展攻击面)

JS代码中常会隐藏未公开的URL、接口地址(如后台管理地址、未授权接口、数据查询接口),若这些接口未做身份验证,攻击者可直接访问,造成未授权访问;即使做了验证,也能拓展攻击面,为后续渗透提供方向。

1. 挖掘方法

由于JS代码通常较多,手动排查效率低,推荐使用​FindSomething浏览器插件​,自动扫描页面中所有JS文件包含的URL、接口地址,筛选出敏感地址(如/admin、/api、/user等),逐一测试是否可访问、是否存在未授权漏洞。

2. 利用场景

例如:JS中暴露了后台地址"/admin/home",若该地址未做登录校验,攻击者可直接访问,获取后台管理权限;若暴露了数据查询接口"/api/user/list",可尝试访问获取用户列表,造成数据泄露。

(四)开发框架类漏洞扫描(辅助渗透)

很多Web应用会使用前端框架(如Vue、NodeJS、Angular等)开发,若框架版本较旧,可能存在已知的历史漏洞(如Vue的XSS漏洞、NodeJS的命令注入漏洞),攻击者可通过识别框架类型和版本,挖掘对应漏洞。

1. 工具推荐
  • OWASP PentestKit:浏览器插件,可详细识别网站使用的技术栈(框架类型、版本),并通过SCA模块扫描框架已知漏洞;
  • Wappalyzer:基础框架识别工具,可快速判断网站使用的前端/后端框架,但细节不如OWASP PentestKit;
  • Hack-tools(插件):可生成反弹shell、漏洞利用代码,辅助后续漏洞利用。
2. 实操要点

打开目标网站,启动OWASP PentestKit插件,查看网站技术栈,确认框架版本后,搜索该版本的已知漏洞,结合漏洞详情进行利用(注:部分旧框架漏洞可能已被修复,需结合实际场景验证)。

三、核心总结与注意事项

1. 本节课核心重点

  • JS漏洞的核心挖掘思路:利用浏览器可查看JS源代码的特性,聚焦"信息泄露""逻辑缺陷""框架漏洞";
  • 高频漏洞:敏感信息泄露(ak/sk)、前端验证绕过,是前端渗透中最易利用、危害最大的两类漏洞;
  • 工具使用:重点掌握FindSomething(敏感信息/URL扫描)、OWASP PentestKit(框架漏洞扫描)。

2. 实操注意事项

  • 演示案例均为本地搭建,实际渗透需遵守法律法规,不得未经授权测试真实网站;
  • 前端验证绕过的核心:永远记住"前端验证可被绕过",后端必须做二次校验;
  • 敏感信息泄露的防范:JS中的ak/sk、token等敏感数据,需加密存储或通过后端接口动态获取,避免明文暴露。

3. 与后续学习的关联

本节课的JS漏洞利用,是Web攻防的前端补充,后续渗透测试中,需结合后端漏洞(如SQL注入、越权),形成"前端+后端"的完整渗透思路,同时为后续框架漏洞、代码审计打下基础。

相关推荐
csbysj20202 小时前
Rust 输出到命令行
开发语言
空中海2 小时前
第三章: Vue 3组合式 API(Composition API)
前端·javascript·vue.js
RFID舜识物联网2 小时前
RFID耐高温标签:汽车喷涂线智能追溯的破局之道
大数据·人工智能·科技·物联网·安全·汽车
likerhood2 小时前
Java 中的 `clone()` 与 `Cloneable` 接口详解
java·开发语言·python
前端技术2 小时前
华为余承东:鸿蒙终端设备数突破5500万
java·前端·javascript·人工智能·python·华为·harmonyos
Adellle2 小时前
Java 异步回调
java·开发语言·多线程
海寻山2 小时前
Java常用API详解(二):集合类API(ArrayList/HashMap/HashSet)实战,一篇吃透
开发语言·python
XMYX-02 小时前
19 - Go 并发限制:限流与控制并发数
开发语言·golang
卵男(章鱼)2 小时前
汽车网络通讯分析与仿真工具的系统工程:Vector CANoe与ZLG ZCANPRO深度剖析
开发语言·汽车·php