逻辑漏洞之登录模块18种利用方法

admin 2026-06-20 05:02:05 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档系统分析了登录模块存在的18种逻辑漏洞利用方法,包括弱口令爆破、验证码绕过、Session固定攻击、OAuth第三方登录漏洞等。文章针对每种漏洞提供了具体的测试手法与修复建议,强调登录模块作为系统第一道防线的关键性,并指出逻辑漏洞挖掘需要独立思考能力。文档同时声明仅限于学术研究用途。 综合评分: 81 文章分类: WEB安全,漏洞分析,实战经验,安全建设,红队


cover_image

逻辑漏洞之登录模块18种利用方法

原创

一个努力的学渣 一个努力的学渣

一个努力的学渣

2026年6月18日 21:13 北京

在小说阅读器读本章

去阅读

免责声明

本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!

前言

登录模块,是所有系统的第一道防线,同时也是攻击者最喜欢研究的地方

很多企业花费大量精力修复SQL注入、XSS、文件上传等漏洞,却忽略了登录模块本身的安全设计,最终导致:

  • 账号被接管
  • 用户信息泄露
  • 后台被登录
  • 短信成本损失
  • 撞库攻击成功

 在实际SRC、众测、红队项目中,登录模块漏洞的占比一直居高不下。

本文简要讲述18种利用方法,但可能不全:

  • 弱口令
  • 登录密码可爆破
  • 登录验证码爆破
  • 返回凭证泄露
  • 短信/邮箱轰炸
  • Cookie伪造
  • Session会话固定攻击
  • 登录成功凭证可复用
  • 未授权访问他人账号
  • URL跳转(重定向漏洞)
  • 默认账号/测试账号未删除
  • 敏感错误信息泄露
  • 账号枚举
  • 多因素认证绕过(MFA)
  • 滑动验证码绕过
  • Token暴露在URL中
  • 会话超时处理不当
  • 第三方登录漏洞(OAuth)

    在开始之前,你需要明白一件事:你挖掘的是逻辑漏洞,而不是技术漏洞,你需要明白什么是逻辑,如果没有自己的逻辑,只会复用别人的逻辑,无法形成自己的一套逻辑体系,那逻辑漏洞只能跟在别人后面捡别人剩下的,有可能变化一个很小的点,你都挖不到逻辑漏洞

虽然本文只讲了18种方法,但肯定还有其他方法,操作越骚,越容易成功

登录模块为什么是攻击者的首选目标

  • 攻击门槛低:只需要一部字典,就可以尝试攻击利用
  • 位置公开:俗话说的好,很多攻击,基本都是开局一个框,无法突破,那只能GG了
  • 数据泄露:有些用户(管理员等),登录进去,可能存在很多敏感信息(身份证号、手机号、家庭住址等),一旦登录成功,后果不可挽回
  • 权限提升:普通用户登录之后,可配合抓包等方式提升为管理员权限,获取更多信息
  • 漏洞利用:很多漏洞都是登录之后才能利用,如果登录框这一步无法突破,哪怕知道存在漏洞,那也无计可施

弱口令

风险等级:高危

顾名思义,就是使用简单、常见、容易猜测的密码。

例如:

123456
12345678
admin
admin123
123123
password
Aa123456

那为什么会产生这种现象?

  • 普通用户:怕忘记密码,设置简单密码
  • 企业用户:为了方便,初始化密码统一设置为admin123等,登录之后没有要求强制改密码,导致很多用户一直使用默认密码

如何测试?

首先,你需要收集字典,然后在Burp Intruder模块中批量测试

字典获取:

  • Github
  • Hydra
  • Medusa
  • 根据实际情况DIY字典

修复建议:

  • 强密码策略
  • 密码复杂度校验
  • 首次登录强制修改密码
  • 定期修改密码机制

登录密码可爆破

风险等级:高危

密码爆破:通过大量尝试密码,最终猜中正确密码

那么与弱口令的区别是什么呢

  • 弱口令:本质上是密码简单,不需要复杂密码,利用方式为字典
  • 密码爆破:本质上可以无限尝试,不仅限于简单密码,可利用复杂字典去批量尝试

测试方法:Burp Intruder模块,加载密码字典,观察状态码、响应长度、返回内容等信息

