Fork me on GitHub 返回顶部

讠己 —— 冫欠 自 云力 扌仓 石马

0x00

  某演唱会的票非常难买,难点在于首先得是粉丝俱乐部年费会员,是年费会员才能抢一个用来抢票的码,用这个码才有资格去票务网上买票。这个艺人的粉丝数量是千万级的,想在那开抢的时候在一堆502里面挤到一点资源,许多人会开个浏览器、多个标签页甚至多台电脑同时提交请求。那么何不让机器帮我们抢呢,因此以下应运而出。

0x01 GreaseMonkey&脚本

  第一件事情就是研究一下网页。当时的页面大致是这样的:

  用chrome开发者工具(F12)这一前端利器查看网页结构

  结果发现抢码按键的执行脚本赫然写在那里

<script type="text/javascript">function surego(area){
    if(area == 0){
      $("#tips").html('活动暂时关闭');
      $("#uurl").html('<a href="/" class="a1">回到首页</a>');
      $(".qdtcfr").show().find(".qdtc_c").css({ "margin-top": "-" + $(".qdtc_c").height() / 2 + "px" });
    }else{
      $.ajax({
        type: 'POST',
        url: "/sign/getbuycode",
        dataType:'json',
        data: {'area':area},
        beforeSend:function(){
          // $("#city").append("<a>loading...</a>");//
        },
        success:function(re){
          if(re.status == 0){
            $("#tips").html(re.info);
            if(re.title == "去登录"){
              $("#uurl").html('<a href="'+re.url+'" class="a1">'+re.title+'</a>');
            }else if(re.title == "回到首页"){
              $("#uurl").html('<a  href="'+re.url+'" class="a1">'+re.title+'</a>');
            }else{
              $("#uurl").html('<a target="_blank" href="'+re.url+'" class="a1">'+re.title+'</a>');
            }
            $(".qdtcfr").show().find(".qdtc_c").css({ "margin-top": "-" + $(".qdtc_c").height() / 2 + "px" });
          }else{
            alert(re.info);
            // $("#tips").html(re.info);
            // $("#vcode").val(re.code);
            // $("#uurl").html('<p class="p5">请保存好该号码,等待永乐通知正式开票时间,凭借此码进行购买!</p>');
          }
        },
        error:function(){
          alert("数据加载失败");
        }
      });
    }
  }
  $(".qdtcfr a.qd_close").click(function () {
    $(".qdtcfr").hide();
  });
  $(".zly_nr3 a").each(function () {
    $(this).click(function () {
      $(".qdtcfr").show().find(".qdtc_c").css({ "margin-top": "-" + $(".qdtc_c").height() / 2 + "px" });
    });
  });
  $(".qdtc_02 a.a2").click(function () {
    $(".qdtcfr").hide();
  });
  // $(".qdtc_02 a.a1").click(function () {
    //     $(".qdtcfr").hide();
    // });</script>

  那么,循环就好喽~

  立马改用Firefox打开页面,用油猴来加载我们自动抢码脚本,记得限制一下脚本执行的页面的url,要不然开任何页面都执行,产生的流量就多了。

// ==UserScript==
// @name        tfent autogetbuycode
// @namespace   AGBC
// @description TO AUTOMATIVELY GET BUYCODE
// @include     http://www.tfent.cn/sign/show?id=1
// @version     1
// @grant       none
// ==/UserScript==
setInterval(function () {//这个函数就是用来循环的,第一个参数是要执行的函数,第二个参数是每两次执行的间隔时间的毫秒数
  $.ajax({
    type: 'POST',
    url: '/sign/getbuycode',
    dataType: 'json',
    data: {
      'area': 2
    }, //改区域码的位置
    beforeSend: function () {
      // $("#city").append("<a>loading...</a>");//显示加载动画
    },
    success: function (re) {
      if (re.status == 0) {
        //alert("Damn it!!!!!!")
        return;
      } else {
        alert(re.info);//成功抢到就弹窗告诉我
        // $("#tips").html(re.info);
        // $("#vcode").val(re.code);
        // $("#uurl").html('<p class="p5">请保存好该号码,等待永乐通知正式开票时间,凭借此码进行购买!</p>');
      }
    },
    error: function () {
      //alert("Dick!!!!!!!!!!!!!");
      return;
    }
  });
}, 2000)

  把火狐右上角的油猴头点亮,打开抢码页,就可以躺着等成功的弹窗了!

0x02 Intruder attack using Burp Suite

  但是,我还是要用另一款神器一起抢,上了这两个保险,心里才踏实嘛!
  从脚本中我们可以看到,执行这个脚本是向/sign/getbuycode POST 一些数据

  上Burp Suite用Intruder,把area的payload设成许多一样值的字典就行了。注意配置发包的频率,然后就可以右上角开始attack了!
  这下终于能安心躺着lol

  当时间进入抢码时间时,网络拥塞,基本上都返回502了,一旦有资源给我们提供那一瞬间的服务,就返回200了,就说明我们抢到想要的东西了。

  万事俱备,就等时间到了!悄悄说一下,我没敢躺着……

  开始抢码了,我就一边盯着Burp期望在一堆502里能出现个200,一边盯着浏览器。终于在一分钟内,浏览器弹窗了,回去Intruder attack看,果然返回了我想要的东西。

  查看一下成功应答的包!

  去个人中心确认一下:

posted @ 2017-08-26 22:59  d0main  阅读(394)  评论(0编辑  收藏  举报