早期PlotMe插件中的幽灵权限漏洞

在 2015 年左右的 Minecraft 生存服务器中,往往存在一个诸如 PlotMe 这样的地皮或领地插件。玩家可以通过指令获取一块地皮的所有权,在地皮中建造房屋与储存物品,并将这块领地的权限分享给其他用户。

然而,当时的 PlotMe 插件存在一个完全未被重视的漏洞:领地的主人可以把领地权限给予不存在的玩家。在一系列操作的组合之下,这一漏洞可以使得玩家获取他人地皮中的物品。

一、幽灵权限

在当时的 Minecraft 服务器中,傻瓜式的 GUI 设计并没有完全普及。尽管在部分服务器中,玩家可以通过 SignShop 或 BossShop 这样的插件可视化的领取地皮(而不必输入 /plot auto 或 /plot claim 这样的指令),但鲜有服务器能为地皮权限指令添加一种便携的操作方法。在当下的服务器中,玩家可以通过单击 GUI 中的玩家图标将权限给予其他用户,但在旧时代的服务器中,玩家总是需要手动输入 /plot add [玩家名] 这一指令将地皮权限给予自己的朋友。

然而,当时的 PlotMe 存在这样一个幽灵权限漏洞:在执行 /plot add [玩家名] 指令时,插件不会检测该玩家是否存在,玩家可把地皮权限给予一个并不存在的玩家。譬如你想把权限给予玩家 player1,但你错误把指令输入成了 /plot add player2,即便 player2 并不存在,服务器也会将把你地皮的权限给予 player2 这个幽灵玩家。
这也就导向了一个问题:如果他人使用 player2 这一昵称注册账号进入游戏,他将拥有你地皮的全部权限。

二、实际操作

既然如此,我们要如何找到那些尚未被注册的 player2 呢?在 PlotMe 中,你可以使用 /plot info 这一指令查询目标领地的权限所有者,且大部分服务器都并没有关闭这一插件的使用权限。
由此,你可以对服务器中的各种所有地皮执行一遍 /plot info 这一指令,并记录其领地权限信息。你可以使用脚本遍历(如果你会的话,至少我不会),也可以手动跑图并输入指令完成完成这一工作(你可以使用 /pt plot info 将指令绑定在手中物品上,这可以减少你在跑图时的停顿,对效率有少量提升)。

重点来了:当你发现权限列表中存在两个十分相似的昵称时,这往往意味着其中一个名字是幽灵玩家
我们完全可以想象这种情况的发生场景:领地主想把权限给予他的朋友 player1,却因为输入错误打成了 player2,而此后玩家又输入了一遍正确的指令,将权限正确给予他的朋友。
此时,你就可以使用 /money [玩家名] 这样的指令检测目标玩家是否存在。当玩家不存在时,系统便会返回“该玩家不存在”等字样,而非返回其金钱数量。
而在此之后,你就可以使用幽灵玩家的用户名注册一个新账户,并获取该地皮的所有权限了。这个玩家可以“走正门”拿走该地皮的所有物品。

三、这个漏洞真的广泛存在

“输入错误”,这听上去是一件多么愚蠢的事情!何况在输入错误之后,玩家不会使用 /plot remove [玩家名] 移除幽灵玩家的权限吗?令人遗憾的是,相当一部分玩家真的同时犯下了这样两个错误:不仅输入错误,而且没有进行修正。
我们不难理解这种情况的产生原因:Minecraft 服务器中存在大量的低龄玩家,且相当一部分玩家对指令操作并不熟悉,也就更不必提对幽灵权限的问题有所意识了。就初步统计而言,大约有 1/20 的地皮中都存在这种幽灵权限的问题,而其中不乏“物资丰富”的大户。

在新版本的 PlotMe 后代插件中,幽灵权限的漏洞已经得到修复。然而在旧版本中,服务器果真没有办法防御这一漏洞吗?事实上其方法是多样的:作为底牌,服主可以选择不使用 PlotMe 插件;与此同时,服主也可以完全禁用 /plot info 这一指令的权限,这通常不会为玩家带来困扰;除此之外,设置单个 IP 的账号注册限制也可以改善这一问题(尽管这种限制可以被绕过)。

但真正的问题在于:从玩家到服主,几乎没有人能意识到这种一环扣一环的具有社会工程学色彩的漏洞的存在。如果说漏斗矿车或 All-U-Want 的书与笔 BUG 是十分直观的,是“即便小学生也能学会的”,那么 PlotMe 的幽灵权限的问题则选择在非技术角度另辟蹊径,几乎没有服主能意识到这一问题,也几乎没有玩家能想到用这种途径获利。

最终,直到 PlotMe 插件乃至 Minecraft 盗版商业生存服务器的时代大势已去后,这一问题也可谓没有真正得到广泛关注。服主们只是简单的带着这个漏洞运行下去,而那些希望投机取巧的玩家也只会尝试一些常规的技术性 BUG,或是使用矿物追踪等更为常规的作弊手段。

滚动至顶部