小议验证码的安全性及如何绕过

简介:

一、什么是验证码?

CAPTCHA是(全自动区分计算机和人类的图灵测试)的简称,是用于区分计算机和人类的一种程序算法,这种程序必须能生成并评价人类能很容易通过但计算机却通不过的测试。

像我们平时最常遇到的,就是基于图片的验证码。这类图片验证码通常包含的,都是些易于用户识别简单的验证信息。如下图所示。用户必须准确的识别图像内的字符,并以此作为人机验证的答案,方可通过验证码的人机测试。相反如果验证码填写错误,那么验证码字符将会自动刷新并更换一组新的验证字符,直到用户能够填写正确的验证字符为止。

orwell

二、验证码的重要性

1. 防止与认证相关的攻击行为

以下列举的是一些较易受到暴力攻击的点。例如:

  • 登录:一旦缺少验证码的保护,攻击者则很可能通过暴力破解的方式非法接管用户账户。
  • 忘记密码:如果网络应用程序使用详细消息响应帐户存在或不存在,那么攻击者则可以进行用户名的枚举。
  • 注册:程序批量创建垃圾账户。此外还可以进行用户名的枚举。(正常情况下没有应用程序会允许用户,同时注册两个相同用户名的账号)

2. 避免垃圾邮件和DOS

我们知道很多网站都有提交表单的功能,并需要由站点管理员审核通过。例如:会员申请,联系我们,反馈表,调查表等。这些功能都需要验证码的保护,如果不加以防护那么将会导致以下情况的出现:

  • 大量的垃圾表单可能产生,不仅会影响网站的访问速度,还会加大站点管理员的工作量,而且一些合法用户的请求,也可能会因此被拒绝。
  • 电子邮件轰炸:一些功能可以发送电子邮件到一个任意的邮件地址。如果没有得到有效的验证保护,那么恶意攻击者则可以利用程序,向特定的目标发送大量的垃圾邮件。

3. 保护数据挖掘机器人

  • 某些包含大量数据的站点极易遭受数据挖掘攻击,因此它们也需要验证码的保护。例如:社交网络和搜索引擎。

三、验证码为什么能被绕过?

验证码被绕过,有以下两个原因:

  • 设计问题
  • 执行问题

在以下的内容,我将会带大家认识到这两个问题所在。以及如何解决这些问题,建立更为安全的人机验证。

1. 设计问题

设计问题则意味着验证码本质上的脆弱性,但执行却不存在问题。以下演示将有助于我们了解设计问题的真正原因,以及如何破解它:

(1) 设计问题#1:

以下的示例中我们可以看到,这里的验证码就是一道数学运题。而这里的问题就出在页面的HTML源码上。

captcha-arith.png

你可以在Github上下载到该验证码的源码:

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/ArithmeticCAPTCHA

如何破解?

在这种情况下攻击者往往都会通过获取该页面的HTML源码,计算答案并提交HTTP响应来破解验证码。

captha-arith-crack.png

你可以在Github上下载到该利用代码:

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits

(2) 设计问题#2:

某些验证码可能会采用相对有限的问题数据库。例如以下是一个基于图片的验证码,很显然这里不能再利用上面提到的破解方案来破解。但这里的问题出在,这里的图片验证码字符是固定并且有限的,在本例中该验证码只会在来回10个固定字符组合中更换。因此一旦掌握了它的问题数据库,那么破解也自然就不成问题了。

captcha-ten.png

你可以在Github上下载到该验证码的源码:

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/TenRepeatedCAPTCHA

如何破解?

攻击者首先必须手动解决这10个验证码问题,并同时记录下这些问题的答案。然后通过工具将这些问题的答案存放在自己的数据库中,进行不断的暴力攻击尝试即可。

captcha-tenrepeated-crack.png

你可以在Github上下载到该利用代码:

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits

2. 执行问题

执行问题则意味着验证码由于执行不力而可被破解,但从设计的角度来看是完美的。

以下示范将有助于我们了解,执行问题的真正含义以及如何破解它:

(1) 执行问题#1:

在演示中,我们正在使用Google reCAPTCHA人机验证。我们使用API将用户解决的CAPTCHA响应发送给Google的端点。更多请点击:

https://www.google.com/recaptcha/intro/index.html 。API以JSON的输出形式回复请求,以及HTTP状态码。到现在为止,还没发现什么问题 !!

但是执行问题也就出在这里。开发人员无法检查JSON响应,而以检查发送的HTTP状态码是否为200 OK,作为验证码正确与否的判断依据。

weak-captcha-1.png

你可以在Github上下载到该验证码的源码:

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/weakcaptcha1.php

weak-captcha-1-code.png

如何破解?

攻击者只需要制作一个脚本即可将任何值发送给人机验证码,并且都将会被服务器所接收,因为无论你发送什么答案,服务器都只会通过检查Google API发送的状态码是否为200 OK来作为判断依据。下图中,我们作为答案发送的值是“InvalidAnswerOfCAPTCHA”

你可以在Github上下载到该利用代码:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits

(2) 执行问题#2:

验证码存在于web页面,在用户提交后将被验证,但问题却出在了if和else一个简单的子句中。这个错误是由于开发人员将响应码写在了其它部分形成的。所以这里即使验证码答案是错误的,应用程序仍将给予用户积极的响应。

weak-captcha-2.png

weak-captcha-2-code.png

你可以在Github上下载到该验证码的源码:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/weakcaptcha2.php

如何破解?