修复建议:

  • 登录失败锁定
  • 图形验证码
  • IP限速
  • 风险识别:如同一IP、同一账号,三次输入密码直接锁定账号30分钟,拉黑IP等

登录验证码爆破

风险等级:高危

验证码主要是用于阻止自动化攻击,但如果验证码设计不合理,仍然可以被爆破

常见问题:验证码长度为4位纯数字,理论组合为10000种,完全可以进行爆破

测试方法:主要关注以下内容

  • 验证码长度
  • 是否限速
  • 是否绑定Session
  • 是否一次失效

修复建议:

  • 增加复杂度:如六位、数字+字母组合、图形验证码、滑块验证码等
  • 失败限制
  • 验证码与Session绑定
  • 使用行为验证:交互验证,如谷歌验证码
  • 时效限制:验证码有效期为一分钟

返回凭证泄露

风险等级:严重

返回凭证:登录成功后,服务器返回的信息,如:Token、SessionID、Cookie、JWT

如果设计不当,可能直接泄露

比如:

{
 "token":"xxxx",
 "session":"abc"
}

如果被前端日志打印,攻击者获取后直接登录

测试方法:主要关注以下内容

  • 响应体
  • 调试信息
  • 前端日志
  • 浏览器存储

修复建议:

  • 减少敏感信息暴露
  • 使用HTTPS
  • Token安全存储

短信/邮箱轰炸

风险等级:中危~高危

前提:登录时需要发送验证码

轰炸:攻击者反复触发,发送验证码,导致用户收到大量信息

常见影响:

  • 用户:无法正常使用
  • 企业:短信费用增加

比如,有一个接口,可以无限调用短信接口,然后攻击者利用该接口,一分钟发送1000甚至更多短信,给用户造成骚扰

测试方法:抓包–重复发送,观察以下信息

  • 是否限额
  • 是否校验验证码
  • 是否限制手机号

修复建议:

  • 单手机号限频(一个手机号一分钟最多发送多少条短信)
  • IP限频(一个IP一分钟最多发送多少条短信)
  • 图形、滑块验证码
  • 使用行为验证:交互验证,如谷歌验证码

风险等级:严重

Cookie:浏览器保存的一段身份信息,用于维持用户登录状态

例如以下内容为一个用户每次请求都会自动携带:

Cookie:
uid=1001;
role=user;
token=abc123;

Cookie为什么危险?

如果开发者错误的信任Cookie内容,例如:Cookie:role=admin

服务器直接判断:

if cookie.role=="admin":
    return admin_page

攻击者只需要修改Cookie即可提权

比如:

正常Cookie:Cookie:username=test;role=user

修改为:Cookie:username=test;role=admin

如果服务器返回admin权限,代表漏洞成立

测试方法:使用Burp修改Cookie,重点关注以下内容:

  • role
  • admin
  • uid
  • userid
  • permission
  • isAdmin
  • group

观察状态码、页面变化、菜单变化、权限变化,代表漏洞成立(不仅限于Cookie,跟权限相关的都可以去尝试)

修复建议:

  • Cookie签名校验
  • 敏感权限不存储客户端
  • HttpOnly
  • Secure

Session会话固定攻击

风险等级:高危

Session:服务器保存用户登录状态的数据

浏览器保存:PHPSESSID、JESSIONID、ASP.NET_SessionId

会话固定:攻击者提前获取一个SessionID,诱导受害者使用,当受害者登录后,攻击者利用同一个Session访问系统

攻击流程:

  • 第一步:攻击者获取Session:ABC123
  • 第二步:诱导用户访问:https://test.com?PHPSESSID=ABC123
  • 第三步:用户登录
  • 第四步:攻击者携带:ABC123直接进入系统

测试方法:

登录前获取Session,登录后观察:Session是否重新生成?

如果:登录前Session = 登录后Session,那么代表存在风险

修复建议:

  • 登录成功后:重新生成SessionID
  • 销毁旧Session

登录成功凭证可复用

风险等级:高危

凭证复用:登录成功后,系统返回:Token、Cookie、SessionID,如果长期有效,攻击者获得一次即可永久使用

测试方法:

登录后,记录Token,等待:1小时、24小时、7天,再次访问,观察是否有效

