一次有趣的挖洞经历:我花了6小时绕验证码,最后发现只要把它删了

admin 2026-08-15 06:33:39 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分享了作者在某银行系统渗透测试中绕过验证码的有趣经历。最初尝试了OCR识别、打码平台、重放请求等6种复杂方法均失败,最终意外发现只需完全删除验证码字段即可登录成功,揭示了后端验证逻辑存在严重缺陷:未传验证码字段时直接放行。该案例提醒开发人员应严格校验验证码字段的存在性,避免因兼容性处理不当导致安全漏洞。 综合评分: 92 文章分类: 渗透测试,漏洞分析,实战经验,web安全


cover_image

一次有趣的挖洞经历:我花了6小时绕验证码,最后发现只要把它删了

原创

是老A 是老A

老A搞安全

2026年6月21日 20:27 贵州

在小说阅读器读本章

去阅读

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

有些漏洞,蠢到你不敢相信,但它就是存在。

先说一个让我崩溃的经历

有一次,给某银行的业务系统做渗透测试。

登录页面长上面那样

就是那种歪歪扭扭的数字字母组合,每次刷新都不一样。

测试账号已经拿到了,用户名密码都是对的。但问题来了:

每次登录都要输验证码。

手工测几次还行,但渗透测试要做的是:大量、重复、自动化地发送请求,去测试各种逻辑漏洞。

而验证码,就是挡在自动化前面的那堵墙。

我当时想:“不就一个验证码吗?绕过去就是了。”

结果这一绕,就是6个小时。

这6个小时我试了什么

第一招:OCR识别

就是让程序自动识别图片里的文字。验证码图片下载下来,扔给OCR库去读。

结果:验证码太花了。扭曲、噪点、干扰线,OCR识别率不到10%。

10次里对1次,这没法用。

第二招:打码平台

把验证码图片发到第三方打码平台,让人工帮忙识别。

这个方法确实能识别,但问题是:太慢了。

一次识别要等好几秒,发1000个请求就得等好几个小时。

渗透测试是有时间限制的,等不起。

第三招:重放请求

不识别验证码了,我直接拿一个已经用过的验证码重复提交。看看系统会不会允许同一个验证码用两次。

结果:不行。系统提示“验证码已过期或已使用”。

第四招:验证码复用

换个思路:我拿一个验证码,去请求多个不同的接口。看看验证码是不是跟“用户会话”绑定的,还是只跟“当前操作”绑定。

结果还是不行。系统做了校验,一个验证码只能用一次。

第五招:验证码置空

把验证码字段改成空字符串,或者null,或者空格。

系统返回:“验证码不能为空”。

第六招:Session复用

我先正常登录一次,拿到一个有效的Session,然后用这个Session去发别的请求,不再提交验证码。

结果:系统检测到Session里没有“验证码校验通过”的标记,拒绝访问。

……

六种方法,全部失败。

6个小时过去了,我对着屏幕陷入了深深的自我怀疑:

“我是一个渗透测试工程师,还是在给验证码当奴隶?”

但是……

如果你看到这里,大概能猜到接下来会发生什么——

转机来了。

当时是下午4点多,盯着屏幕盯得眼睛发酸,我起身去倒了杯水。

回来的时候,鼠标不小心点到了Burp Suite(一个抓包工具)里的请求包。

我把验证码字段整个选中,准备复制出来看看格式。

但手一抖,按了Delete键。

整个captcha=xxxx这一段,被我删干净了。

然后习惯性地按了“发送”按钮。

返回 200

登录成功。

我愣住了。

不对啊,验证码没填,怎么成功了?

我马上做了三组测试

测试一:验证码填正确的

→ 登录成功。(正常)

测试二:验证码填错误的

→ 登录失败。(也正常)

测试三:验证码字段整个删掉,不传

→ 登录成功。(???)

明白问题出在哪了吗?

后端代码的逻辑是这样的:

if (请求里没有验证码这个字段) {    // 可能是老版本客户端,不校验验证码    直接放行} else {    // 有验证码字段,校验对不对    校验验证码}

也就是说:

  • 传了验证码但填错 → 拦截
  • 压根不传验证码 → 放行

这个逻辑的“初衷”可能是为了兼容老版本的客户端。老客户端不发验证码,新客户端发验证码。

但实现方式是错的。

正确做法应该是:

if (请求里没有验证码字段) {    // 老客户端,需要做兼容处理    返回错误,提示"请升级客户端"} else {    // 校验验证码    校验验证码}

或者更直接:

无论有没有验证码字段,都校验。如果没有传,就当作"验证码为空"处理。

但开发人员写成了:

“老版本没有验证码,那就让它过吧。”

结果就是:只要攻击者不传验证码,验证码机制就形同虚设。

说实话,知道真相的那一刻,我的表情是这样的:😐→🤔→😅→😂

6个小时,试了六种花式绕验证码的方法,OCR、打码平台、重放、复用、置空、会话复用……

每一个都研究得煞有介事,每一个都精心构造请求包。

最后进去的方式是:把它删了。

那这6个小时算不算白干?

算,也不算。

算白干,因为最终解决方式简单到令人发指。

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


免责声明:

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

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

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

本文转载自:老A搞安全 是老A 是老A《一次有趣的挖洞经历:我花了6小时绕验证码,最后发现只要把它删了》

评论:0   参与:  0