凌晨三点,发现我盯着屏幕上那行报错代码,漏洞咖啡杯沿的发现指纹已经干成了白圈。这是漏洞个库存管理系统,第427行有个不起眼的发现逻辑漏洞——当用户提交负数订单时,系统会把库存扣成负数,漏洞但价格计算却按绝对值走。发现换句话说,漏洞你下-10件订单,发现系统给你加10件库存,漏洞还倒贴你钱。发现
这个漏洞躺了三个月,漏洞没人发现。发现直到昨天有个用户下了笔-1的漏洞订单,系统居然给他发了张优惠券。发现我本该立刻修复的,但手指悬在键盘上停住了——先别堵,看看能漏多少。
我搭了个监控脚本,把异常订单全部导进一个隐藏目录。第二天早上,数据出来了:一晚上有47笔负数订单,全部来自同一个IP段。有意思的是,这些订单都精准地卡在价格临界点,比如单价99.99的商品,他们故意把数量设成-3,让系统算出-299.97的总价,再触发满300减30的优惠券——漏洞被利用得比设计者还熟练。
这不是什么黑客团伙,就是个普通用户试出来的。他第一次可能只是手滑,发现系统没报错,反而给了优惠,于是开始反复试。到第三天,他已经摸清了所有触发条件,甚至开始分享给朋友。我查了聊天记录,他在一个游戏群里说:“这破站有个bug,能白嫖,别声张。”
你发现没有,漏洞的生命周期从来不是“出现-修复”这么简单。它像墙角的裂缝,有人路过看一眼,有人伸手抠一下,还有人拿锤子来凿。真正危险的从来不是那个最初的小裂缝,而是它被验证为“可薅”之后,引发的连锁反应。第四天,脚本抓到了800多笔异常,甚至有人写了个自动下单脚本,每五分钟跑一次。
我反而松了口气。因为当漏洞被规模化利用时,它的痕迹就藏不住了——所有异常订单的收货地址都集中在几个代收点,支付账号也是同一批注册的。我顺着这个线索,把数据打包发给风控部门,他们半小时内就锁定了那个群,封了27个账号。
修复漏洞本身只花了十分钟,改一行判断条件就行。但真正值得琢磨的是这个:漏洞被发现后的黄金四小时,我选择先观察而不是立刻堵,这违反了所有安全手册的规定。可如果不观察,我永远不知道这个漏洞是被谁、用什么方式、为什么盯上的。堵住一个洞容易,但搞清楚洞后面的逻辑,才是防止下一个洞出现的关键。
后来我把那个用户的行为轨迹调出来看,发现他第一次负数订单前,刚因为在评论区骂客服被禁言。他是在用这种方式表达不满——不是想偷东西,是想证明系统有毛病。这挺讽刺的,有时候漏洞不是技术缺陷,是情绪缺口。
所以你说发现漏洞应该怎么办?立刻修是本能,但忍住不修,先看它怎么漏、漏给谁、漏出什么来,才是本事。技术问题从来不只是技术问题,每个bug背后都站着一个人,他要么在犯错误,要么在找乐子,要么在抗议。而我这个修bug的,得先学会看人,再看代码。
顶: 816踩: 2






评论专区