阿里云校园公益比赛爆破验证码刷票思路分析

阿里云校园公益比赛爆破验证码刷票思路分析

这是前段时间我参加的一个比赛,虽说阿里云的比赛,但其实这个比赛的主办方并非阿里云,而是慧科培优主办的,阿里云则是提供各种参赛资源,宣传阿里云的产品(当然这只是我个人看法而已)。所以这个比赛的网页前端和后端可能都是由他们程序猿做的,也是放在他们的域名下面的http://www.hpeiyou.com/aliActivityNew.html

因为当时我很无力吐槽,如果是阿里云做的,怎么会连https都不部署。

回到正题,因为提交了作品之后,他们有一个参赛作品投票的环节,其实我觉得这个投票真没啥意义。

当时我曾思考过如何来刷票的,但我又觉得参加个比赛,何必这样做呢,所以我也就没有刷票。但是我写这篇文章的初衷只是作为技术分享,并非教大家如何利用这种方法来刷票。

他们的投票方式是通过手机接收验证码来实现的,一个手机号一天可以投票5次,当时我还在qq群里听小度说,为了防止我们刷票,引入了第三方的验证。虽然确实是这样的,貌似他们的程序猿以为这样就高枕无忧了,我表示无fuck可说。

这是投票的界面,先输入手机号获取验证码,之后会收到一个四位数的验证码,注意是四位数!四位数!四位数!因为四位纯数字爆破起来是很容易的。

但是最让我觉得狗血的是,他们的程序猿竟然没有对前端的输入的手机号进行合法性判断,所以在图上我就是随便输入了一个字符串zbcdefg,手动滑动图片绕过人机验证,然后竟然也提示接收验证码了,但一个字符串是不可能收到验证码的,但是后端会自动生成一个验证码,what fuck ???!!!

于是开始用burp抓包

此时再对刚才的随机字符串进行爆破,抓包扔到intruder里面去,导入一个四位数的字典,可以把线程调大一点(毕竟这网站还是做了负载均衡的,用的也是阿里云的服务器),跑完整个字典可能就一分钟的样子,快的话几十秒就能爆破出正确的验证码

然后就可以用这个字符串来刷5张票,那么刷票也就不是问题了。因为用随机的正常手机号是肯定可以的,所以我就用的字符串来演示的。

但是别以为这样就结束了,还有更逆天的,永远猜不透程序猿写代码是怎么想的,这个投票竟然还没有验证码回收机制,就是前一天接收的验证码如果第二天不重新接收,还能接着使用以前的验证码投票,那么这个对于刷票来说还真的是一本万利。我第一天进行验证码的爆破,之后一直用那个验证码刷票。

这是我昨天接收的验证码,今天接着投票。

我本来还想写一个python的脚本实现自动刷票的,但我想了想还是算了。毕竟我只是做渗透的,又不是搞灰产的,浅尝辄止就好。

对于这类问题,我也有一些自己的看法:

  1. 对前端的输入的内容做验证
  2. 验证码还是6位的比较好
  3. 但验证码不过期这个就很无语
  4. 部署https
  5. 搞个waf还是有必要的,短时间内如果同一个ip发起的请求次数过多可以关小黑屋

如果有这个网站的开发人员看的这篇文章的话,心里mmp就行了,毕竟我还是个学生,赶紧把漏洞修复就好了。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。