今天碰巧遇到一个不安全的投票系统,被我抓到几个漏洞恶搞,顺便做一下笔记免得自己以后也犯了这个错误。

下图是一个幼稚园的“亲子脸”比赛,总投票人数已经超过 70 万人,第一名还有 50 万票,如果这是真的,我看他以后可以准备去选总统了。

严谨的网络投票系统,至少会对已投票的 IP 进行封锁,虽然 ADSL 用户断线重新连线后可以取得新的 IP,但是可以减少做票的可能性。这个投票系统是使用 cookies 当作以投票的依据,但是 cookies 可以删除,甚至我可以让浏览器不储存 cookies,这样不是很容易做票吗?

其实在网页上面已经用 JavaScript 写好一人只能选二票的规则,但是我可以把网页另存新档以后在改写,把 JavaScript 全部修掉让表单资料直接送出,很容易做到。

因为前端做了检查后端就直接处理资料,实在是很粗心大意。因为如此,我可以用 JMeter 直接把资料用 POST 的方式送出去让他处理,另外我发现更好玩的事情:他用无限循环处理资料直到结束才跳出循环,所以我可以一次送出超过投票选项数量的资料,明明只有 23 个选项,我一次送出 500 个结果,他照样新增进数据库里一点都不怀疑。

大家应该知道 JMeter 是什么东西,用了以后的结果就是:他的服务器性能每秒能处理 250 query 左右,还算不错。 :P