现代 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)可能会停止加密或直接报错。这是后续做自动化逆向时需要过掉的"环境墙",本篇仅涉及基础知识,感兴趣的自行搜索或等待后续文章。

相关推荐
mldong7 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
努力的lpp7 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
2分钟速写快排8 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60618 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角9 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!9 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰10 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
蒲公英eric10 小时前
从直接重定向到白名单验证:DVWA 开放重定向模块完整漏洞分析教程
web安全·ai·ctf·dvwa·ai安全·开放重定向模块
mayaairi11 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
天道jimmy12 小时前
VulnHub 系列:HA, Wordy
linux·服务器·web安全