4

关于刷票

 2 years ago
source link: https://lgf.im/posts/security/web-security/brush-votes/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

关于刷票 - zu1k

 收录于 coding
 2020-07-13  约 1389 字   预计阅读 3 分钟 

相信大家都经历过朋友圈、群组里各种转发求投票的消息,有需求就会有刷票

关于刷票我自己也稍微研究过,这里说的刷票是指刷投票,不是黄牛那种抢票

人生中第一次刷票是在大一,舍友的姐姐结婚拍婚纱照,摄影店给了一个点赞链接,承诺点赞数量超过500票免费送豪华相册和相框

舍友让我们帮着转发和点赞,这种东西大家都懂,不想污染了朋友圈,但又不能不帮舍友,碰巧当时正在研究微信抓包啥的,便想研究一下看看能不能刷票

投票网页要求必须微信打开,如果是普通浏览器打开不让投票,但是在微信进行投票它也没有弹出那个获取微信个人信息的确认框,这让我怀疑他根本没有利用微信的信息进行身份确认,有可能可以伪造身份进行刷票

早期微信抓包非常简单,手机root后安装xposed,使用JustTrustMe插件信任所有证书,然后手机安装burp的证书,wifi使用burp的代理,然后就能使用burp对https进行抓包了

抓包后发现投票的确没有仔细检查个人信息,于是通过Burp的Intruder伪造了身份,重放几百次顺利给舍友刷取几百票,圆满完成他姐姐交给他的任务

前几天的刷票

前几天出于好奇又刷了一波票,这次经历是我写这篇文章的主要动机

前几天,我们导员、任课老师、教务等疯狂发钉钉、朋友圈、QQ群、QQ空间,让帮我们学弟投票

随手投上一票,发现投票网站需要使用姓名和手机号码注册,但是没有验证手机验证码,并且没有限制浏览器,感觉必有刷票的机会

于是对网页的所有请求进行抓包分析,发现投票是使用WebSocket进行的,投票时只需要给出登录成功的token和要投的队伍号

关键就在这个登录上了,如果能够有效验证投票者身份就能够减轻刷票,但是分析注册和登录请求发现并没有对用户身份进行有效验证,手机号码可以随便伪造

并且,姓名字段没有任何要求,没有限制长度,没有限制必须是中文,随便一个字符串就能被接受

于是写了一个程序,自动伪造身份登录、投票,循环这个过程

认识与建议

上面两个案例是成功的刷票经历,我也经历过几次失败的刷票经历,在失败的经历中,那些投票系统都是利用微信提供的用户信息验证用户身份,而微信本身对用户审核的很严(没办法伪造),我也没有多个微信号,刷票自然失败

实际上,刷票过程最重要的是伪造投票者身份,欺骗投票系统是不同用户进行的投票,所以投票系统防刷票最重要的就是验证用户身份

在实际应用中有很多验证用户身份的方法:

  • 验证手机号(发验证码的那种)
  • 验证是否真人(极验、reCaptcha)
  • 利用微信提供的身份

对于验证手机号,刷票组织可以轻松的获取大量手机号,包括各种真号码、虚拟号码,这种方法可以轻松绕过

对于使用机器人验证器,绕过比较麻烦,但是也是可以通过程序绕过的,并且刷票组织有可能人力手工进行验证

使用微信提供的身份信息是最难搞的,因为微信本身审核的很严,提供的身份又无法伪造,这里利用的是微信对用户身份的验证,是可以信任的。但是也不是没有绕过的方法,刷票组织有时候会养了大批量的微信号用来刷票,利用群控手段也可以绕过。

并且,有很多刷票组织养着很多群,可以提供真人投票服务,这种刷票成本非常高,但是是无法检测的,刷票成功率100%

针对刷票行为,无法完全避免,我们能做的就是通过各种方式对用户身份进行验证,检查用户IP,尽量避免身份伪造

同时,可以对投票请求的频率等信息进行分析,因为脚本刷票投票会很集中、时间间隔会比较均匀


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK