那些年我们“投(shua)”过的票

来源:互联网 发布:泰国网络女神宝拉男友 编辑:程序博客网 时间:2024/06/05 00:31

http://www.freebuf.com/articles/web/125470.html

http://www.freebuf.com/articles/web/125921.html?utm_source=tuicool&utm_medium=referral

最近朋友圈中时不时有人要帮忙投个票啥的,又想起N年前,那时候刚开始学习渗透测试,并且自学java的时候,为了学习代码的同时能够更好的用于实战,想找一些事来做一做。

当时发现一个文学网站有一个为期3个月左右的投票活动,网站活动刚开始就看着最前面的一些作品一下子就获取了1万多票(肯定是专业团队刷的),于是已一个当时屌丝的心态来看,似乎有事做了。哪知道最终我和这个文学网站的投票系统杠上了。

由于是自学java期间,所以没有用一些打包好的jar包,如httpclient等,代码基本都是原生的。

刚开始的时候,测试发现网站的投票功能没有任何限制,于是写了几行代码,直接发送post请求:

1.jpg

看到很多作品的投票数往上涨,心里很是开心。

不过几天后,发现程序似乎失效了,刷了半天,票数似乎没有任何变化,难道有什么变动?

抓包测试了一下,发现似乎请求还是原来的请求,不过似乎只能投票一次了?难道是IP的限制,果断用一个代理IP试了一下,发现又成功了。果然是IP的限制。

一个作品一天只能用一个ip投票一次

于是想着用代理IP,可是平时我也就几个IP翻翻墙而已,这几个代理改变不了大局。总不能为了搞个这个,还花钱去买一堆IP吧,不过网上还是有许多的http和sockets的免费代理,有些5分钟更新一次,有些10分钟更新一次,不过这类IP的失效速度挺快的,用于投票还是挺靠谱的。

网上有挺多的代理工具可以自动收集、整理并验证IP是否有效的,只需要输入网页地址就好了,我用的是花刺代理:

2.jpg

最常用的就是添加资源》下载代理资源》验证全部》导出选定,直接导出txt的格式。

然后写代码读取有用的代理IP,默认用http,报错后切换socket代理:

3.jpg

验证码的对抗

不过又过了一段时间,又发现不行了,原来加了验证码,不过验证码很简单,只是纯数字,而且没有啥变形之类的,也就没有弄ocr等等工具,以提高自己为主,于是网上找了一个简单的图形验证码识别代码,了解了解原理,然后改了改做处理:

图形验证码的识别在于字模库,不过我想的也挺简单,他的验证码不复杂,0-9,共10个数字,1个验证码4个数字,准备40张图片,每个数字四张图片对应4个位置,同时网上找了分割代码和二值化的代码来辅助图片处理:

4.jpg

5.jpg 

存储图片库设定4个目录,对应4个位置:

6.jpg

一个目录10张图片:

7.jpg

如何比较呢?网上找的一个,应该是一个像素一个像素对比:

8.jpg

当然这种方法是很古老的了,不过可以作为学习者参考使用。

验证码的识别搞定了,接下来就是需要与cookie绑定了,保证验证码图片的获取和投票的请求的cookie一致:

只需要在发送请求中加入

connection.setRequestProperty("Cookie",cookie);

就好了。

几天后,我发现似乎代码又失效了,不过排除原因后,我差点乐了,他们把验证码内容改了,改成汉字的了,而且做了干扰和变形,这样建模的难度就高了,不过我开心的原因就是他们这次的验证码没有满足唯一性和失效性,这也是验证码经常出现问题的地方,也就是使用一次后,不会自动失效,也就导致原来的验证码一直可以使用,不用再去浪费时间刷验证码了。

快乐的时光总是短暂,几天后,似乎他们又发现了什么,验证码又换回去了,不在有验证码的漏洞,而且复杂度提高了,加入了字母在里面,在启用之前的验证码破解方法,已经不行了,而且建模太费时间了,于是就暂时放弃了。

不过我去他们的评论区去发帖,说投个票搞个验证码,太费事了,而且对于专业的刷票团队来说,似乎也没啥鸟用嘛!

登录注册投票

似乎发帖投诉有点作用了,一段时间后,验证码取消了,不过又换成了一个新的方式,投票者需要登录以及注册,注册后需要进行邮箱验证。

不过发现,注册时的邮箱,可以重复使用,主要用户名不重复就好了,这样就不需要搞那么多邮箱了,不过注册的项目挺多的,文学网站,哎!

为了提高真实性,我从百家姓里,把姓氏给提出来,然后随机几个汉字,在长度随机一下,就开始注册了,同时用户名也随机一样,密码与用户名一样,然后就开始批量注册了:

9.jpg

同时把注册的用户名存在一个文件里:之后注册了一些用户之后,就可以了,反正可以重复使用。

再就是自动登录,并获取cookie后进行绑定,不过他们使用登录后投票的功能之后,就没有一个IP只能投一次票的限制了,所以也就暂时不用代理IP了,不过一段时间后,他们又启用了该限制,不过那个时候也差不多快结束了,而且启用代理后,也就多了几行代码而已:

10.jpg 

刷代理买火车票

另外值得一提的是,那一年也是网上可以刚开始抢火车票的一年,当时各种插件共享,抢票点击木有问题,问题是,到点了票不出来,几个同事朋友说,这肯定是缓存,哪哪几个城市人少,说不定那快一些,于是又想到了代理IP,但是手动切换浏览器代理IP太费劲了,咋能自动切换呢?

