Insecure CAPTCHA漏洞利用以及防御
漏洞介绍
CAPTCHA
项目是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的图灵测试)的简称,是一种区分用户是计算机和人的公共全自动程序。- 使用
CAPTCHA
可以防止计算机恶意破解密码、刷单等,保证用户是人类(无法快速反复发送请求)。 - 攻击者绕过
CAPTCHA
验证后,可以使用恶意脚本操控计算机反复发送请求或者在异地实现绕过验证的CSRF
攻击。
漏洞原理
CAPTCHA
漏洞利用验证机制的逻辑漏洞,下面给出验证流程。- 服务器使用recaptcha_check_answer()函数验证用户输入的正确性
recaptcha_check_answer(string: remoteip, string: response, array: $extra_params = array())
-
可以利用服务器核对验证信息这个环节,绕过
CAPTCHA
验证,完成非人类请求。
漏洞复现
- 这里使用
DVWA
靶场完成对攻击场景的模拟。 - 由于
Burp Suite
的代理和梯子冲突,故不打开梯子,reCAPTCHA
无法显示(会使用方法绕过,此处不影响)。
Low
代码
审计
- 这里修改密码的过程有两步,第一步是
CAPTCHA
的验证环节,第二步是将参数POST
到后台。 - 由于两步操作的判断是完全分开、没有联系的,于是可以忽略第一步的验证,直接提交修改申请。
- 两个步骤对应的
step
参数不同,可以通过抓取报文并且修改step
,来实现验证的绕过。 - 代码没有对
CSRF
进行任何防护,可以利用CSRF
漏洞进行攻击。
攻击
- 用户点击攻击页面后自动提交请求,并跳转到修改密码的初始页面。
Medium
代码
审计
Medium
级别基于Low
的基础,在第二步判断增加了对第一步是否通过的验证,即判断参数passed_captcha
是否为真。passed_captcha
参数是通过POST
提交的,整个请求也是POST
请求,故可以人为加上此参数。
攻击
- 同
Low
一样,直接跳过验证环节,提交请求。 - 使用
Burp Suite
抓取包并修改报文,将步骤直接调整到第二步,第二步的验证伪造为已验证,即直接加入passed_captcha
参数,混入POST
的参数提交。 Forward
提交请求,发现完成绕过。- 利用
CSRF
漏洞攻击时,攻击页面需要添加一条参数提交。
High
代码
审计
High
级别将验证流程合并,通过连续的判断将两个步骤相同的部分合并,避免了第一步验证的直接改参绕过。- 加入了
token
机制,有效防止CSRF
漏洞攻击,下面不再做攻击页面。
攻击
- 看到了后端代码,发现即使不验证也有机会绕过验证,于是针对
g-recaptcha-response
和HTTP_USER_AGENT
操作。 - 同样不验证,直接提交请求并对相关参数进行抓包修改。
- 提交后,参数完成了伪造绕过。
漏洞防御
- 使用
Impossible
级别代码作为防御模板。
代码
审计
- 使用
Anti-CSRF token
机制防御CSRF攻击。 - 验证步骤合并为同一步,无需分开,使得验证环节无法绕过。
- 要求输入修改之前的密码,攻击者无法绕过。
- 利用
PDO
技术输入内容过滤,防止了sql
注入。
__EOF__

本文作者:ch3uhx9
本文链接:https://www.cnblogs.com/cheuhxg/p/14473180.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cheuhxg/p/14473180.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix