【技术分享】短信和邮箱验证码的漏洞挖掘技巧与经验分享

目录

序言

1.关于验证码漏洞的几种类型

1.1前端显示

1.2响应包显示

1.3验证码转发

1.4篡改接收验证码的手机号

1.5自定义验证码内容

1.6验证码可爆破

1.7验证码重复使用

2.绕过发送限制造成轰炸效果

2.1并发绕过

2.2特殊格式绕过

2.3利用大小写绕过

2.4调用接口绕过

2.5修改IP绕过

2.6修改返回值绕过

2.7修改Cookie值绕过

3.短信和邮箱轰所引发的其他危害

3.1爆破潜在用户


序言

短信和邮箱轰炸带来的问题都大差不差,为了省事我就把它们放在一起形成这篇文章。

那么这些问题都存在在哪些方面呢?例如登录处、注册处、绑定处、换绑处、反馈处、找回密码处、活动领取处等等一些,不一一列举出来了。以上都是常见的可能会出现问题的地方。

短信和邮箱轰炸所带来的影响除了这些,其实还会引发其他类型的问题产生。废话少说直接进入正文!


1.关于验证码漏洞的几种类型

1.1前端显示

这种情况是极为少见的。验证码作为用于鉴别身份的重要方式,没有哪个开发商敢把短信验证码直接显示在前端的。

既然都显示在前端那就失去了他的作用,都这样了为什么不弄个数字图片或者图形验证码来鉴别是否为机器人呢。

遇到的一个实例,他就是把验证码直接显示在了前端。

1.2响应包显示

这种算是前端显示的另一种版本。两者区别就在于前端的可以在网页中直接看到,这种则需要手动查看获取验证码请求后返回的响应包。验证码就会在响应包中被查看到。

1.3验证码转发

什么是验证码转发?比如你要注册一个账号需要绑定手机号,正常的逻辑是只输入一个手机号然后获取验证码。但是在这里可以尝试在第一个手机号的末尾处添加一个英文的逗号然后再填入一个手机号或者用同样的方式无限制添加手机号。

当点击获取验证码按钮后,不光第一个手机号可以收到验证码,刚刚在后面添加的其他的手机号也能接收到验证码。且每个手机号获取到的验证码内容都会一模一样。

1.4篡改接收验证码的手机号

这种情况是验证码转发的另一种版本。两者区别在于验证码转发可以在请求前操作,这种则需要请求后操作。

举个例子,在找回密码处给账号绑定的手机号发送获取验证码的请求时拦截数据包,这时在请求包中会显示账号绑定的手机号,现在把账号绑定的手机号更换成攻击者的手机号。由于系统默认还是在找回密码中输入的账号绑定的手机号,这样就可以劫持验证码,达到重置密码的效果。

1.5自定义验证码内容

举一个抖音海外版的例子,在TikTok的网站上,有一项功能可以让用户向自己发送SMS短信以下载该应用程序,这也就造成了TikTok可以将SMS短信发送到任何电话号码。

正常获取的到短信样子。

当攻击者修改DOWNLOAD_URL参数后向受害者发送短信,则受害者收到的短信中的链接就会变成攻击者修改后的链接。

1.6验证码可爆破

服务端未对验证时间、次数作出限制,存在爆破的可能性。简单的系统存在可以直接爆破的可能性,但做过一些防护的系统还得进行一些绕过才能进行爆破。

对于4位纯数字验证码:从0000~9999有10000种可能,使用多线程在5分钟内跑完并不是很难。

对于6位纯数字验证码:从000000~999999有1000000种可能,单从爆破时间上来看就比4位数的多100倍。

1.7验证码重复使用

验证码重复使用简单的说就是你使用的验证码在登陆完成后,验证码不会失去效果再次去登录时,使用该验证码任然有效。

2.绕过发送限制造成轰炸效果

2.1并发绕过

什么是并发?拿淘宝双11举例子,假设活动开始是9点整,由于用户在这之前购物车内的东西都准备好了就等时间一到就立马下单,那么到了9点突然一大堆用户全都点了付款按钮。简单的来说就是同一时间内大量的数据涌入这就是并发。

有的网站性能没有处理的好就会造成这种情况,并发的次数越大轰炸的次数越多。

2.2特殊格式绕过

假如参数是这样的:mobile=13111111111,且每个手机号只能获取一次验证码。这时可以利用空格来绕过限制,在手机号的前面或者末尾每增加一个空格系统就会认为是一个新的手机号。

请求有GET和POST方式,对于GET请求方式需要把空格进行URL编码(%20),POST的请求大多数情况可以直接加空格。

除了空格还有86、086、0086、+86、0、00、/r、/n以及特殊符号等。

2.3利用大小写绕过

前面说到了关于加空格的绕过限制,但还有一种方式可以绕过邮箱轰炸限制,那就是通过修改大小写,通过修改邮箱后面字母的大小写就可绕过限制,假如参数是这样的:Email=123@qq.com 当次数达到限制时,随便修改一个字母为大写:Email=123@Qq.com就可绕过限制。

2.4调用接口绕过

比如这样的参数:terminal=01&mobile=13111111111,前面的接口是调用短信发送内容的接口,比如terminal参数值为01是调用注册成功的短信提示,02是调用密码重置成功的短信提示,03是调用注册成功的短信提示等等,当修改这个接口值时,也就达到了短信轰炸或邮箱轰炸的目的。

还有另一种情况就是无效验证。什么是无效验证?有的站点要求输入正确图形验证码才可以获取到信息。有的站点验证码形同虚设随便输入字符就可以通过、有的验证码可以重复使用。

还有的就是输入验证码后直接调用接口发送,以上两种情况可以直接利用成功发送验证码的数据包发送到bp的intruder模块,payload设置为空字符大批量发包。

2.5修改IP绕过

有些是验证当前IP的,如果当前IP短时间内获取短信或邮件频繁或者达到一定次数的话就会出现限制,那么就可以利用修改IP或者代理IP来进行绕过限制。

2.6修改返回值绕过

比如发送成功后返回值是success,发送失败的返回值是error,那么当达到次数后,可以通过修改返回值为正确的返回值:success,从而绕过限制,达到发送成功的目的。

2.7修改Cookie值绕过

有些可能不是直接验证手机号来判断次数,而是验证当前Cookie,利用当前Cookie来进行验证发送次数的话,很容易造成绕过,这里如果验证的不是登录状态的Cookie而是普通状态下的Cookie的话就可以通过修改Cookie达到绕过验证。

3.短信和邮箱轰所引发的其他危害

3.1爆破潜在用户

比如在注册处输入手机号或邮箱,它会判断该手机号或邮箱是否存在,如果存在返回通过并执行下一步的操作,如果不存在就返回不存在的信息提示,那么在这里可以批量进行爆破潜在的用户已经注册过的手机号或邮箱号,然后可被利用来进行撞库!

  • 41
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现发送手机短信验证码邮箱验证码的注册登录功能,需要以下几个步骤: 1. 获取用户输入的手机号码/邮箱地址,生成随机验证码,将验证码保存到服务器端。 2. 调用第三方短信/邮件接口,将验证码发送给用户。 3. 用户输入收到的验证码,与服务器保存的验证码进行比对。 4. 如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 下面以 Java Web 项目为例,介绍如何实现发送手机短信验证码邮箱验证码的注册登录功能。 1. 发送手机短信验证码 (1)在 JSP 页面上添加输入手机号码的表单,并在表单提交时调用 Servlet 处理用户请求。 (2)在 Servlet 中生成随机验证码,并将验证码保存到 session 中。 (3)调用短信接口,将验证码发送到用户手机上。 (4)在 JSP 页面上添加输入验证码的表单,并在表单提交时调用 Servlet 进行比对。 (5)如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 2. 发送邮箱验证码 (1)在 JSP 页面上添加输入邮箱地址的表单,并在表单提交时调用 Servlet 处理用户请求。 (2)在 Servlet 中生成随机验证码,并将验证码保存到 session 中。 (3)调用邮件接口,将验证码发送到用户邮箱中。 (4)在 JSP 页面上添加输入验证码的表单,并在表单提交时调用 Servlet 进行比对。 (5)如果验证码正确,则允许用户进行注册/登录操作;否则提示用户输入错误。 以上就是使用 Java Web 技术实现发送手机短信验证码邮箱验证码的注册登录功能的大致步骤,具体实现方式可以根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值