专栏首页FreeBuf那些年我们“投(shua)”过的票

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

最近朋友圈中时不时有人要帮忙投个票啥的,又想起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的配置可以如下:

oSession["x-overrideGateway"] = "127.0.0.1:8080";

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

*本文原创作者:wadcl,本文属FreeBuf原创奖励计划,未经许可禁止转载

本文分享自微信公众号 - FreeBuf(freebuf),作者:wadcl

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-01-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 内部威胁那些事儿(四):内部欺诈

    * 本文原创作者:木之千 一、引言 前面三章我们从宏观层面介绍内部威胁现状出发,引入了全面的内部威胁行为模型;之后根据内部威胁动机与破坏目标的不同将当前威胁分成...

    FB客服
  • ProxyChains实现自动添加代理逃避检测

    使用爬虫爬取网站或者使用扫描器扫描目标时经常会遇到扫描频率较为频繁导致IP被封或者限制访问的情况,这时候我们就需要考虑利用IP代理的方式不断的变换IP进行爬虫和...

    FB客服
  • 自制分布式漏洞扫描工具

    1.前言 在渗透测试和安全扫描工作中,发现越来越多站点部署了应用防护系统或异常流量监控系统,其中包括:WEB应用防火墙(软件WAF、硬件WAF、云WAF)、入侵...

    FB客服
  • 网络需要进行IP扫描的5大原因

    随着网络的不断扩展以满足日渐增长的业务需求,高效的IP扫描已成为网络管理员确保网络可用性和性能的关键。在大型网络中,扫描通常包括动态IP,多个DNS,DHCP配...

    小仙女闯运维
  • ubuntu16.04安装mongodb教程

    因为最近需要用到mongodb,就在腾讯云的主机上搭建了一个mongodb服务,使用主机为ubuntu 16.04(腾讯云主机的用户名为ubuntu…),这里记...

    用户1188347
  • 阅读源码学设计模式-单例模式

    现在.NETcore 默认提供了DI功能,那我想设计一个全局的引擎类,进行注入服务、解析服务、配置中间件。并且要求该引擎类全局唯一,其他地方不能进行实例化。那单...

    李明成
  • 如何识别不同的编程语言(上)

    漫谈编程语言:数量 这又是一个有趣的话题~~,要知道编程语言有那么的多。引自Quora上一个相关问题的答案,从ABC到Z Shell就有256个。 但是这并不是...

    Phodal
  • 实际开发中的多线程简单使用场景

    小蠢驴打代码
  • 我的信息搜集之道

    前段时间,看了一本书名为《Kali Linux 渗透测试的艺术》,我发现书中第四章信息搜集那部分有些内容不能适应有些内容不能适用国内,这勾起了我想总结一下国内信...

    FB客服
  • 万达网络科技的DevOps平台架构解析

    目录: 一、万达DevOps平台建设历程 二、平台架构解析 三、建设过程中的难点分享 四、总结 一、万达DevOps平台建设历程 我们从2017年2月份开始帮助...

    yuanyi928

扫码关注云+社区

领取腾讯云代金券