常见问题:

| | | | — | — | | 问题 | 风险 | | 永不过期 | 严重 | | 登出不失效 | 高 | | 改密码不失效 | 高 | | 多端共享 | 中 |

修复建议:

  • Token设置有效期
  • 登出失效
  • 修改密码失效
  • Refresh机制

未授权访问他人账号

风险等级:严重

未授权:无需登录/无需用户名密码,或者权限不足,却能访问他人资源

比如:

正常情况下:

GET /api/profile
Authorization: Token

攻击者删除:Authorization

直接访问:GET /api/profile?id=1002,如果成功返回用户信息,代表漏洞成立

测试方法:

删除:Cookie、Token、Authorization,重新发送,观察:是否返回数据

常见位置:

| | | | — | — | | 模块 | 风险 | | 用户信息 | 高 | | 文件下载 | 高 | | 导出接口 | 严重 | | 后台接口 | 严重 |

修复建议:

  • 所有接口:统一鉴权
  • 禁止依赖前端控制权限

URL跳转(重定向漏洞)

风险等级:中危~高危

URL跳转:登录成功后,系统跳转:https://test.com/login?redirect=/index

如果redirect未校验,攻击者可修改:https://test.com/login?redirect=https://www.baidu.com

用户登录成功,自动跳转钓鱼网站

危害:

  • 钓鱼攻击
  • 窃取账号密码
  • 伪造官方页面
  • 传播恶意链接

测试方法:

  • 关注参数:简而言之,就是登录成功后,是否会出现xxx=类型的内容

  • redirect

  • returnUrl

  • url

  • target

  • next

  • goto

  • 修改参数:redirect=https://www.baidu.com

  • 观察是否跳转成功

修复建议:

  • 白名单校验
  • 禁止外部域名跳转
  • 固定跳转地址

默认账号/测试账号未删除

风险等级:严重

默认账号:很多系统在开发阶段都会存在默认账号,方便开发调试,但上线后忘记删除,导致攻击者可直接登录

如:

  • admin/admin
  • admin/admin123
  • admin/admin
  • test/test
  • demo/demo

小技巧:可结合Burp 的Intruder进行小范围字典验证,避免高频爆破

修复建议:

  • 上线前清理测试账号
  • 首次登录强制修改密码
  • 禁止默认密码上线

敏感错误信息泄露

风险等级:中危

敏感错误信息:登录失败时,系统返回:用户名不存在、密码错误、账号被冻结、账号已停用等内容,这些信息会帮助攻击者收集有效账号

比如系统提示用户名不存在,我们拿一批账号去批量测试,这样会得到目前平台中已知账号

之后根据这些已知账号去爆破密码

可根据返回内容、响应长度、状态码、响应时间来判断密码是否正确

危害:

  • 账号枚举
  • 撞库攻击
  • 密码爆破
  • 社工攻击

修复建议:

  • 统一错误提示:用户名或密码错误

账号枚举

风险等级:中危,可升级为高危攻击链入口

账号枚举:攻击者通过各种差异来判断某个账号是否存在

常见的枚举方式:

  • 返回信息差异:用不存在、密码错误

  • 状态码差异:401、403

  • 响应长度差异:120字节、140字节

  • 响应时间差异:不一定准确,跟网络可能也有关系

  • 存在用户:200ms

  • 不存在:50ms

修复建议:

  • 统一错误提示、响应码、响应长度、响应时间

多因素认证绕过(MFA)

风险等级:严重

多因素:密码+短信验证码 = 登录成功

常见绕过原因:

开发认为:前端已经验证,后端不再验证

测试方法:

抓取完整流程,然后逐步删除请求,观察是否必须经过MFA接口

简单的说:跳过这个验证,是否会登录成功

比如 密码+短信验证码,我把短信验证码删除是否会跳过验证码这个环节

常见绕过点:

| | | | — | — | | 场景 | 风险 | | 前端控制MFA | 严重 | | Token提前签发 | 高 | | 状态值可控 | 严重 | | 接口顺序未校验 | 高 |

修复建议:

  • 进行后端校验:MFA状态、认证流程、一次性Token

滑动验证码绕过

风险等级:高危

