现代 Web 前端渗透——基础篇(1)

开篇介绍

基础篇是为了进行现代 Web 前端渗透学习打基础,可快速阅读。


一、HTTP 协议核心(渗透视角)

1. HTTP 请求结构

复制代码
POST /api/login HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer xxx
Cookie: session=abc123

{"username":"admin","password":"123456"}
  • 方法 (Method)

    • GET:获取数据(参数通常在 URL)。

    • POST:提交数据(参数通常在 Body)。

    • OPTIONSCORS 预检请求(做跨域漏洞测试必看)。

  • 状态码 (Status Code)

    • 200:成功。

    • 302:跳转(常配合 Cookie 做登录)。

    • 401/403:未授权/无权限(测越权、未授权访问的关键)。

    • 500:服务器错误(可能暴露堆栈信息)。

2. 关键 Header(重点记忆)

Header 作用 渗透关注点
Content-Type 数据类型 决定你是发 JSON 还是 Form。逆向时看这个知道怎么构造包。
Cookie 会话凭证 鉴权的核心,偷了它就能冒充用户。
Authorization 另一种鉴权 常见于 JWT (Bearer xxx) 或 Basic Auth。
Origin / Referer 来源 CORS ​ 和 CSRF​ 防御的关键字段。

3. 数据传输格式

JSON : { "key": "value" }(现代 Web 主流,也是加密的重灾区)。

Form Data : username=admin&pass=123(老式或简单网站)。

差异 :如果你在 Burp 里看到的是乱码或密文,说明前端做了加密;如果是明文 key=value,那就是普通传输。

你的这段总结非常精准、务实,完全抓住了 HTTP/2 在 Web 渗透测试中对一线人员最有价值的几个点。

你过滤掉了那些"看起来很厉害但实际只能打 DoS 或极难复现"的理论风险(比如 HPACK Bomb、CONTINUATION Flood),专注于能直接产生漏洞报告(Bounty/SRC)的 WAF Bypass 手法

我帮你把这段话稍微润色了一下,使其更像是一份渗透测试报告中的"测试要点"技术总结,你可以直接拿去用:


4. HTTP/1.1 vs HTTP/2 ------ Web 渗透测试视角

从渗透测试角度看,HTTP/2 并未引入新的代码执行漏洞,但其协议特性(二进制帧、伪头部、多路复用)改变了流量的解析方式,导致部分安全设备(特别是旧版或配置不当的 WAF)出现检测盲区。核心测试方向如下:

特性 HTTP/1.1 HTTP/2 (RFC 7540) 渗透测试利用点 (WAF Bypass)
传输格式 明文 ASCII 文本行 二进制帧 (Binary Frames) 解析差异绕过:多数老旧 WAF 基于 HTTP/1.1 文本流设计,对 HTTP/2 的二进制帧及 HPACK 头部压缩处理不完善,可能导致恶意载荷(SQLi/XSS)无法被识别而放行。
请求标识 GET /path HTTP/1.1+ Host :method, :path, :scheme, :authority伪头部 伪头部与 Host 分歧 :请求中同时包含 :authorityHost时,若 WAF 仅依据 :authority匹配防护域名(且该值不在白名单内),而后端服务(如 Nginx/Tomcat)优先解析 Host头,则 WAF 可能跳过深度检测,导致后端执行恶意请求。反之亦然。
头部处理 单个连接串行发送,头部不重复 支持多路复用,允许同名头部存在 头部分片/截断 :利用 HTTP/2 允许多个同名头部(如双 Cookie)的特性,将 Payload 置于第二个头部,部分 WAF 正则仅匹配首个头部导致绕过;或通过超长头部触发 WAF 解析截断,使后续恶意数据逃逸检测。

还有其他的测试方向,感兴趣者可自行查阅资料。

5. WebSocket

