*本文原创作者:西毒若相惜,本文属FreeBuf原创奖励计划,未经许可禁止转载
看到上一篇 别人写的投(shua)过的票 ,感觉狗熊所见略同。
上篇的博主好像就死磕一个网站,使出了浑身解数与其进行对抗,最终胜利。这里我写一篇续集,来帮大家梳理一下几乎所有的刷票类型。(刷票,刷粉,刷赞等异曲同工)
刷票难度从简到难,循序渐进。
毫无悬念,最简单的一种刷票,是个人都会
直接点击投票按钮即可投票,无任何限制,小白就鼠标不停点击投票即可,相关从业人员可以程序实现。
url='http://xxxxxxxx' while 1: urllib2.urlopen(url)//死循环发起请求即可
我们知道,一切来自客户端的数据都是不可信的
这种情况比较典型的是投票过后,按钮变灰,不可点击继续投票
相关从业人员肯定知道
1.修改或删除disabled属性
2.既然是客户端限制,还是直接往服务端发包就行了
有时候投完票,会告诉你投票成功,再次投票会告诉你已投票。
排除上面第二种情况客户端的限制,暂定此处是服务端进行验证
这种情况我发现有些非安全从业人员,他不懂其中的原理,但是他会发现
1.换个浏览器即可重新投票
2.清除下浏览器缓存即可重新投票
他们不懂,但是我们要搞清楚其原理才行
通过换个浏览器进行的刷票,极有可能是验证了User-Agent,通过变换UA即可。 之前是遇到过,但是一时找不到案例了,从前wy那边找了一个 http://cb.drops.wiki/bugs/wooyun-2011-02376.html 不过这种验证UA的策略,之前在某webshell那里遇到过 某webshell,正常访问就返回一个404的友好页面,假装自己不存在 实际上则UA正确的话会呈现原本的样子 清除浏览器缓存进行的刷票,极有可能是验证了cookie内容(其实这个应该算客户端验证的)
可以看到cookie中有个字段vote,会进行验证。
顾名思义,这并不是真的以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" ...... }
如第四点所说,通过REMOTE_ADDR获取的IP地址,是可信的,是不可显式的伪造的,那就是换ip地址嘛
如上篇所说,那就找一下网上的代理即可。
这里给出一个小Tips:移动网络每次飞行模式后获取的IP不一定一致,可以多投一些票
然并卵不是说图片验证码没有用,只能说攻防是相对的,没有绝对的安全。
1.简单的验证码,OCR识别(技术不多说,见上篇吧)
2.复杂的验证码,可能出现验证码失效的问题,一个验证码可以多次使用
3.类似滑动解锁,12306的验证码等,网上也有大把的现成的针对人机识别的技术,这里不再多说
需要登录投票,也并不是就不行了,还要看程序是如何实现的
我们假设两种情况
1.需要账号登录进行投票,但是没有限制好策略,导致可通过以上6点进行投票
2.假设程序写的很好,已经很好的限制了一个账号只能投一票
我们再进一步说下第二种情况吧
这种情况的根本解决方案就是:搞到很多账号进行投票
(1)假设它有漏洞,可批量注册账号
什么邮箱,手机号等,像上篇那样邮箱可以重复利用,又或者手机验证码可控等,总之就是有漏洞批量搞到账号
(2)假设它无漏洞,类似微信~
评论中看到很多表哥问到微信的如何刷票,我只能说,利用我们自己有限的手段,是做不了的。任何通过关注微信或者微信授权登录后进行的投票,均存在微信id的唯一性验证,而凭借我们自己,哪里去搞这么多微信账号哦~
或者说我们费劲搞了这么多账号仅仅为了投票?那也太没必要了。
当然,微信刷票也成为一个产业,有些机构拥有大量微信账号,可以付费搞这个事情
相比下微信刷票的难度,我们可以跟更高层次的羊毛党做下比较
他们拥有大量的手机号
他们拥有大量的银行卡四要素数据
他们去各种地方薅羊毛
他们应该看不上单纯刷票这种无利益的东西…
最后一句话,个人见解。羊毛党是挡不住的,我们的核心思想是让羊毛党在我们平台多停留会~
*本文原创作者:西毒若相惜,本文属FreeBuf原创奖励计划,未经许可禁止转载