一次完整的未授权访问漏洞挖掘纪实——前端空空如也,后端接口藏匿于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 结构为王——逻辑清晰

高分段文章的黄金结构

  1. 引言(100-200字):抛出痛点,说明"为什么读"和"你能获得什么"

  2. 背景/原理:简要交代技术背景,不做无效铺垫

  3. 实战步骤:分阶段叙述,步骤编号+代码块+截图说明

  4. 结果呈现:展示漏洞危害,用数据说话

  5. 总结与建议:提炼核心要点,给出可复用的方法论

  6. 参考资料:提供延伸阅读链接,增加可信度

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、数据均为脱敏处理后的示意信息,仅供技术交流参考。

更多推荐