实战Web渗透测试:从JS挖掘到逻辑漏洞利用,拿下573万条数据
一次完整的未授权访问漏洞挖掘纪实——前端空空如也,后端接口藏匿于JS代码之中,而漏洞的入口,仅仅是一个缺失的参数。
前言
从事渗透测试的朋友大概都经历过这样的场景:登录目标系统后,页面只有一个大大的"Welcome",没有任何菜单、按钮,仿佛在说:"别找了,这儿什么都没有。"很多人至此止步,但真正的突破口,往往隐藏在最不起眼的角落。
本文将以一次真实的Web渗透测试为线索,从零开始完整还原漏洞挖掘全过程,并系统梳理渗透测试的思维框架与实用技巧。
⚠️ 郑重声明:本文内容仅供技术学习和安全研究使用。未经授权对任何系统进行渗透测试均属违法行为,请务必在合法授权范围内开展测试活动。
一、渗透测试的方法论:先"道"后"术"
在动手之前,先确立正确的思维方式。Web渗透测试的本质是通过模拟攻击者视角,系统性地评估Web应用的安全性,其核心并非"用工具扫一遍",而是一场信息战——谁能收集到更多有价值的信息,谁就掌握了主动权。
标准的渗透测试流程可分为四个阶段:
| 阶段 | 核心任务 | 关键产出 |
|---|---|---|
| 信息收集 | 子域名、IP端口、敏感目录、指纹识别、JS接口挖掘 | 攻击面地图 |
| 漏洞探测 | 手工+工具结合,寻找注入、越权、上传等脆弱点 | 潜在漏洞清单 |
| 漏洞利用 | 验证漏洞真实性,评估危害范围与深度 | 利用证明(截图/数据) |
| 报告输出 | 结构化记录,提供可落地的修复方案 | 渗透测试报告 |
业内常说一句话:"信息收集的深度,决定了渗透测试的上限。" 很多新手急于启动扫描器,却忽略了最基础也是最关键的一步——仔细"阅读"目标给我们的每一条线索。
二、实战复盘:从空白页面到573万条数据泄露
第一阶段:开局——仅有"欢迎"二字的空白页
访问目标域名,使用测试账号登录。浏览器渲染完成后,映入眼帘的是一个极简界面——除了居中的"Welcome"字样,再无任何菜单、按钮或交互元素。
前端无任何可操作的功能点,常规的"点一点找功能"策略彻底失效。
第二阶段:抓包——仅捕获2个API调用
既然前端不可见,那么后端API总该暴露些什么。打开Burp Suite,开启代理拦截,完整记录从登录到加载完成的所有HTTP请求。
结果再次令人失望——整个过程中仅有两个API被调用,且均为身份认证相关接口(登录校验和Token刷新),没有任何业务功能接口的痕迹。
text
POST /api/auth/login → 200 OK GET /api/auth/refresh → 200 OK (其余请求均为静态资源)
第三阶段:转机——从JS文件中"掘地三尺"
前端空白、抓包无果,下一步思路是什么?答案是:静态资源,尤其是JavaScript文件。
现代Web应用普遍采用前后端分离架构,前端路由和API调用逻辑往往硬编码在JS文件中。通过浏览器开发者工具的"Sources"面板或"Network"面板筛选JS请求,逐一审查其内容。
关键技巧:利用已知的接口路径特征作为"锚点"进行全局搜索。例如,已知登录接口为/api/auth/login,则在JS文件中搜索/api/或auth/,往往能顺藤摸瓜找到其他未暴露的接口。
在本次测试中,对目标JS文件逐一审查时,惊喜地发现大量接口路径集中定义在同一个对象中:
javascript
// 关键发现:接口字典集中暴露
var API_ENDPOINTS = {
// 用户相关
codeToToken: "api/user/createToken",
userInfo: "api/user/current-user",
userApps: "api/uc/user/apps",
userProfile: "api/uc/user/profile",
// 权限管理
roleList: "right/api/v1/right/role/list",
permissionCheck: "right/api/v1/right/permission/check",
rulePaging: "right/api/v1/right/operation/point/rule/paging",
// 数据接口
provinceCity: "right/api/v1/right/operation/external.getDealerInfoByAreaCode",
dataExport: "right/api/v1/right/operation/data/export",
// ... 共计47个接口
}
一次性获得了47个潜在的攻击入口。将这些接口从JS中提取出来后,使用Burp Intruder批量发送GET/POST请求,观察响应状态码和内容。
💡 小贴士:可使用
grep或正则表达式快速提取接口路径,也可以借助Burp的"Grep - Extract"功能自动提取响应中的目标内容。
第四阶段:进展——根据错误信息"按图索骥"
批量探测返回了大量403和404状态码,这是预期之内的。但关键在于,筛选出那些返回了非标准错误信息的接口——它们往往暴露了更多后端逻辑。
其中一个接口返回了以下错误:
text
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": 404002,
"error": "param_tenantId_missing",
"message": "请求缺少租户ID参数",
"timestamp": 1702800000000
}
这是一个决定性的信号:
-
接口可以正常调通(返回200,而非403/404)
-
后端明确提示缺少
tenantId参数 -
参数名清晰可见,无需猜测
第五阶段:突破——从其他接口"拼凑"出参数值
知道了参数名,但tenantId的值是什么?继续翻阅之前收集的接口,测试过程中发现另一个接口意外返回了以下数据:
json
{
"code": 200,
"data": {
"defaultTenant": {
"tenantId": "100001",
"tenantName": "默认租户",
"status": "active"
},
"tenantList": [...]
}
}
拼图完成:参数名 + 参数值。
将tenantId=100001拼接到之前报错的接口URL中,重新发送请求:
text
GET /right/api/v1/right/operation/data/list?tenantId=100001&page=1&size=100
这一次,服务器返回了完整的数据:
json
{
"code": 200,
"data": {
"total": 5732847,
"pageNum": 1,
"pageSize": 100,
"list": [
{
"userId": "u_100234",
"nickname": "张**",
"mobile": "138****1234",
"email": "user***@example.com",
"registerTime": "2025-06-01 10:23:45",
"lastLogin": "2026-06-21 08:12:33"
},
// ... 更多用户数据
]
}
}
573万条用户敏感信息(手机号、邮箱、昵称、登录记录等)一次性全量返回,且未对当前用户的权限做任何校验。这是典型的越权访问漏洞(IDOR - Insecure Direct Object Reference),结合了参数级未授权访问,风险等级评定为高危。
阶段复盘:整个攻击链
text
前端空白
↓ 抓包仅2个接口
JS文件中挖掘 → 发现47个隐藏接口
↓ 批量探测
某接口返回 "param_tenantId_missing"
↓ 继续测试其他接口
另一接口泄露 tenantId=100001
↓ 参数拼接
成功获取573万条敏感数据
关键经验:每一条报错信息、每一个看似"无用"的接口,都可能是通往漏洞的钥匙。整个过程中没有使用任何自动化扫描器,纯粹依靠手工分析和逻辑推理。
三、常见Web漏洞速查表与测试方法论
了解常见漏洞类型及其快速测试方法,是渗透测试的必修课。以下整理了高频漏洞的识别要点:
3.1 SQL注入
| 维度 | 内容 |
|---|---|
| 原理 | 用户输入被拼接到SQL语句中执行,导致数据库被非法操作 |
| 快速测试 | 输入' OR '1'='1、' AND SLEEP(5)--、' UNION SELECT NULL-- |
| 判断特征 | 页面报错、响应时间异常、返回非预期数据 |
| 工具 | sqlmap、Havij、BBQSQL |
| 防御 | 参数化查询/预编译、输入白名单过滤 |
3.2 XSS跨站脚本攻击
| 维度 | 内容 |
|---|---|
| 原理 | 恶意脚本被注入到页面中,在受害者浏览器执行 |
| 分类 | 反射型(URL参数)、存储型(持久化)、DOM型(客户端) |
| 快速测试 | 插入<script>alert(document.domain)</script>、<img src=x onerror=alert(1)> |
| 判断特征 | 页面弹出执行框、Cookie被读取 |
| 工具 | XSSer、BeEF、Burp Scanner |
| 防御 | 输出编码(HTML实体编码)、CSP策略、HttpOnly Cookie |
3.3 文件上传漏洞
| 维度 | 内容 |
|---|---|
| 原理 | 恶意文件(如Webshell)被上传并可在服务器执行 |
| 常见绕过 | 前端JS验证(抓包改后缀)、Content-Type伪造、双扩展名(.jpg.php)、%00截断 |
| 快速测试 | 上传test.php内容为<?php phpinfo();?>,访问路径确认是否执行 |
| 工具 | 中国菜刀/蚁剑、Burp Suite |
| 防御 | 白名单校验后缀、文件内容检测、上传目录禁用执行权限 |
3.4 越权访问(IDOR/BAC)
| 维度 | 内容 |
|---|---|
| 原理 | 用户A能访问用户B的私有数据或管理员功能 |
| 分类 | 水平越权(同权限用户互访)、垂直越权(低权限访问高权限功能) |
| 快速测试 | 修改请求中的ID参数(user_id=1→2),观察是否返回其他用户数据 |
| 判断特征 | 返回不同用户的敏感信息、操作其他用户的功能 |
| 工具 | Burp Suite(手动测试)、Autorize插件 |
| 防御 | 服务端权限校验、使用不可预测的UUID替代自增ID |
四、渗透测试人员必备工具清单
| 工具名称 | 类别 | 用途 | 备注 |
|---|---|---|---|
| Burp Suite | 综合代理 | 抓包、重放、爆破、扫描 | 渗透测试必备 |
| Nmap | 信息收集 | 端口扫描、服务指纹识别 | 网络层侦察 |
| sqlmap | 漏洞利用 | SQL注入自动化检测与利用 | 需谨慎使用 |
| Metasploit | 漏洞利用 | 渗透框架,含大量EXP模块 | 后渗透利器 |
| Gobuster/Dirsearch | 信息收集 | 目录/文件爆破 | 寻找隐藏路径 |
| Wireshark | 流量分析 | 网络协议分析与调试 | 底层排障 |
| Nikto | 漏洞扫描 | Web服务器通用漏洞扫描 | 快速基线检查 |
五、技术博文写作指南:如何写出高分的分享
回到"写"这件事上。如果你希望将自己的渗透经验整理成高质量的博文,以下几点建议供参考:
5.1 内容为王——选对主题
好的技术文章,选题本身就成功了一半:
-
实战复盘类:从具体案例出发,还原完整攻击链(本文即属于此类)
-
工具教程类:介绍工具安装、配置、使用技巧和踩坑经验
-
漏洞分析类:复现CVE漏洞,分析原理和POC编写
-
学习笔记类:系统梳理某一技术领域的知识体系
5.2 结构为王——逻辑清晰
高分段文章的黄金结构:
-
引言(100-200字):抛出痛点,说明"为什么读"和"你能获得什么"
-
背景/原理:简要交代技术背景,不做无效铺垫
-
实战步骤:分阶段叙述,步骤编号+代码块+截图说明
-
结果呈现:展示漏洞危害,用数据说话
-
总结与建议:提炼核心要点,给出可复用的方法论
-
参考资料:提供延伸阅读链接,增加可信度
5.3 表达为王——降低阅读门槛
-
多用小标题分段,每段控制在5-7行为宜
-
关键术语首次出现时加粗,代码放入
代码块 -
善用表格归纳对比信息,提升信息密度
-
加入💡小贴士或⚠️注意等醒目标记,增加亲和力
-
避免大段堆砌,保持屏幕阅读的舒适感
5.4 合规为王——红线不可触碰
作为安全从业者,法律意识是基本功:
-
未经授权的渗透测试属于违法行为,文末必须加上免责声明
-
实战截图需脱敏处理(模糊IP、域名、敏感数据)
-
不披露未公开的0day细节,不提供可直接利用的攻击代码
写在最后:渗透测试的真谛
这次从空白页面到573万条数据的挖掘经历,让我再次深刻体会到:渗透测试不是工具与漏洞的简单堆叠,而是一场耐心与逻辑的博弈。
真正决定成败的,往往不是技术有多高深,而是——
-
面对空白页面时,是否能想到JS文件里藏有线索?
-
面对参数缺失的报错时,是否能联想到从其他接口拼凑信息?
-
在"似乎什么也没有"的困境中,是否能再多坚持一步?
Web安全的核心思维,是永远假设"还有什么是我没看到的"。
当你开始质疑每一个报错信息、审视每一行JS代码、思考每一个参数的业务含义时,你已经走在了从"工具使用者"到"安全思考者"的进化之路上。
愿每一次测试,都能让我们对安全的理解更深一层;愿每一篇分享,都能让安全社区的土壤更肥沃一分。
📚 延伸学习资源:
| 类型 | 推荐 |
|---|---|
| 书籍 | 《Web安全攻防:渗透测试实战指南(第2版)》——MS08067安全实验室 |
| 靶场 | DVWA、SQLi-LABS、upload-labs、VulHub、HackTheBox |
| 社区 | 先知社区、FreeBuf、安全客、看雪论坛 |
| CVE跟踪 | NVD、Exploit-DB、CVE Details |
⚠️ 最后重申:本文所述技术方法仅供合法的安全测试与学习使用。未经授权使用本文所述技术攻击他人系统,将承担相应的法律责任。安全是一门守护的技术,而非破坏的工具。
作者注:本文中涉及的域名、IP、数据均为脱敏处理后的示意信息,仅供技术交流参考。
更多推荐


所有评论(0)