上海国拍系统的重大漏洞
沪牌拍牌关键点简介
老拍牌的人都知道,拍牌从10点半至11点半这段时间内,前面的时间都是没用的,就是在竞争中最后十秒钟,要求就是出正确的价格,在正确的时间按确定按钮。达到这两个条件非常困难,(1)价格时高时低很难猜,(2)要选择正确的时间按确定按钮更加困难,能拍中也是撞了大运。
沪牌拍牌队列号的介绍
拍牌出价的价格现在确实很难猜,没有什么好的办法,黄牛的办法也是放一定的价格范围。但是确定按钮按下的是时间就不一样了,可以用特殊的技术手段找到,找到排队的队列号就可以计算出队列是否拥堵。
首先,沪牌拍牌的是flash,需要通过IE加载,这时浏览器就自动会从服务器下载ws-20xx-client.Swf的flash程序和其他一些文件,第一步只要在拍牌时把这些文件复制保存下来就可以了。
第二步通过软件编译ws-20xx-client.Swf,获得客户端flash的所有代码,附件中编译的版本是最近7.7.7.27版本。
第三步从编译的文件和目录中,可以找到与排队的队列号相关的几个文件,Ciew\\BidStageView.as,model\\XXteaEncodeAndDecode.as, until\\XXTEA.as,通过这几个文件,就可以找到与队列号相关的解码的函数private function Reader2to2Handler,然后就可以分析队列号是怎么样的解码过程。
为什么我们要千辛万苦取得这个队列号呢?我们看上面的图片,这个图片是2017年6月份拍牌,输完验证码后在11:29:56秒按下的确定按钮,我们可以看到flash的客户端马上发了一个数据包给服务器,国拍服务器的ip是222.73.114.29,端口号为8300的TCP协议,国拍服务器在0.0058秒就是5.8毫秒后回了一个数据包,这个数据包就是包含用户刚才从客户端发给服务器请求的排队队列号,也就是说服务器非常快的告诉用户排在队列的哪里,同时flash的客户端会依据这个队列号计算出进度条位置。
第四步根据获取的源代码,自己仿照编写序列号程序(对程序员来说非常简单的事情)获取排队队列号。在自己编写的拍牌辅助程序中使用winpcap网卡的相应数据包,然后获取队列号。当然,想要公共信息也是易如反掌的事情。
沪牌拍牌漏洞的利用
技术大牛们是怎么利用这个漏洞的?大牛们手里有几百甚至上千张拍牌的单子,他们就用一部分单子当炮灰,就是从53秒开始每隔100或者200毫秒开始一张一张的按确定(当然是软件自动操作的),将返回的数据包获取排队队列号发往自己的服务器进行计算统计。
大家都知道非常简单的初中数学公式,两个队列号之间的差/两个队列号之间的时间差 = 排队速度,再来一个队列号的信息,就可以求出排队加速度,通过几十个返回的队列号信息,就可以求出增长的曲线(服务器的处理速度可以根据公共信息中的每秒之间的时间间隔所完成的处理数据进行统计)。
那么,这样就可以计算出到底什么时候按确定按钮,你的单子将在59秒时处理。
还有一种简单的办法就是计算好加速度达到多少时必须按确定按钮了,这个只要实验1-2次就可以知道了。
对广大拍牌者造成的影响
原本广大拍牌者按确定按钮的时间不尽相同,入队列单子的处理速度随机,充分体现了国拍的公正公平拍卖本意。现在由于这个漏洞被越来越多的技术大牛利用,以至于极少数知道应该什么时候按确定入列的人在一个时间点一下子有大量的单子入列,造成队列瞬间阻塞,可以入队列的时间窗口变得越来越窄,甚至以每百毫秒计。所以,绝大多数个人竞拍者即使价格猜对了,能入列中标的可能性也急剧降低。如果这个漏洞不修复,不久的将来或者可以说现在已经客观存在,个人竞标者将基本没有中标的可能。
黄牛晒单的中标情况
一个神奇的网站,这个网站自从2017年8月开张以来吸引了很多晒单的人,都是在拍牌前提前把投标号晒出来,等拍牌结束后公布中标率,我们来看看中标情况,绝对比上海国拍公正公平(就是漏洞的严重性)。
统计了一下2018年3月份所有晒出来的单子,共中标1856张。
2017年12月(第一名905张中标419张46.3%)
2018年 1月(第一名500张中标165张33%,第三名150张中标92张61.33%)
2018年 2月(第一名300张中标98张34.33%)
2018年 3月(第一名500张中标210张33%)
2018年1-3月平均中标率(第一名366张中标136张37.16%)
2017年10月 - 2018年3月平均中标率(第一名798张中标214张26.82%)
详见附件(代拍汇晒单中标率)目录中的截图。
不排除有些因中标率太高后来不再晒出全部单子的,不排除是否还有更高的中标率而根本低调的不晒单,所以,可能晒出来的单子还只是冰山一角。
如何弥补这个漏洞
有了这个漏洞被人利用,哪里还有公平公正可言。要堵住这个漏洞也是非常简单的事情,主要症结就是确定按钮按下,客户端给服务器发数据包,服务器返回的数据包非常及时。所以,措施就是只要不及时返回,在服务器端返回时加上1秒(1000毫秒)左右的延时返回,由于延时1秒就算可以获得了队列号信息也会错过了最佳按下确定按钮时间,而大势已去为时已晚了。
如果可以加上随机延时,对漏洞的修复更加有好处。
队列号延时返回,对进度条也影响不大,最多让拍牌人多看1秒的正在入列信息,其实,拍牌的最后10秒对大部分人是脑子一片空白的,估计是全世界最短的10秒之一。
(所以希望借助媒体引起国拍的重视,尽快修复漏洞,重现国拍公正公平的竞拍精神。)
阅读次数: 4934次