验证码绕过

什么是验证码?

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

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

basic-captcha.png

验证码的重要性:

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

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

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

避免垃圾邮件和DOS:

咱们知道不少网站都有提交表单的功能,并须要由站点管理员审核经过。例如:会员申请,联系咱们,反馈表,调查表等。这些功能都须要验证码的保护,若是不加以防御那么将会致使如下状况的出现:github

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

保护数据挖掘机器人:

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

验证码为何能被绕过?

验证码被绕过,有如下两个缘由:算法

  • 设计问题
  • 执行问题

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

设计问题

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

设计问题#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:

某些验证码可能会采用相对有限的问题数据库。例如如下是一个基于图片的验证码,很显然这里不能再利用上面提到的破解方案来破解。但这里的问题出在,这里的图片验证码字符是固定而且有限的,在本例中该验证码只会在来回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

执行问题:

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

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

执行问题#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”

weak-captcha-1-crack.png

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

执行问题#2:

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

weak-captcha-2.pngweak-captcha-2-code.png

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

如何破解?

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

weak-captcha-2-crack.png

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

执行问题#3:

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

weak-captcha-3.pngweak-captcha-3-code.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

如何破解?

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

weak-captcha-3-crack.png

你能够在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密钥。

final-captcha.png

你能够从这里下载安全的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

*参考来源:securelayer7