Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
27身份验证漏洞
## 概述 身份验证是验证用户或客户端身份的过程,网站可能会暴露给任何连接到互联网的人。因此,强大的身份验证机制是有效的网络安全不可或缺的一部分。 身份验证主要有三种类型: - 您**知道的**某些信息,例如密码或安全问题的答案。这些有时被称为“知识因素”。 - 你**拥有的**某物,例如手机短信验证码或安全令牌等实物。这些有时被称为“占有因素”。 - 您的**身份**或行为。例如,您的生物特征或行为模式。这些有时被称为“先天因素”。 **多因素认证(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,登录成功。 
毛林
2025年9月10日 18:22
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码