原文链接:渗透测试之登录验证码绕过
0X00 验证码的作用
验证码(CAPTCHA)是“Completely Automated Public Turing test to tell computers and Humans Apart”(全自动区分计算机和人类图灵测试)的缩写,是一种区分用户是算计还是人的公共全自动程序。
可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一特定注册用户用特定程序暴力破解的方式进行不断地登录尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简单的方式实现了这个功能。
验证码机制原理:客户端发起请求->服务端响应并创建一个新的SessionID同时生成随机验证码,将验证码和SessionID一并返回给客户端->客户端提交验证码连同SessionID给服务端->服务端验证验证码同时销毁当前会话,返回给客户端结果。
0X01绕过姿势
设置了验证码并不是完全可靠,在很多地方存在验证码绕过的情况(举例是在登入处) 1、前端验证码,并没有后端验证码,直接抓包进行跑数据包,反正没有验证码的阻碍。 2、验证设置了但是并没有校验,乱偷验证码也能够成功的登录。 3、验证码空值绕过,比如,我们现在抓一个包,发现登入参数是user=admin&password=admin&yzm=4123。yzm验证参数,但是我们如果去掉了yzm的传参我们就可以绕过验证码机制,直接传参user=admin&password=admin,验证码就失效了。 4、验证按可控制,比如,他的验证码包含在URL里面,是一个传参,我们可以吧url设置设定,那么验证码可控制。 5、验证码有规则,比如时间戳的后六位。 6、有万能验证码,验证码无论是什么,只要输入000000就能直接绕过。 7、验证码有时候会藏在cookie里面,分析一下是不是存在验证码的参数。
0X02漏洞危害
验证码失效,导致账号密码可被爆破。
0X03实例
点击登录,进行抓包看看。
我们将包放进Repeater里面进行重放一次,看一下
提示账户或者密码错误,这次我们在Repeater将数据包账户密码换成正确的查看。
提示登录成功,我们将验证码参数删除再次重放尝试。
依旧提示登录成功,证明验证码只在前端JS进行校验,未在后台服务器进行校验。
查看源码发现确实只对账号密码进行了校验,未对验证码进行校验。
0X04修复建议 1、系统在开发时注意验证识别后销毁session中的验证码。 2、限制用户提交的验证码不能为空。 3、禁止将验证码明文信息发送至客户端。 4、应作两次校验,前端校验完后端再次进行校验。
|