菲利普开始吟唱了。
他的声音不大,但吐字清晰,带着一种刻意练习过的韵律感。
“Ignis……”
火。他调用了火元素这个“库”。
“……Selectivus……”
Selectivus?我在书里没见过这个词。但从词根来看,很明显是“选择性的”意思。这是一个高级参数,一个筛选器。
“……burere……”
燃烧。这是“方法”,是“A”。
他的手势很复杂,手指在空中划过一个精巧的轨迹,像是在绘制一个无形的流程图。精神力高度集中,眉心微微发光。
整句咒语连起来,就是``。而他的精神力,则正在定义那个“选择”的条件——` == fruit_peel`。
这是一个相当精巧的低阶法术。对于一个学徒来说,确实值得炫耀。
但是,在我的耳朵里,这清晰的咒语,就像一段暴露在公网上的、没有任何加密的明文代码。而我,就是那个准备进行SqL注入的黑客。
我该如何注入我的“恶意代码”?
我不能用魔力去对抗。我这“魔力绝缘体”就像一个黑洞,任何指向我的魔法都会被中和、驱散。但我同样也无法主动发出任何魔法波动。
但我有嘴,我能说话。这个世界的“魔法系统”似乎是通过声波来接收“咒语”这个指令的。那么,如果我在他完成指令的瞬间,发出一个具有更高优先级的、或者说逻辑上具有破坏性的指令,会怎么样?
我不需要念出完整的咒语,那会因为没有魔力驱动而无效。我只需要在他构建的“语法树”上,挂上一个恶意的节点。
菲利普的吟唱还在继续,他在为法术注入最后的参数,他的精神力已经锁定了垃圾桶里的几片烂苹果皮。
“……targeta est……pellis Fructus……”
targeta est pelliFruit peel. (目标是果皮)。
他正在做最后的条件判定!
就是现在!
在他念完最后一个音节,但法术尚未完全激发的那一个微秒级的空隙里——那个相当于程序员敲下回车键,电信号奔向cpU的瞬间——我用同样清晰,但音量极低的古代语,像耳语般吐出了一个词。
“omnis.”
omnis。在古代语里,意思是“一切”,“全部”。
我没有试图去否定他的咒语,也没有去创造一个新的法术。我只是在他的`whERE`子句后面,加了一个`oR 1=1`。
他的指令是:`burn whERE materialfruit_peel `。
我的注入是:`oR targeteverything`。
我甚至不需要用魔力去驱动这个词,我只是单纯地、物理地发出了这个音节,让它混入他那句咒语的声波里,一起被这个世界的“魔法编译器”接收。
我不知道会发生什么。也许什么都不会发生。也许我的“绝缘体”特性意味着我发出的任何与魔法相关的音节都会变成无效的噪音。
但万一……万一这个系统,真的有漏洞呢?
下一秒,异变陡生。
菲利普面前的空气中,原本应该精准地飞向果皮的几缕纤细的火线,突然剧烈地一颤。那感觉,就像一个正在流畅运行的程序,突然读入了一个溢出的变量,导致整个运算逻辑瞬间崩溃。
火线没有消失,反而猛地膨胀开来!不再是受控的、选择性的火焰,而是变成了一团狂暴的、不受约束的橘红色能量!
“轰!”
一声闷响,整个铁制垃圾桶像被塞了一颗小号炸弹,猛地炸裂开来!
炽热的冲击波夹杂着燃烧的果皮、烧焦的纸张、融化的塑料袋和各种不可名状的垃圾,糊了菲利普和他的两个同伴一脸!
“啊——!”
三声惨叫同时响起。菲利普首当其冲,头发被燎掉了一大块,崭新的见习生长袍上沾满了漆黑的、冒着烟的污物,整个人散发出一股烤焦的蛋白质和垃圾混合的恶臭。他的两个同伴也好不到哪里去,狼狈地在地上打滚,试图扑灭身上的零星火苗。
法术失控了。
而且是以一种最壮观、最符合墨菲定律的方式失控了。
我躲在墙后,心脏狂跳。不是因为害怕,而是因为极致的兴奋。我看着眼前这片狼藉,就像看着自己写下的第一个“hello world”程序成功运行一样。
成功了!真的成功了!
这个世界的魔法系统,它的指令接收端,存在一个巨大的、致命的漏洞!它无法分辨指令的来源!它就像一个老旧的、没有任何安全验证的网站后台,任何人都可以在URL里提交参数,然后服务器会老老实实地执行它!