滑动验证码:拼图验证、滑块验证、行为验证

开发目的:阻止自动化攻击

为什么会被绕过?

很多系统,只在前端校验,后端完全信任结果

比如:

正常情况:拖动滑块–>验证成功–>登录

攻击者:

直接发送JSON数据:

{
  "slide":"success"
}

服务器如果返回:验证通过,漏洞成立

测试方法:

抓包,观察:滑块结果是否提交后端、后端是否验证签名、是否存在固定值

常见绕过方式:

| | | | — | — | | 方式 | 说明 | | 删除验证参数 | 测试后端校验 | | 固定值替换 | 修改success | | 重放验证结果 | 复用旧结果 | | 前端JS绕过 | 篡改状态 |

修复建议:

  • 后端验证行为结果
  • 验证结果一次性使用
  • 增加签名机制

Token暴露在URL中

风险等级:严重

Token:登录凭证,如身份证、钥匙、门禁卡等证明你身份的东西

正常情况下,Token应该存放在:Cookie、Authorization Header、secure Storage

错误设计:部分系统直接把Token放在URL中,例如:https://test.com/index?token=abc123

为什么危险?

URL会出现在以下地方:

  • 浏览器历史记录
  • 代理服务器日志
  • Nginx日志
  • Referer头
  • CDN日志
  • 截图

而如果我们得到https://test.com/index?token=abc123,那可直接登录

测试方法:

  • 关注:

  • token

  • access_token

  • jwt

  • sessionid

  • 是否出现在:

  • GET参数

  • URL路径

  • 跳转地址

修复建议:

  • Token仅允许Authorization Header、HttpOnly Cookie中存储

可能有人会问:Nginx日志等信息都得到了,为什么还需要Token?难道Nginx日志不是在SSH后台获取的吗?

有的管理员WEB后台会有Nginx等中间件/服务日志

会话超时处理不当

风险等级:高危

会话超时:用户登录后,没有设置多长时间后自动失效,如:30分钟、1小时、8小时

常见问题:

  • 永不失效:Token永不过期
  • 长期有效:365天有效
  • 退出不失效:点击退出,Token仍可使用

测试方法:

记录Token

执行:退出登录、修改密码、等待超时操作,再次访问接口,使用之前的Token是否可以登录,如果可以,代表存在漏洞

修复建议:

  • Token生命周期管理
  • 登出立即失效
  • 修改密码失效
  • Refersh Token机制

第三方登录漏洞(OAuth)

风险等级:严重

第三方登录:微信登录、QQ登录、支付宝登录、Github登录、Google登录

OAuth流程:用户–>第三方平台–>授权–>返回code–>服务器验证–>登录成功

常见漏洞:

  • Code未校验:攻击者修改code,直接登录别人账号
  • State未校验:导致CSRF
  • OpenID绑定错误:攻击者账号绑定到受害者账号

测试方法:重点关注code、state、openid、unionid、access_token

修复建议:

  • 服务端校验Code
  • 校验State
  • 校验OpenID来源
  • 使用官方SDK

登录模块攻击链分析

真正的攻击者,从来不是发现一个漏洞,而是攻击链

攻击链1:敏感错误提示–>账号枚举–>密码爆破–>登录成功

攻击链2:Token泄露–>Token长期有效–>账号接管

攻击链3:OAuth校验缺失–>身份伪造–>后台接管

登录模块测试Checklist

| | | | — | — | | 检查项 | 是否测试 | | 弱口令 | √ | | 爆破 | √ | | 验证码 | √ | | Cookie | √ | | Session | √ | | Token | √ | | MFA | √ | | OAuth | √ | | 重定向 | √ | | 未授权访问 | √ |

防御体系

  • 第一层:认证安全

  • 强密码

  • 验证码

  • MFA

  • 第二层:会话安全

  • Cookie签名

  • Session管理

  • Tokend管理

  • 第三层:权限控制

  • RBAC

  • ABAC

  • 最小权限原则

  • 第四层:监控审计

  • 登录日志

  • 异常警告

  • 风险识别


免责声明:

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

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

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

本文转载自:一个努力的学渣 一个努力的学渣 一个努力的学渣《逻辑漏洞之登录模块18种利用方法》

评论:0   参与:  0