分享一次登录框渗透测试思路,这样测多半能出洞!

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

文章总结: 本文系统梳理登录框渗透测试思路。首先通过URL特征与报错差异进行信息收集及用户枚举,接着抓包分析加密逻辑,实施弱口令爆破与验证码绕过。重点剖析密码找回的逻辑缺陷如默认密保与步骤跳过,以及登录后的URL跳转、JWT篡改和越权访问等风险。建议结合定制字典与前端逆向进行验证。 综合评分: 82 文章分类: WEB安全,渗透测试,实战经验,漏洞分析


cover_image

分享一次登录框渗透测试思路,这样测多半能出洞!

原创

是老A 是老A

老A搞安全

2026年7月28日 07:48 贵州

在小说阅读器读本章

去阅读

一位深耕网络安全的老兵,目前是一家安全公司的技术分管,擅长渗透测试及安全培训方向,老A的愿望是大家没烦恼,一切顺心!

近期有哥们吐槽,现在渗透越来越不好干了,光给一个登录框,可利用的点少得可怜……

额嗯……

工作再难,也得硬着头皮干,分享自己挖洞多年的一些心得,仅供技术交流!

先搞清楚目标是什么

拿到一个登录框,首先要明确:你在测试什么?

不是单单的关注”能不能登录进去”,而是”这个登录过程存在哪些安全隐患”

  • 有没有暴力破解的风险?
  • 有没有逻辑绕过的方法?
  • 有没有信息泄露的问题?
  • 有没有权限校验的缺失?

整个登录过程,从输入用户名密码,到后端验证,到返回登录结果,再到登录后的状态管理,每一个环节都可能出问题

但第一步,还是先做信息收集

先搞清楚这个登录框用了什么技术,有哪些表面特征

看看页面

/login、/signin、/auth/login、/api/login

不同路径暗示了不同的技术栈,登录页面的URL结构和报错信息可以透露后端技术

示例:

/login.action→Struts2,/login.do→Spring MVC,/api/login→前后端分离,/login.jsp→JSP

报错信息

输错用户名和输错密码,返回的提示信息是不是一样?

  • 如果显示”用户名不存在” → 用户名可枚举
  • 如果显示”密码错误” → 说明用户名存在

这是一个常见的信息泄露点。攻击者可以通过报错差异批量验证用户名是否存在

验证码

是否有验证码?图形验证码还是短信验证码?验证码是每次刷新都会变,还是同一个会话里可以复用?

验证码的设计方式直接影响暴力破解的难度

页面源码

查看页面源码,有时候会有意外发现:

  • → 有CSRF防护
  • 注释里可能写着接口地址或测试账号
  • JS文件里可能暴露了加密逻辑

抓取登录请求

用Burp Suite拦截登录请求,看看请求包长什么样。

关注以下几个点:

请求方式

GET还是POST?如果是GET,用户名密码会暴露在URL里,存在日志泄露风险

参数名

username、password、captcha、rememberMe、redirectUrl

参数名本身也能提供信息。比如redirect可能存在URL跳转漏洞,token涉及Token生成逻辑

加密情况

密码是明文传输还是加密后传输?如果是加密的,加密逻辑在前端还是后端?

如果密码在前端用JS加密后再发送,那就要找到加密函数,这样才能构造合法的登录请求进行爆破

返回包格式

登录成功和失败的返回有什么不同?

{"code":200,"msg":"登录成功"} → JSON格式{"code":401,"msg":"用户名或密码错误"} → 统一的错误提示

暴力破解的两种打法

暴力破解分两种:弱口令猜解和用户名枚举

弱口令猜解

用常见的弱密码去试

经典弱密码字典

123456passwordadminadmin12312345678qwerty1234567891234512341111111234567000000admin@123

企业定制字典

很多系统使用企业名称缩写、年份、固定后缀作为密码。测试前先收集目标企业的相关信息(公司名简称、成立年份、域名),生成定制字典往往比通用字典更有效

测试方法

  • 暴力破解的两种打法准备一个用户名列表(如果不知道用户名,先做用户名枚举)
  • 准备一个密码字典
  • 使用Burp Intruder进行爆破
  • 通过返回包长度或状态码判断是否成功

用户名枚举

不管密码对不对,通过返回包的差异来判断用户名是否存在

典型差异:

用户名存在但密码错误:{"code":401,"msg":"密码错误"}用户名不存在:{"code":404,"msg":"用户不存在"}

如果看到这两种不同的提示,就可以批量验证用户名是否存在。有了有效用户名,再针对性地爆破密码,效率会高很多

注意:很多系统现在已经做了统一提示,比如无论什么情况都返回”用户名或密码错误”。遇到这种情况,用户名枚举就不好使了

绕过验证码

验证码是防爆破的重要手段,但实现不好的话,绕过方式很多

方式一:验证码复用

用同一个验证码重复提交多次

测试方法:获取一个验证码图片,截取其中captcha或code的值,用这个值重复发送登录请求。如果第二次请求还能成功,验证码就可以复用

方式二:验证码置空

直接删掉验证码字段,或者传空值

正常请求:

POST /loginusername=admin&password=123456&captcha=abcd

测试请求:

