第一步 摸清流程:
投票系统首先要求访客填写一些个人信息后再投票,其中个人信息包括电话邮箱之类的,然后提交数据通过另外一个页面插入到数据库,传过去的值 menberid,也就是选手的id.同时选手的投票数在数据库里面自动加一,达到给选手投票的目的,投票完成后,产生cookies保存你电脑里面,记录你的投票信息,限制你继续投票。
第二步 绕过验证
查看html源代码,只是通过javascript判断而已,这个判断你输入个人信息是否合法,这限制很容易突破,保存源代码,去掉那些javascript验证,重新打开页面,个人信息就可以随便填写了, 下面是投票者填写信息的页面。
第二步 突破限制
进一步测试,经过分析发现访客填写的这些个人信息并没有插入到数据库里面去,只是前台页面验证而已,去掉了javascript验证后,我们可以不用填写个人信息就直接去投票了,这方便多了,为后来的快速投票开辟了一条大道!其中最关键的限制是cookies限制,对于cookies限制,我们可以设置浏览器禁用本站 cookies就可以了?就这样轻易的绕过javascript验证和突破cookies限制了,然后自己编写了一个html页面,去掉了一些多余的代码就可以无限制的投票了,代码如下
</form> 打开这个页面后每点击一次提交就可以给id为141的选手投一次票了,我们可以加入javascript让他不需要单击提交按钮就直接提交数据。完整代码如下:
第三步 再次探究
猜想用get的方法是否也可以提交,经过测试可以提交数据,虽然上面采用post提交,但是pointsubmit.asp接收页面采用request ()方法接收数据,不管post和get来的数据都可以接收,这就好办多了,直接构造url http://www.XXXX.cn/tp2/qiu/pointsubmit.asp?menberid=141
每浏览一次这个页面就自动投一次票,这种投票方法更方便。
第三步 快马加鞭
这投票系统果然有很大的缺陷,虽然上面的两个方法可以无限制的给选手投票了,但是要开着浏览器经常点击后退按钮才行,点击超过上千票也需要一点时间,反正胜利在握,而且还的是时间,继续研究写一个应用程序出来,先给邢同学打个电话先,告诉她我又要干坏事了,完后就操家伙vc6.0 。利用上面的缺陷可以轻易的编写代码,参考网上的代码如下
这样一来,就可以不停地投票了。为了程序的稳定性,我设置了每投一次票就sleep一秒钟,现在,你一个小时就可以投3600票,呵呵,是不是有点过分了,嘿嘿。人气最高的选手决定在我的手里了。这次朋友交给我的任务完成得太好了。
第四步 如何防护
后来我从网上下载了几套投票系统程序研究了一下,几乎都存在上面的缺陷,解决这些缺陷也很容易,如果是通过cookies验证的话,应该要先判断浏览器是否禁用了cookies,如果禁用了就不给投票。
另外一个缺陷是接收数据的那个页面,缺陷解决方法,应该在接收数据页面指定用request.Form接收数据,这样可以防止构造url来传值。还有那些访客填写的个人信息一台传递过去,在另一个页面判断,防止一些人偷懒。
转自 http://hackhalei.blog.163.com/blog/static/27503851200921423440/