最近那款游戏,他们官方网站搞了一个大更新预热,吊足了胃口,但是细节死活不肯放出来。我这个人就是这样,越不让看的东西,越想硬是给扒拉出来。大伙都在论坛上瞎猜,我觉得没意思,不如自己去把那层窗户纸捅破。
从开始抓瞎到找到门路
我琢磨着,官方网站既然已经把预热页面上线了,那后台肯定已经把下一版的数据给堆上去了,只不过是前端的开关没打开,或者版本号不对,不给普通用户看。我可不信什么“黑魔法”,我就信抓包和动手。
我二话不说,直接就打开了浏览器,F12摁下去,先把那个官网的加载流程从头到尾看了一遍。这网站做得挺糙的,加载资源的时候,那个路径写得非常死板,直接带着一个版本号:/assets/v1.2.3/*。这不是明摆着告诉我,换个数字就能看到新东西吗?
- 第一步:锁定目标。我锁定了加载新版本内容的那几个关键请求,发现它们都是向同一个服务器地址要东西,但参数里带了一个
current_version=1.2.3的字段。 - 第二步:动手脚。我马上找了个能拦截网络请求的小软件,把所有发出去的请求都给我截下来。我试着把那个
current_version的值改成了1.2.4,这是我猜的下一个版本号。 - 第三步:服务器的反馈。请求发出去,服务器吭哧吭哧转了几圈,直接给我报错了:权限不足。意料之中,哪有这么容易。
黑魔法不是技术,是钻空子
我没气馁,继续盯着那个请求看。这个网站后台架构可能比较老,返回的错误信息里,居然带了一长串的数字和字母,看起来像是某个内部资源的ID。我心里一动,这不是等于把钥匙给我了吗?
我把那串ID复制下来,又去翻了翻网站上其他页面的请求,发现只要是加载配置文件的请求,参数里都必须带上这个ID,相当于一个临时的访问凭证。我大胆猜测,也许不是版本号的问题,而是我没有用对的身份去问。
我把刚才失败的请求重新拉出来,在请求头里塞进了这个奇怪的ID,我没有直接改版本号,而是把 current_version 字段整个删掉了,直接问服务器:你手里最新的数据是什么?
这下,服务器没有报错,直接把数据给我甩回来了!我瞪大了眼睛,点开一看,我去,全是没公开的新地图、新装备的图片链接和文字描述。这玩意儿比什么内幕消息都靠谱,是实打实的服务器数据。
我赶紧把这些东西都保存下来,生怕他们后台的人发现不对,又把这个漏洞给补上。整个过程,我花了差不多一个通宵,从晚上十点开始,一直搞到第二天早上鸡叫。
为什么我要折腾这个“小黑活”?
说句实话,技术上这不算什么高深操作,就是抓住了他们网站开发人员偷懒,没把请求校验和权限认证做彻底的空子。但是这事儿背后,有点故事。
去年我被一个游戏工作室坑了一把,说好了合作做社区内容,结果等我把内容做完了,他们直接翻脸不认人,把我踢出去了,说我提供的信息不准,没给我结账。当时我为了那个项目,连着熬了好几个星期。
我当时就发誓,一定要找到机会,把他们藏着掖着的东西给公之于众,让他们也尝尝被人捏住小辫子的滋味。虽然这个官网不是那个工作室的,但它们是竞争对手。我拿到的这些未发布信息,足够让他们的社区运营彻底乱套,也算是替自己出了一口恶气。
我把这些数据整理了一下,分批次匿名发给了几个大V,他们当时都惊呆了,以为是哪个高层泄密了。看着论坛上大家炸开锅讨论我放出去的“内幕消息”,我心里那叫一个舒坦。实践记录这事儿,真不是为了炫耀技术,很多时候,只是为了出口气。
所谓的“黑魔法”,就是你比别人多看一眼网络请求的细节。这回实践,让我再次确认,越是自称安全的地方,漏洞往往越大。