文章总结: 本文分享了作者在某银行系统渗透测试中绕过验证码的有趣经历。最初尝试了OCR识别、打码平台、重放请求等6种复杂方法均失败,最终意外发现只需完全删除验证码字段即可登录成功,揭示了后端验证逻辑存在严重缺陷:未传验证码字段时直接放行。该案例提醒开发人员应严格校验验证码字段的存在性,避免因兼容性处理不当导致安全漏洞。 综合评分: 92 文章分类: 渗透测试,漏洞分析,实战经验,web安全
一次有趣的挖洞经历:我花了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小时绕验证码,最后发现只要把它删了》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。






![暗网泄露:美国发生2.5亿美元巨额泄密事件[250,000,000行以上]](/images/random/titlepic/9.jpg)



评论