11.6 投票/积分/抽奖

投票和抽奖以及积分在很多促销活动或者推广手段上都经常用到,背后的奖品成本可能上数十万,如果这些奖品被恶意用户(黄牛)刷走了,不仅推广的效果没有,而且浪费了成本投入,如图11-12所示。

图 11-12

不管是投票、积分还是抽奖,都存在一个共同点:即单个用户次数存在限制,比如一场活动中一个用户只能抽奖一次。这样的限制也会存在很多种绕过方式,下面我们来看一个真实案例,笔者在乌云找了这么一个漏洞:

缺陷编号:WooYun-2014-65631

漏洞标题:设计缺陷导致抽奖功能存在刷次数情况

相关厂商:M1905.COM

漏洞作者:路人甲

我们来看看漏洞情况。首先,注册账号进入 http://t4.m1905.com/ 来到抽奖部分,然后做完两个任务,可以抽两次奖,抽完后页面如图11-13所示。

抽完奖之后删除cookieshared_t42014和logind_t42014,刷新页面后即可再次做任务并抽奖,如图11-14所示。

图 11-13

图 11-14

从这个案例中可以看到程序是基于cookie验证,所以删除相应cookie即可绕过限制。

通常抽奖和投票有如下几种利用方法:

1)cookie或POST请求正文绕过。有的应用将验证是否抽奖或者领取积分的判断值放置在cookie或者POST的请求正文里,服务器端获取到这个结果后判断是否还有机会抽奖,而这个数据我们是可以直接在数据包中修改的,所以就会产生绕过,比如cookie中isok=1代表已经抽奖,isok=0代表还没有抽奖,而我们只要再点击抽奖,然后把isok的值改为0即可一直抽奖。

2)基于IP验证。做得比较弱的统计是直接基于IP验证,像访问量、推广获取积分等,这类要看程序获取IP的方式,如果是client-ip或者x_forword_for获取IP,则可以直接伪造IP绕过。

3)基于用户认证。也有一部分应用需要登录以后才能抽奖或者投票,这类可以结合看看能不能批量注册,如果可以,则可以用程序实现批量登录刷票,或者投票的时候POST包或者cookie里面的当前uid、用户名等是否可以随意修改绕过用户单次限制。

从上面利用手段可以看到主要的三个点是IP、登录用户cookie,分析出可用性较高的防御手段如下:

·机器识别码验证,每台机器都可以根据硬件信息生成唯一的识别码。

·操作需要登录,当前用户信息从session中读取。