WEB安全
00-HTTP协议
01-前端基础【HTML】
02-前端基础【CSS】
03-后端基础【PHP速通】
04-后端基础【PHP面向对象】
05-MySQL基础操作
06-前后端联动【代码练习】
07-SQL注入
08-SQL注入 Labs
09-跨站脚本攻击【XSS】
09-XSS Labs
10-CSRF
11-SSRF
12-XML 外部实体注入【XXE】
13-代码执行漏洞
14-命令执行漏洞
15-文件包含漏洞
16-文件上传漏洞
17-反序列化漏洞
18-业务逻辑漏洞
19-未授权访问漏洞集合
20-跨源资源共享【CORS】
21-SSTI模板注入
22-并发漏洞
23-点击劫持【Clickjacking 】
24-请求走私
25-路径遍历
26-访问控制
27-身份验证漏洞
28-WebSocket
29-Web缓存中毒
30-HTTP 主机头攻击
31-信息泄露漏洞
32-原型污染
33-API概述
34-API分类类型
35-API交换格式
36-API身份验证
37-API常见漏洞
38-crAPI靶场
39-JWT
40-DVGA靶场
41-服务器端参数污染
42-API Labs
43-OAuth Labs
44-GraphQL API Labs
45-JWT Labs
46-小程序抓包
47-云存储
48-对象存储OSS
49-存储桶
50-存储桶漏洞
51-STS访问OSS
-
+
27-身份验证漏洞
浏览
1
## 概述 身份验证是验证用户或客户端身份的过程,网站可能会暴露给任何连接到互联网的人。 因此,强大的身份验证机制是有效的网络安全不可或缺的一部分。 身份验证主要有三种类型: - 您知道的某些信息,例如密码或安全问题的答案。这些有时被称为“知识因素”。 - 你拥有的某物,例如手机短信验证码或安全令牌等实物。这些有时被称为“占有因素”。 - 您的身份或行为。例如,您的生物特征或行为模式。这些有时被称为“先天因素”。 多因素认证(MFA/2FA) 结合了以上至少两种因素,能极大提升安全性。 > 身份验证和授权有什么区别? 身份验证是验证用户身份是否与其声称的身份相符的过程。授权则涉及验证用户是否被允许执行某项操作。 例如,身份验证可以确定尝试使用用户名访问网站的人是否是Carlos123创建该帐户的人。 一旦Carlos123通过身份验证,他们的权限将决定他们被授权执行的操作。例如,他们可能被授权访问其他用户的个人信息,或执行诸如删除其他用户帐户之类的操作。 ## 核心与危害 身份验证漏洞泛指攻击者能够绕过、破坏或模仿合法用户身份验证过程的任何缺陷。 最直接的危害:攻击者能够以其他用户(通常是高权限用户)的身份登录系统,从而完全访问该用户的数据和功能。这可能导致: - 数据泄露:访问所有个人身份信息(PII)、私人消息、财务记录。 - 权限提升:以普通用户身份登录,然后利用访问控制漏洞提升至管理员权限。 - 账户接管(ATO):完全控制用户的账户,并利用其身份进行恶意活动(如诈骗、发布虚假信息)。 - 系统完全沦陷:如果攻破的是管理员账户,可能意味着整个系统或网络的失守。 ## 常见漏洞类型与攻击方式 ### 基于凭证的攻击 这类攻击主要针对“知识因素”。 > 1. 弱密码: 原因:用户设置简单密码(如 123456, password),或系统未实施强密码策略。 攻击:攻击者使用常见密码字典进行自动化尝试。 > 2. 暴力破解(Brute-force Attacks): 原因:登录端点没有或实施了无效的暴力破解防护机制。 攻击:攻击者使用自动化工具(如 Burp Intruder, Hydra)以极高的频率尝试大量用户名/密码组合。 变种: - 密码喷洒(Password Spraying):对大量用户尝试少数几个常用密码,避免单个账户被锁定。 - 字典攻击(Dictionary Attacks):使用根据真实密码库生成的、更精确的密码列表进行攻击。 > 3. 凭证填充(Credential Stuffing): 原因:用户在多个网站使用相同的密码。 攻击:攻击者利用从其他网站泄露的用户名/密码组合(“撞库”),在目标网站上进行自动化登录尝试。这之所以有效,是因为很多人有密码复用习惯。 ### 身份验证逻辑缺陷 这类漏洞源于应用程序自身逻辑的错误。 > 1. 弱锁定机制(Weak Lockout Mechanisms): 场景:系统在多次失败登录后锁定账户,但攻击者可以通过细微更改用户名(如 admin vs admin )或IP地址来绕过锁定限制。 > 2. 可预测的凭据: 场景:应用程序为新用户设置可预测的初始密码(如 Welcome123 或基于用户名的密码),且未强制要求首次登录时修改。 > 3. 故障开放(Fail-Open)条件: 场景:当身份验证系统遇到意外错误(如数据库连接失败)时,错误地授予了访问权限而不是拒绝它。 > 4. 密码重置功能缺陷: 可预测的令牌:密码重置令牌(通常通过链接发送)熵值低、可预测或基于时间戳等可猜测值。 令牌未失效:重置令牌在使用后或长时间后仍然有效。 电子邮件劫持:重置链接发送到的电子邮件账户本身不安全。 主机头注入:密码重置邮件中的链接可能受 Host 头控制,攻击者可将其指向自己的域名,从而截获重置令牌。 ```http POST /forgot-password HTTP/1.1 Host: evil-user.net // 恶意修改Host头 ... email=victim@example.com ``` > 5. 多步骤流程绕过: 场景:登录或重置密码流程有多个步骤,但后端仅在最后一步验证身份,攻击者可直接跳到最后一步。 > 6. “记住我”功能缺陷: 原因:“记住我”功能生成的持久性Cookie(如 remember_me=admin)是可预测的、可篡改的或未正确签名验证的。 攻击:攻击者可以伪造或篡改该Cookie来模拟用户。 ### 会话管理缺陷 会话是身份验证后的状态维持,其缺陷等同于身份验证失效。 > 1. 会话劫持(Session Hijacking): 原因:会话ID(Session ID)通过不安全的通道(如HTTP)传输,或暴露在URL中(URL重写)。 攻击:攻击者通过网络嗅探、记录URL或跨站脚本(XSS)攻击窃取会话ID,然后将其放入自己的浏览器中以劫持会话。 > 2. 会话固定(Session Fixation): 原因:应用程序在用户登录前和登录后使用同一个会话ID。 攻击: 1. 攻击者访问网站,获取一个会话ID SESSID=abc123。 2. 诱骗受害者使用这个特定的会话ID登录网站(例如,通过一个包含 ?SESSID=abc123 的链接)。 3. 用户登录后,会话ID abc123 被提升为已认证状态。 4. 攻击者使用已知的会话ID abc123 即可直接访问用户的账户。 > 3. 会话ID可预测性: 原因:会话ID不是使用加密安全的随机数生成器生成的,而是基于时间、用户名等可猜测信息生成的。 ### 4. 其他常见漏洞 > 1. 万能密码 经典Payload:在用户名字段输入 admin'--,如果应用程序存在SQL注入,可能会构造出如下查询,从而绕过密码检查: ```sql SELECT FROM users WHERE username = 'admin'--' AND password = 'anything' -- 注释符 -- 后面的内容被忽略,只要admin用户存在即登录成功。 ``` > 2. 默认凭证 设备或应用(如摄像头、路由器、CMS后台)使用广为人知的默认用户名和密码(admin/admin)。 ## 防护措施 防御需要多层次、纵深防御的策略。 ### 1. 通用强化策略 实施强密码策略:要求最小长度、复杂度(大小写字母、数字、特殊字符),但避免过于复杂导致用户记不住。 强制使用多因素认证(MFA):这是单一最有效的防御措施,可以缓解密码泄露、暴力破解等绝大多数风险。 安全地处理凭证: - 密码哈希:使用加盐的、自适应的哈希算法(如 Argon2id, bcrypt, PBKDF2)存储密码。绝对禁止使用明文或弱加密(MD5, SHA-1)存储密码。 - 传输加密:全程使用 HTTPS(TLS)加密传输数据。 ### 2. 防止暴力破解 实施智能账户锁定:在多次(如5-10次)失败尝试后,临时锁定账户一小段时间(如15-30分钟)。避免永久锁定导致DoS攻击。 使用CAPTCHA:在几次失败尝试后要求用户完成验证码挑战,有效阻止自动化工具。 监控和告警:记录所有登录尝试(成功和失败),并对异常活动(如来自不同地理位置的登录)设置告警。 ### 3. 修复逻辑缺陷 密码重置令牌:必须使用加密安全的随机数生成,且单次有效、短时间有效。 避免故障开放:确保在系统故障时默认拒绝访问。 验证所有流程步骤:在多步骤流程中,每一步都要验证用户的状态和权限。 ### 4. 安全会话管理 生成安全的会话ID:使用加密安全的随机数生成器,保证足够长度和熵值。 登录后更新会话ID:用户成功登录后,必须使其旧的会话标识符失效并颁发一个新的会话ID(防止会话固定)。 安全设置Cookie属性: - Secure:仅通过HTTPS传输。 - HttpOnly:阻止JavaScript访问(防XSS窃取)。 - SameSite=Strict|Lax:提供很好的CSRF防护。 设置会话超时:实现空闲超时和绝对超时。 ### 5. 其他措施 删除默认凭据:在部署任何系统后,立即更改所有默认密码。 防范凭证填充:实施速率限制(基于IP和基于账户),或使用风险分析工具(如设备指纹、IP信誉)来识别自动化攻击。 教育用户:引导用户使用密码管理器,并为不同网站设置唯一、强大的密码。 ## 实验 靶机地址:https://portswigger.net/web-security/authentication/other-mechanisms/lab-password-reset-broken-logic 已知:密码重置功能存在漏洞。 任务:重置carlos用户的密码,然后登录并访问他的“我的账户”页面。 登录凭证:wiener:peter 1、打开burp,访问靶机地址,单击“忘记密码?”链接并输入您自己的用户名。  2、输入wiener的用户名,点击【Submit】。   3、在邮箱服务器中查看。   4、点击body中的链接即可重置密码。  5、使用重置后的密码,进行登录。  6、在burp的http 历史数据包中研究密码重置功能的请求和响应,观察到重置令牌作为 URL 查询参数包含在重置电子邮件中,将该数据包发送到repeater模块中。  7、删除掉URL和请求正文中的temp-forgot-password-token参数值,再次发送,显示302。  那么也就意味着,没有token值,也可以进行密码的重置。 8、将用户名替换为为carlos。  9、回到浏览器, 输入用户名carlos,密码123456,登录成功。 
毛林
2026年11月15日 18:27
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~