一、核心前提:为什么要关注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. 利用步骤(实操)
- 通过F12/插件获取JS中的ak/sk;
- 打开ak_as后cf利用工具,选择对应云厂商(如阿里云);
- 填入获取的accessKeyId、accessKeySecret,完成配置;
- 执行命令(如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. 漏洞挖掘与利用步骤
- 尝试用错误账号密码登录,抓包查看后端返回数据(此时code为403,登录失败);
- 通过F12查看前端JS代码,发现登录成功的判断条件是"res.code === 200";
- 在Burp中修改后端返回的code值,将403改为200,然后放包;
- 浏览器会触发前端跳转逻辑,成功进入后台页面,实现登录绕过。
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注入、越权),形成"前端+后端"的完整渗透思路,同时为后续框架漏洞、代码审计打下基础。