于是当时想到了fiddler,记得一次分享的时候,部门的大神分享了fiddler可以自定义一些功能,于是想,能不能把浏览器指向fiddler,在fiddler中自动代理,而且刷出来了之后,直接关了fiddler就好了,就可以直接买票了,快速方便。

于是找了fiddler的脚本编写的文章,果然有戏,在fiddler的script中,有几个函数:

11.jpg

其中OnBeforeRequest(oSession: Session)的作用就是在请求发送前的一些设置,而代理ip的配置可以如下:

*本文原创作者:ExpLife,本文属FreeBuf原创奖励计划,未经许可禁止转载    oSession["x-overrideGateway"] = "127.0.0.1:8080";

12.jpg 

所以就可以设定一个IP数组,然后加一个随机值,自动走其中一个代理IP就好了。

上篇的博主好像就死磕一个网站,使出了浑身解数与其进行对抗,最终胜利。这里我写一篇续集,来帮大家梳理一下几乎所有的刷票类型。(刷票,刷粉,刷赞等异曲同工)

刷票难度从简到难,循序渐进。

一,无任何限制,简单到爆炸

毫无悬念,最简单的一种刷票,是个人都会

直接点击投票按钮即可投票,无任何限制,小白就鼠标不停点击投票即可,相关从业人员可以程序实现。

url='http://xxxxxxxx'while 1:urllib2.urlopen(url)//死循环发起请求即可

二,客户端限制,可欺骗小白

我们知道,一切来自客户端的数据都是不可信的

这种情况比较典型的是投票过后,按钮变灰,不可点击继续投票

1.jpg

相关从业人员肯定知道

1.修改或删除disabled属性

2.既然是客户端限制,还是直接往服务端发包就行了

三,伪客户端限制,小白也会做

有时候投完票,会告诉你投票成功,再次投票会告诉你已投票。

2.jpg

排除上面第二种情况客户端的限制,暂定此处是服务端进行验证

这种情况我发现有些非安全从业人员,他不懂其中的原理,但是他会发现

1.换个浏览器即可重新投票

2.清除下浏览器缓存即可重新投票

他们不懂,但是我们要搞清楚其原理才行

通过换个浏览器进行的刷票,极有可能是验证了User-Agent,通过变换UA即可。之前是遇到过,但是一时找不到案例了,从前wy那边找了一个http://cb.drops.wiki/bugs/wooyun-2011-02376.html不过这种验证UA的策略,之前在某webshell那里遇到过某webshell,正常访问就返回一个404的友好页面,假装自己不存在实际上则UA正确的话会呈现原本的样子清除浏览器缓存进行的刷票,极有可能是验证了cookie内容(其实这个应该算客户端验证的)

2.jpg

可以看到cookie中有个字段vote,会进行验证。

四,伪IP限制,知道的人肯定会

顾名思义,这并不是真的以IP来限制投票次数,或者说没有达到限制IP的效果

程序获取客户端IP有几种方式

HTTP_CLIENT_IP

HTTP_X_FORWARDED_FOR

REMOTE_ADDR

前两种方式均可以通过http header来显式的伪造

所以我们通过伪造不同的客户端IP即可绕过存在此问题的某些站点

程序实现就是在header里自定义即可

headers = {

"host":"xxxxx",

"User-Agent":"xxxxx",

"X-Forwarded-For":"111.222.333.444"

......

}

五,真IP限制,不知道的人可能也会

如第四点所说,通过REMOTE_ADDR获取的IP地址,是可信的,是不可显式的伪造的,那就是换ip地址嘛

如上篇所说,那就找一下网上的代理即可。

这里给出一个小Tips:移动网络每次飞行模式后获取的IP不一定一致,可以多投一些票

六,图片验证码,然并卵

然并卵不是说图片验证码没有用,只能说攻防是相对的,没有绝对的安全。

1.简单的验证码,OCR识别(技术不多说,见上篇吧)

2.复杂的验证码,可能出现验证码失效的问题,一个验证码可以多次使用

3.类似滑动解锁,12306的验证码等,网上也有大把的现成的针对人机识别的技术,这里不再多说

七,账号登录,就GG了?

需要登录投票,也并不是就不行了,还要看程序是如何实现的

我们假设两种情况

1.需要账号登录进行投票,但是没有限制好策略,导致可通过以上6点进行投票

2.假设程序写的很好,已经很好的限制了一个账号只能投一票

我们再进一步说下第二种情况吧

这种情况的根本解决方案就是:搞到很多账号进行投票

(1)假设它有漏洞,可批量注册账号

什么邮箱,手机号等,像上篇那样邮箱可以重复利用,又或者手机验证码可控等,总之就是有漏洞批量搞到账号

(2)假设它无漏洞,类似微信~

评论中看到很多表哥问到微信的如何刷票,我只能说,利用我们自己有限的手段,是做不了的。任何通过关注微信或者微信授权登录后进行的投票,均存在微信id的唯一性验证,而凭借我们自己,哪里去搞这么多微信账号哦~

或者说我们费劲搞了这么多账号仅仅为了投票?那也太没必要了。

当然,微信刷票也成为一个产业,有些机构拥有大量微信账号,可以付费搞这个事情

八,最后说下羊毛党

相比下微信刷票的难度,我们可以跟更高层次的羊毛党做下比较

他们拥有大量的手机号

他们拥有大量的银行卡四要素数据

他们去各种地方薅羊毛

他们应该看不上单纯刷票这种无利益的东西…

最后一句话,个人见解。羊毛党是挡不住的,我们的核心思想是让羊毛党在我们平台多停留会~


0 0
原创粉丝点击