微信朋友圈投票活動的刷票案例分析
現(xiàn)階段,在微信朋友圈舉辦的投票活動層出不窮,相信已經(jīng)有不少同學對此不勝其煩,因為總會時不時地冒出個人(親戚、朋友、or whatever)來請你幫TA投票。
本文倒沒有打算從道德或者情感層面來探討這個問題,我所感興趣的是,當前大多數(shù)投票活動其實都是存在明顯漏洞的,通過簡單的技術手段就可以實現(xiàn)“刷票”。
案例描述
這里就有一個案例。
某美發(fā)網(wǎng)上商城(以下簡稱S商城)在微信平臺上舉辦了一場在線投票活動,微信用戶可通過活動鏈接訪問到投票頁面,對喜歡的發(fā)型師作品進行投票;每個微信帳號每天只能給單個作品投1張選票。
投票活動頁面如下圖所示:

漏洞分析
表面上看,S商城已經(jīng)對投票活動進行了反作弊處理,因為限制了每個微信用戶每天只能投一張票。如果用戶都是正常地通過微信訪問這個投票服務進行投票的話,的確是能起到預期效果的。
然而,如果查看投票頁面的原始地址,即按住頁面向下拖動,會發(fā)現(xiàn)屏幕頂端顯示為”本網(wǎng)頁由XXX提供”,需要注意的是,這里的”XXX”并不是”mp.weixin.qq.com”,而是S商城的域名。也就是說,這個投票活動的程序是運行在S商城的服務器上面的。
基于以上分析,可以推斷出用戶投票操作的網(wǎng)絡拓撲結構示意圖應該是這樣的:

微信用戶訪問投票頁面時,微信服務器只是進行了請求轉發(fā),具體的投票計數(shù)與校驗都是在S商城的服務器上的。
那么,S商城是怎么來區(qū)分投票用戶的呢?
這里就涉及到微信公眾平臺OpenID的概念了。官方對OpenID的解釋是:加密后的微信號,每個用戶對每個公眾號的OpenID是唯一的。
要驗證這一點也很容易,只需要通過采用多個微信賬號進行投票,并對投票過程進行網(wǎng)絡抓包,查看POST中的參數(shù)就可以證實。
基于這一點,微信公眾平臺在轉發(fā)投票請求時,會在POST參數(shù)中包含用戶的OpenID;S商城在接收到投票的POST請求后,通過查詢當前OpenID是否在當天已經(jīng)投過票,就可以阻止單一用戶重復投票的行為了。
然而,這里面卻存在一個很大的漏洞!
S商城只能判斷OpenID是否出現(xiàn)了重復,但是卻無法校驗OpenID的有效性,因為它是無法調用微信服務器來對這個OpenID進行校驗的。
VoteRobot實現(xiàn)
明確了這個漏洞后,要實現(xiàn)刷票就很簡單了。
- 采用微信用戶正常地進行一次投票操作,對設備進行網(wǎng)絡抓包,獲取到投票過程中HTTP層面的請求參數(shù)和響應內容;
- 使用Fiddler(或Python腳本)構造投票的HTTP POST請求,保持各參數(shù)與真實投票時抓取到的參數(shù)內容一致;
- 隨機生成不同的
OpenID參數(shù),重復進行POST請求。
如果要實現(xiàn)批量刷票,或者刷票自動化操作,那么就可以將刷票請求通過Python腳本來實現(xiàn);甚至,采用LoadRunner也是可以的。
運行VoteRobot.py,輸出日志如下:
======== Start to vote zpid(38), Total votes: 3
1 tickets has been voted, the next ticket will be voted after 35 seconds.
2 tickets has been voted, the next ticket will be voted after 31 seconds.
3 tickets has been voted, the next ticket will be voted after 10 seconds.
======== Voting Ended!
需要注意的是,通常自動化刷票時最好有個隨機的時間間隔,并且,最好能動態(tài)模擬不同的設備,即修改User-Agent,否則,服務端可以較為容易地識別作弊行為。
作弊與反作弊?
看到這里,也許有的同學心中竊喜,以后投票都可以采用這種方式“刷票”了么?
很遺憾,當然不是。
其實本文中案例的漏洞是很低級的,只是,當前的確還存在不少比例的投票活動是采用這種模式。
要判斷一個投票活動是否可以采用這種方式來作弊也很簡單。采用本文中的方法,若查看到活動的網(wǎng)址是非微信官方的,而且整個投票過程也沒有額外的校驗,那么實現(xiàn)作弊的可能性就很大了;再通過抓包看下通訊交互過程,并用網(wǎng)絡請求工具修改參數(shù)后重新請求下,即可驗證是否真的可以作弊了。
另外,也許有人想問了,網(wǎng)絡中的投票活動就沒法杜絕“刷票”行為了么?
答案是,完全杜絕的確很難。聽說過12306的黃牛黨沒?聽說過Apple Store專業(yè)給應用刷榜單的沒?聽說過“網(wǎng)絡水軍”、“五毛黨”沒?
不過,活動舉辦方可以通過一些手段,大大提高作弊的門檻。例如,當前有不少活動就采用了如下方式:
- 要求投票用戶先關注活動舉辦方的公眾號,然后調用微信官方的投票功能;
- 要求投票用戶在投票活動舉辦方的網(wǎng)站上進行注冊(手機號驗證、實名驗證)
不管采用這兩種方式中的哪一種,本文中的“刷票”方法就完全失效了。

浙公網(wǎng)安備 33010602011771號