Web鉴权机制总结(全网最全版)

admin 2026-05-08 04:57:01 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档系统梳理Web鉴权机制,涵盖Cookie+Session、JWT、挑战应答等核心原理,重点分析Session固定、JWT弱签名等常见漏洞及渗透测试方法,提供识别机制与防御建议,强调密钥管理的重要性,适用于安全人员实战参考。 综合评分: 85 文章分类: WEB安全,渗透测试,漏洞分析,安全工具,实战经验


cover_image

Web鉴权机制总结(全网最全版)

原创

平平无奇 n1 平平无奇 n1

N1&杨安全

2026年3月21日 18:09 福建

在小说阅读器读本章

去阅读

前言

这几天倒是一直在忙一些创业和社交相关的事,公众号倒是搁置了,今天突然想静下心来输出一篇

思前想后,继续给大家补一补web安全的基础吧:web鉴权机制总结

今天只是带领大家去梳理总结一下,很多还需要你们去问AI或者自学一下,有不懂的可以私信问我(有时间都会回)

推荐练习的靶场

  • Portswigger中的JWT-labs以及其他

地址:https://portswigger.net/web-security/all-labs

概述

鉴权(Authorization) 与身份验证(Authentication)共同构成防止未授权的第一道防线,所以也是学习未授权漏洞的基础

那什么是鉴权呢?

其实就是看某用户是否有权访问某资源比如你是普通用户,还是管理员用户,能看到的东西肯定有所不同了

那什么又是口令验证呢?

其实就是通过某一串口令来对用户进行身份识别

鉴权机制与常见漏洞

这里带大家熟悉和梳理一下

cookie+session

<?php
session_start();&nbsp;// 激活 Session 机制,生成或读取 PHPSESSID
// 模拟登录逻辑
if($_GET["username"] ===&nbsp;"admin"&nbsp;&& $_GET["password"] ===&nbsp;"secret_pass"){
&nbsp; &nbsp;&nbsp;// 坑点:直接把敏感信息存入 Cookie 是极度危险的
&nbsp; &nbsp; setcookie("is_admin",&nbsp;"true", time()+3600);
&nbsp; &nbsp; $_SESSION["user_id"] =&nbsp;1;
&nbsp; &nbsp; $_SESSION["role"] =&nbsp;"admin";
}

// 鉴权逻辑
if(isset($_SESSION["role"]) && $_SESSION["role"] ===&nbsp;"admin"){
&nbsp; &nbsp;&nbsp;echo"Welcome, Admin. [SessionID: ".session_id()."]";
}&nbsp;else&nbsp;{
&nbsp; &nbsp; header("HTTP/1.1 403 Forbidden");
&nbsp; &nbsp;&nbsp;echo"Access Denied.";
}
?>

用户登录后,服务器生成一个 Session ID,存储在服务端(如内存、Redis 或文件),并且将Session ID放入 Cookie返回给浏览器。后续用户请求通过 Cookie 自动携带,服务端通过 Session ID识别用户身份。

除了基础的 Session+Cookie,实战中更多遇到的是无状态或签名类鉴权

Http Basic / Digest Auth:

  • Basic: Authorization: Basic [Base64]。Base64 是编码非加密,抓包即死。
  • Digest: 引入了随机数(Nonce)和哈希,防止重放攻击,比 Basic 安全但部署复杂。

随机Token(一次性,短生命周期)

常用于 CSRF 防护或单次接口调用。关键看其熵值(是否可预测)和销毁机制。

JWT (JSON Web Token)

又叫做无状态Token

那什么叫无状态呢?

就是服务端不存数据,全靠Header.Payload.Signature自校验

这也是出现漏洞最多最有名最常见的一种鉴权机制

挑战应答 (Challenge-Response) / AKSK / API Key

原理的话如图,自己看,看不懂就多看

你会发现,其实关键还是在于SK的安全性

这是云原生和 API 接口主流。客户端用 SK(Secret Key)对请求内容(Method+Path+Timestamp+Body)进行 HmacSHA256 签名。

关键: 只要 SK 不泄露,攻击者即使拦截了请求也无法伪造签名,因为 Timestamp 保证了时效性。

加解密身份票据

依旧取决于 Key 的保管机制

总结一下:核心在于Key

无论是 Encrypted Token(如 C# 的 MachineKey 加密)还是签名机制,其安全性完全取决于 Key 的保管

泄露途径: GitHub 源码泄露、配置文件权限过大、硬编码在前端 JS 中、通过 LFI(本地文件包含)读取环境变量。

所以我们平时在做渗透测试的时候需要着重去看一看

那问题来了,这时候就有臭弟弟要说,N1,N1我学了这么多鉴权机制,脑袋都快炸了,实战中我们又如何区分呢?

其实你也不需要区分,只需要知道是什么在鉴权就足够了

如何识别鉴权机制

删除法

抓包后逐个删除 Header 中的 Cookie、Authorization、X-Token,观察哪个会导致 401/403,或者导致用户权限发生变化。

特征识别

  • ey… 开头:典型的 JWT。
  • Basic …:Http 基础认证。
  • Bearer …:常见于 OAuth2。
  • 长随机字符串:可能是 SessionID 或自定义 Token

常见漏洞

  1. 弱 cookie
  2. Session 劫持

CSRF,XSS打组合拳

配合 XSS 获取 document.cookie等。

  1. Session 固定会话攻击(Fixation)

漏洞复现 用户登录后,固定的SESSIONID 成为了用户的身份凭证,导致可以访问到用户的界面

验证:观察登录前和登录后 SessionID 有没有变化

防御:登录之后应该强制刷新 SessionID

我们来举个实际场景

场景: 攻击者先获取一个合法的 PHPSESSID=123,诱导用户用该 ID 登录。

验证: 登录前抓包记下 SessionID,登录后再看,如果没变,则存在此风险。

防御: session_regenerate_id(true); 登录成功必须强制刷新 I

  1. Baisc 认证之 Tomcat 暴力破解
  2. JWT 漏洞(高频)

a. 不校验签名

服务端直接没对签名做校验,不过很少了就是

b. alg:none 攻击空签名攻击

修改Header为 {"alg":"none"},删掉签名部分,看后端是否直接放行(由于库漏洞,部分旧后端会认为签名已验证)。

c. JWT 弱口令

如果 JWT 使用 HS256(对称加密),可以使用hashcat 对签名进行暴力破解。

** d. JWK 劫持和 JKU 劫持**

在 Header 中注入 jku 参数,指向攻击者控制的恶意公钥地址,让服务器用你的公钥验你的签。

e. KID注入

kid字段用于指定密钥。如果后端将其直接拼接进 SQL 或目录,会导致 SQL 注入或任意文件读取。

  1. 服务端组件漏洞

Tomcat Basic 认证爆破: 针对 /manager/html 页面,利用字典进行 Authorization 头爆破。

总结一下

鉴权渗透的本质是“身份越权”

总结一下渗透路径:识别机制 -> 寻找 Key 泄露/逻辑弱点 -> 尝试伪造/劫持 -> 实现纵向或横向越权。

我是N1,一名拥有四年经验的渗透测试工程师,欢迎大家关注哦~


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:N1&杨安全 平平无奇 n1 平平无奇 n1《Web鉴权机制总结(全网最全版)》

评论:0   参与:  0