现在的 Web 应用(尤其是管理后台、IM、实时监控)大量使用 WebSocket,一旦建立连接(ws://、wss://),就是全双工通信,不再是 Request/Response 模式,关注该内容的原因是:很多"前端加密"不仅仅存在于 HTTP POST,也可能在 WebSocket 的消息帧里。

在浏览器中的查看方式:


二、Web 工作原理(渗透势角)

1. 从输入 URL 到页面渲染

这个过程决定了你的 JS 代码在哪里运行,以及你该如何拦截它。

步骤 发生了什么 渗透/逆向关注点
1. DNS & TCP 解析域名,建立连接。 通常不涉及前端攻击,但代理工具(Burp)在这里工作。
2. 服务器响应 服务器返回 HTML​ (骨架)。 看 Response 里有没有敏感信息(注释、测试 IP、泄露的 API 路径)。
3. 解析与加载 浏览器解析 HTML,遇到 <script src="app.js">就下载 JS。 Source Map 泄露 :如果这里有 .map文件,你直接就能还原源码(用 reverse-sourcemap)。
4. 执行 JS **(核心)**​ JS 引擎(V8)开始执行代码。 JS 逆向的主战场。所有的加密函数(AES/RSA)、环境检测(指纹识别)都在这里运行。
5. 渲染页面 生成 DOM 树,展示给用户。 DOM XSS :如果 JS 把 URL 参数直接写入 HTML (innerHTML),就可能产生漏洞。

2. 同源策略 (SOP) 与 CORS

  • 同源策略 (SOP) :同源策略是浏览器内置的默认行为,可通过修改服务器配置,放宽 SOP 的方式,Access-Control-Allow-Origin: https://a.com代表服务器告诉浏览器这个站点可以避免该限制。浏览器禁止 a.com的 JS 随意读取 b.com的响应,值得注意的时SOP只是限制攻击者通过a.com执行JS获取b.com的响应,达到获取数据的目的,但是对于那种攻击者不在乎返回的数据,就是想让a.com执行某些操作,那SOP就不够用了,比如偷钱,这需要CSRF来进行限制。

  • CORS (跨域资源共享) :如果 b.com返回 Access-Control-Allow-Origin: *,则打破了SOP限制。如果某个敏感 API(如 /api/userinfo)配置了 Access-Control-Allow-Origin: *且没有携带 Cookie,可能导致数据泄露。

3. 浏览器存储机制

存储方式 特点 渗透关注点
Cookie 随请求自动发送,有 HttpOnly 保护。 传统 Session。如果没设 HttpOnly,可以通过 XSS 偷走。
**Local Storage(本地存储)**​ 存在本地,容量大,不会自动发送。 现代 JWT 常用 。通常配合 Authorization头使用。XSS 可以直接读取。
**Session Storage(会话存储)**​ 仅在当前标签页有效,关闭即清。 临时存储,常用于单页应用(SPA)的状态保持。
IndexedDB 本地数据库,存大量结构化数据。 有些复杂的 Web 应用会把加密密钥或大数据存在这里。

通过浏览器(edge)查看:

Cookie:

本地存储(Local Storage):

会话存储(Session Storage):

IndexedDB

4. 现代前端框架(SPA)的运行机制

与传统前端框架(MPA)的点击一个连接加载一个连接相比,现代前端框架(Vue+React)像app一样第一次加载就将全部源代码下载到本地(就是那个巨大的app.js),之后的点击只是在本地切换显示哪个界面,只有需要数据时才会偷偷给服务器发请求(API)。

打包与混淆:
  • 现象 :你在 Sources 面板看到的不是 login.js,而是一个叫 chunk-vendors.8f9a3d.js的文件,里面全是 var a=1, b=2, _0xabc...。者造成测试人员没法一眼看到登录等逻辑是怎么写的,也没法直接搜 password、api、key等变量。

  • 对策实操

    • 第一步 :点 Edge(谷歌也行)开发者工具里的 {}(Pretty Print)按钮,让它变得稍微可读一点。

    • 第二步 :如果还是乱七八糟,复制代码丢进在线反混淆工具。

    • 第三步 :虽然变量名还原不回来,但字符串常量(比如 API 地址、加密算法的 Key、特定的报错信息)通常是藏不住的,这是突破口。

路由在前端:页面不刷新
  • 现象 :网页上点来点去,URL 从 /login变成了 /dashboard,但 Network 面板里没有新的 HTML 文档请求。导致测试人员很难通过抓包直接看到页面的加载逻辑。所有的"页面"其实都在 JS 里定义好了。

  • 对策实操

    • 关注 XHR/Fetch :既然页面不刷新,那数据全靠 Ajax而来。在 Network 面板里,要盯着 XHR ​ 这一栏。

    • 寻找"壳" :现在经常会发现一个初始的 index.html非常干净,只有几个 <script>标签,真正的逻辑全在 JS 里。

请求封装:加密
  • 现象 :开发人员不会在每个按钮点击的地方都写一遍加密代码,而是通常会写在一个"拦截器"里。如果测试人员想破解前端的参数签名(Sign)、Token 生成逻辑或者请求体加密,不要去读按钮的点击事件,那是死路。

  • 对策实操

    • 在 (源代码)Sources 面板按 Ctrl + Shift + F全局搜索关键词:interceptorsrequest.useencrypt。找到类似下面的代码。

    复制代码
      // 伪代码示例
      axios.interceptors.request.use(config => {
          config.data = encrypt(config.data); // 这里就是加密的地方!
          return config;
      });

值得注意的是:很多加密脚本会检测运行环境(如检测 window.navigator.webdriverHeadless特征),如果发现是自动化工具(如 Puppeteer/Playwright)可能会停止加密或直接报错。这是后续做自动化逆向时需要过掉的"环境墙",本篇仅涉及基础知识,感兴趣的自行搜索或等待后续文章。

相关推荐
网教盟人才服务平台6 小时前
全国政务网络安全能力提升行动启动,筑牢政务数据安全防线
安全·web安全·政务
希冀1236 小时前
【CSS学习第十一篇】
前端·css·学习
隔窗听雨眠7 小时前
doctype、charset、meta如何控制整个渲染流水线
java·服务器·前端
Bruce_Liuxiaowei7 小时前
2026年5月第4周网络安全形势周报
网络·人工智能·安全·web安全·网络安全·系统安全
kyriewen7 小时前
写组件文档写到吐?我用AI自动生成Storybook,同事以后直接抄
前端·javascript·面试
excel7 小时前
🧠 Prisma 表名大写 vs SQL 导出小写问题深度解析(附踩坑与解决方案)
前端·后端
HMS工业网络7 小时前
边缘网关网络安全
网络·安全·web安全
周淳APP7 小时前
【前端工程化原理通识:从源头到运行时的理论阐述】
前端·编译·打包·前端工程化
五点六六六8 小时前
你敢信这是非Native页面写出来的渐变效果吗🌝(底层原理解析
前端·javascript·面试