那些年我们“投(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请求:
看到很多作品的投票数往上涨,心里很是开心。
不过几天后,发现程序似乎失效了,刷了半天,票数似乎没有任何变化,难道有什么变动?
抓包测试了一下,发现似乎请求还是原来的请求,不过似乎只能投票一次了?难道是IP的限制,果断用一个代理IP试了一下,发现又成功了。果然是IP的限制。
一个作品一天只能用一个ip投票一次
于是想着用代理IP,可是平时我也就几个IP翻翻墙而已,这几个代理改变不了大局。总不能为了搞个这个,还花钱去买一堆IP吧,不过网上还是有许多的http和sockets的免费代理,有些5分钟更新一次,有些10分钟更新一次,不过这类IP的失效速度挺快的,用于投票还是挺靠谱的。
网上有挺多的代理工具可以自动收集、整理并验证IP是否有效的,只需要输入网页地址就好了,我用的是花刺代理:
最常用的就是添加资源》下载代理资源》验证全部》导出选定,直接导出txt的格式。
然后写代码读取有用的代理IP,默认用http,报错后切换socket代理:
验证码的对抗
不过又过了一段时间,又发现不行了,原来加了验证码,不过验证码很简单,只是纯数字,而且没有啥变形之类的,也就没有弄ocr等等工具,以提高自己为主,于是网上找了一个简单的图形验证码识别代码,了解了解原理,然后改了改做处理:
图形验证码的识别在于字模库,不过我想的也挺简单,他的验证码不复杂,0-9,共10个数字,1个验证码4个数字,准备40张图片,每个数字四张图片对应4个位置,同时网上找了分割代码和二值化的代码来辅助图片处理:
存储图片库设定4个目录,对应4个位置:
一个目录10张图片:
如何比较呢?网上找的一个,应该是一个像素一个像素对比:
当然这种方法是很古老的了,不过可以作为学习者参考使用。
验证码的识别搞定了,接下来就是需要与cookie绑定了,保证验证码图片的获取和投票的请求的cookie一致:
只需要在发送请求中加入
connection.setRequestProperty("Cookie",cookie);
就好了。
几天后,我发现似乎代码又失效了,不过排除原因后,我差点乐了,他们把验证码内容改了,改成汉字的了,而且做了干扰和变形,这样建模的难度就高了,不过我开心的原因就是他们这次的验证码没有满足唯一性和失效性,这也是验证码经常出现问题的地方,也就是使用一次后,不会自动失效,也就导致原来的验证码一直可以使用,不用再去浪费时间刷验证码了。
快乐的时光总是短暂,几天后,似乎他们又发现了什么,验证码又换回去了,不在有验证码的漏洞,而且复杂度提高了,加入了字母在里面,在启用之前的验证码破解方法,已经不行了,而且建模太费时间了,于是就暂时放弃了。
不过我去他们的评论区去发帖,说投个票搞个验证码,太费事了,而且对于专业的刷票团队来说,似乎也没啥鸟用嘛!
登录注册投票
似乎发帖投诉有点作用了,一段时间后,验证码取消了,不过又换成了一个新的方式,投票者需要登录以及注册,注册后需要进行邮箱验证。
不过发现,注册时的邮箱,可以重复使用,主要用户名不重复就好了,这样就不需要搞那么多邮箱了,不过注册的项目挺多的,文学网站,哎!
为了提高真实性,我从百家姓里,把姓氏给提出来,然后随机几个汉字,在长度随机一下,就开始注册了,同时用户名也随机一样,密码与用户名一样,然后就开始批量注册了:
同时把注册的用户名存在一个文件里:之后注册了一些用户之后,就可以了,反正可以重复使用。
再就是自动登录,并获取cookie后进行绑定,不过他们使用登录后投票的功能之后,就没有一个IP只能投一次票的限制了,所以也就暂时不用代理IP了,不过一段时间后,他们又启用了该限制,不过那个时候也差不多快结束了,而且启用代理后,也就多了几行代码而已:
刷代理买火车票
另外值得一提的是,那一年也是网上可以刚开始抢火车票的一年,当时各种插件共享,抢票点击木有问题,问题是,到点了票不出来,几个同事朋友说,这肯定是缓存,哪哪几个城市人少,说不定那快一些,于是又想到了代理IP,但是手动切换浏览器代理IP太费劲了,咋能自动切换呢?
于是当时想到了fiddler,记得一次分享的时候,部门的大神分享了fiddler可以自定义一些功能,于是想,能不能把浏览器指向fiddler,在fiddler中自动代理,而且刷出来了之后,直接关了fiddler就好了,就可以直接买票了,快速方便。
于是找了fiddler的脚本编写的文章,果然有戏,在fiddler的script中,有几个函数:
其中OnBeforeRequest(oSession: Session)的作用就是在请求发送前的一些设置,而代理ip的配置可以如下:
*本文原创作者:ExpLife,本文属FreeBuf原创奖励计划,未经许可禁止转载 oSession["x-overrideGateway"] = "127.0.0.1:8080";
所以就可以设定一个IP数组,然后加一个随机值,自动走其中一个代理IP就好了。
上篇的博主好像就死磕一个网站,使出了浑身解数与其进行对抗,最终胜利。这里我写一篇续集,来帮大家梳理一下几乎所有的刷票类型。(刷票,刷粉,刷赞等异曲同工)
刷票难度从简到难,循序渐进。
一,无任何限制,简单到爆炸
毫无悬念,最简单的一种刷票,是个人都会
直接点击投票按钮即可投票,无任何限制,小白就鼠标不停点击投票即可,相关从业人员可以程序实现。
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的效果
程序获取客户端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的唯一性验证,而凭借我们自己,哪里去搞这么多微信账号哦~
或者说我们费劲搞了这么多账号仅仅为了投票?那也太没必要了。
当然,微信刷票也成为一个产业,有些机构拥有大量微信账号,可以付费搞这个事情
八,最后说下羊毛党
相比下微信刷票的难度,我们可以跟更高层次的羊毛党做下比较
他们拥有大量的手机号
他们拥有大量的银行卡四要素数据
他们去各种地方薅羊毛
他们应该看不上单纯刷票这种无利益的东西…
最后一句话,个人见解。羊毛党是挡不住的,我们的核心思想是让羊毛党在我们平台多停留会~
- 那些年我们“投(shua)”过的票
- 那些年,我们简历投过的公司
- 那些年我们用过的邮箱
- 那些年我们追过的进程
- 那些年我们用过的SSD
- 那些年,我们读过的python!
- 那些年,我们读过的python!
- 那些年,我们读过的python!
- 那些年我们学过的HTML
- 那些年,我们遇到过的“S”
- 那些年,我们读过的python!
- 那些年,我们读过的python!
- 那些年我们写过的爬虫
- 那些年我们追过的网络小说
- 那些年我们租过的房子
- 那些年我们学过的数据结构
- 那些年我们学过的算法
- 那些年,我们追过的RPC
- Python练习题
- 如何成为杀手级售前
- 两数组求并集元素-C描述
- Redis学习(二)
- 常见程序的数据库链接文件
- 那些年我们“投(shua)”过的票
- Modubs协议阅读和理解
- redis源码分析(四)-双向链表的实现
- (31)Spring Boot导入XML配置【从零开始学Spring Boot】
- sql模糊查询
- 分享Java面试中遇到的一些经典算法题目
- eclipse安装适合的pydev
- 51nod 1668 非010串
- 读webpy源码-请求响应1