攻击者只需要制作一个脚本,即可向验证码发送任意值。在下图中,我们作为答案发送的值是“InvalidAnswerOfCAPTCHA”

“InvalidAnswerOfCAPTCHA

你可以在Github上下载到该利用代码:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits

(3) 执行问题#3:

验证码存在于web页面,但在提交后未在服务器端进行验证。

weak-captcha-3.png

你可以在Github上下载到该验证码的源码:

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/weakcaptcha3.php

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/weakcaptcha4.php

如何破解?

攻击者只需通过输入错误的验证码和任意电子邮件,就可以轻松地绕过它。

你可以在Github上下载到该利用代码:

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/tree/master/CaptchaExploits

四、如何保护自己免受CAPTCHA攻击?

其实这个问题也很简单,大家可以按照以下步骤,来制作一个强大的CAPTHCA功能:

设计:实施设计良好的CAPTCHA方案。从以上示例中我们可以看到,大多数我们自己设计的验证码都或多或少的存在一些问题。因此,我建议大家尽可能的使用像Google这样的第三方CAPTCHA。

执行:在你选择了具有良好设计的人机识别系统后,下一步是正确的执行。我们已经看到,尽管有一个设计良好的CAPTCHA,但是如果不能正确执行,仍然可以被破解。如果你使用的是Google reCAPTCHA,请参照以下操作步骤:

  • 以检查Google发送的JSON响应取代HTTP状态码检查。
  • 在if和else子句中实现正确的逻辑,区分有效和无效的答案。
  • 不要透露你的私人CAPTCHA密钥。

如何保护自己免受CAPTCHA攻击?

你可以从这里下载安全的CAPTCHA代码:

https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script/blob/master/GooglereCAPTCHA/goodcaptcha.php

五、总结

在实际业务及生产中,某些功能会要求有CAPTCHA。而不安全的CAPTCHA,将会导致敏感数据被窃取,认证攻击,DOS用户甚至管理员等严重问题的发生。因此对于开发人员和使用者而言,具有一个好的设计和实施的CAPTCHA至关重要!

所有脚本的Github链接:https://github.com/securelayer7/Captch-Bypass-Vulnerable-Script

作者:secist
来源:51CTO


相关文章
|
Linux Docker 容器
CentOS7离线安装Docker
CentOS7离线安装Docker
3254 0
|
9天前
|
IDE Java 编译器
【全网最详细】JDK8下载安装图文教程 | Java8环境变量配置指南
JDK8是2014年发布的经典Java版本,至今仍广泛应用于老项目维护与基础学习。它引入Lambda表达式、Stream API和全新日期时间API等关键特性,大幅提升代码简洁性与功能性。本教程详解官方下载、Windows安装步骤、环境变量配置及基础验证方法,助你快速上手。(239字)
|
10月前
|
人工智能 Java 程序员
程序员副业搞钱新姿势!晒完整工程代码赢万元好礼
飞算JavaAI炫技赛重磅回归!展示解决复杂业务场景的完整工程代码,赢取万元现金大奖,让技术实力被业界看见。通过比赛,你的作品将成为最佳简历,吸引高质项目与合作,解锁长期副业可能。借助飞算AI工具提效,掌握未来竞争力,拓展人脉圈链接更多资源。程序员们,立即参赛,用代码开启“搞钱”新征途!
|
存储 编解码 算法
视频为什么可以被压缩?帧内压缩与帧间压缩有何区别?视频编码中的CBR、VBR、CRF...是什么?
视频压缩基于冗余,包括空间冗余、时间冗余、视觉冗余和编码冗余。帧内压缩利用空间相关性,帧间压缩利用时间相关性。视频编码中的码率控制方法有CBR(固定码率)、VBR(动态码率)、CRF(固定码率系数)、CQP(固定质量参数)、CVBR(约束可变码率)和ABR(平均码率),各有优缺点,适用于不同的场景。
|
数据采集 人工智能 文字识别
如何绕过Captcha并使用OCR技术抓取数据
在现代网页数据抓取中,Captcha作为一种防止爬虫和恶意访问的措施,广泛应用于各种网站。本文介绍如何使用OCR技术绕过文字Captcha,并通过代理IP技术提高爬虫的隐蔽性。具体实现包括下载Captcha图片、使用Tesseract OCR识别文字、通过代理IP抓取目标数据。示例代码展示了如何抓取大众点评的商家信息。
708 0
如何绕过Captcha并使用OCR技术抓取数据
|
算法 数据处理 数据库
生物学经典Blast序列比对算法原理,如何在R语言和Python中实现序列的比对分析?
生物学经典Blast序列比对算法原理,如何在R语言和Python中实现序列的比对分析?
|
SQL 分布式计算 数据可视化
基于Hadoop的大数据可视化方法
【8月更文第28天】在大数据时代,有效地处理和分析海量数据对于企业来说至关重要。Hadoop作为一个强大的分布式数据处理框架,能够处理PB级别的数据量。然而,仅仅完成数据处理还不够,还需要将这些数据转化为易于理解的信息,这就是数据可视化的重要性所在。本文将详细介绍如何使用Hadoop处理后的数据进行有效的可视化分析,并会涉及一些流行的可视化工具如Tableau、Qlik等。
587 0
|
数据采集 前端开发 JavaScript
Selenium+2Captcha 自动化+验证码识别实战
Selenium+2Captcha 自动化+验证码识别实战
1018 0

热门文章

最新文章

下一篇
开通oss服务