POST /loginusername=admin&password=123456

或者:

POST /loginusername=admin&password=123456&captcha=

如果后端逻辑是”没有captcha字段就不校验”,那这个验证码就形同虚设

方式三:验证码OCR

简单的图形验证码,可以直接用OCR识别

如果验证码是纯数字、无扭曲、无干扰线,Tesseract等OCR工具识别率很高

方式四:验证码爆破

如果验证码只有4位数字,总共10000种组合。并发请求的话,很快就能跑完

但这种方式容易被封IP,实际操作中比较少用

方式五:短信验证码绕过

短信验证码更常见的问题是:

  • 验证码长度过短(4位数字)
  • 验证码有效期过长(10分钟)
  • 没有限制尝试次数
  • 验证码没有做绑定(用A手机号的验证码给B手机号用)

逻辑漏洞

密码找回功能

密码找回是逻辑漏洞的重灾区

默认密保答案

很多系统的密保问题有一个默认答案,比如”111″、”admin”、”000000″

如果用户注册后没改过密保答案,攻击者输入默认答案就能重置密码

真实案例:某系统的密保答案默认是”111″,测试人员用admin账号输入111,直接跳转到了重置密码页面

密保答案可遍历

“你的出生地是哪里?”这种选择题式的密保问题,选项往往只有几个(北京、上海、广州……)。遍历一遍就能命中

重置链接可预测

密码重置链接长这样:

https://xxx.com/reset?token=123456

如果token是自增数字或者时间戳+简单算法,攻击者可以枚举出其他用户的重置链接

多步骤校验绕过

找回密码分三步:验证身份→发送验证码→重置密码

如果跳过第一步直接访问第二步,或者跳过前两步直接访问重置页面,那前面所有校验都白做了

测试方法:直接访问重置密码的最终URL,或修改URL中的步骤参数(step=1改成step=3),看能否越过前面的验证步骤

短信轰炸

输入手机号,点击”获取验证码”。

重放这个请求,观察是否每次都能成功发送短信

  • 如果能连续发送 → 短信轰炸漏洞
  • 如果提示“发送过于频繁” → 有防护

更隐蔽的轰炸方式:

系统限制同一个手机号60秒只能发一次,但攻击者可以换多个不同的手机号同时请求,导致同一个号码收到多条短信

任意用户注册

注册功能没有做校验,攻击者可以用任意手机号/邮箱注册

更严重的情况:注册时没有校验验证码,或者验证码可被绕过,攻击者可以批量注册账号

越权与未授权

登录后的跳转

登录成功后,系统通常会跳转到某个页面

POST /loginusername=admin&password=123456&redirect=/home

如果redirect参数可控,且后端没有校验跳转目标,攻击者可以构造钓鱼链接:

https://xxx.com/login?redirect=https://evil.com

用户登录后会被跳转到恶意网站

测试方法:将redirect参数改成外部网址(如https://evil.com),看是否跳转

登录后的Token

登录成功后,系统返回的Token有什么特征?

  • JWT格式(eyJ…)? → 可以解析看看里面存了什么信息
  • 自增数字? → 可以遍历
  • 有签名吗? → 测试是否可以篡改

JWT测试重点:

解析JWT的payload,看看里面有没有存username、role、user_id等信息。如果有,尝试修改这些值再重新签名(使用空签名或none算法),看服务端是否校验签名。

已登录后的越权

登录成功只是第一步。登录后能访问哪些数据,是进一步测试的重点

这里涉及的水平越权、垂直越权、未授权访问,与上一篇文章《越权测试三模式》中的方法一致:

  • 拿到登录后的Token,把userId改成别人的
  • 拿普通用户的Token去访问管理员接口
  • 拿掉Token直接访问需要登录的接口

其他需要注意的点

加密参数

如果密码在前端加密后传输,需要找到加密函数。

一般在前端JS文件中搜索encrypt、password、encode等关键词可以定位。找到后,逆向出加密逻辑,在Burp中预处理密码字段,再进行爆破。

返回包信息泄露

登录失败时,返回包里是否包含敏感信息?

  • 用户名是否存在
  • 账号状态(已锁定、未激活)
  • 剩余尝试次数
  • 最近登录时间/IP

这些信息看似”帮助用户”,实际上给了攻击者更多线索

静态文件泄露

登录页面引用的JS、CSS、图片文件,有时候会暴露一些不该暴露的东西。 比如在JS文件中发现:

var apiBase = "https://internal-api.xxx.com"var testAccount = "test/123456"// TODO: 上线前删除测试账号

这些信息可以直接利用

⚠️ 法律声明:以上内容仅供安全学习和授权测试使用。未经授权的漏洞利用属于违法行为,请勿对未经授权的目标进行测试。


免责声明:

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

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

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

本文转载自:老A搞安全 是老A 是老A《分享一次登录框渗透测试思路,这样测多半能出洞!》

内网横向手法汇总 网络安全文章

内网横向手法汇总

文章总结: 本文系统梳理内网横向移动五大途径,重点详解远程桌面、IPC$共享及PTH哈希传递攻击。剖析了IPC$基于SMB的认证原理、UAC过滤机制及利用SC服
评论:0   参与:  0