139
周一早上,雨晴打开笔记本,开始测新项目的API。
先把文档过了一遍。几十个接口,分了几类:登录、查询、交易、管理。先从登录接口下手。她注册了一个测试账号,抓登录请求。验证码是四位数字,有效期五分钟。她试了一下,同一个验证码可以重复使用——第一次登录成功,第二次用同一个验证码也能成功,第三次还是成功。没有次数限制,也没有时效校验。这意味着攻击者可以暴力破解验证码,四位数字,一万种组合,几分钟就能跑完。记下来,截图。
再测订单查询接口。URL里有个orderId参数,数字,递增。她用自己的账号生成了一个订单,orderId=10001,然后改成10000,页面显示出来了——另一个用户的订单信息。越权漏洞。改了几个数字,都能查到。记下来。
下午开始测支付回调接口。这是重头戏,涉及到钱。文档里写了回调流程:用户支付成功后,第三方支付平台会异步通知服务端,服务端收到通知后更新订单状态。雨晴模拟了一个回调请求,发现签名算法是MD5,密钥硬编码在前端代码里。这意味着任何人都可以伪造回调请求,把未支付的订单改成已支付。她写了一个脚本,发送伪造的回调,服务端返回200,订单状态变成了已支付。高危漏洞。记下来,截图。
群里发了一条消息:“新项目挖到几个洞。”
深海鱼秒回:“什么类型的?”
“越权、签名缺失。还有验证码可重用。”
“经典漏洞组合。客户是金融公司?”
“嗯。”
深海鱼发了一个猫点赞的图。“金融公司最怕这种,钱的事。”雨晴没回,继续测。
周二上午,门铃响了。雨晴去开门,林听夏站在门口,拎着一个双肩包。
“住两天。”她换了鞋,把包放在沙发上。
雨晴看着她。“你带睡衣了?”
“带了。”
“毛巾呢?”
“也带了。”
雨晴没再问了,回到书桌前。林听夏走过来看了一眼屏幕。“在测什么?”
“API。支付接口。”
“看不懂。”
“你不用看懂。”
林听夏没接话,去厨房看了看冰箱。“中午吃什么?”
“随便。”
林听夏开始做饭。雨晴继续测,厨房里传来切菜声,刀落在案板上,嗒嗒嗒。然后是油锅声,滋啦一下。橘子皮从沙发上跳下来,走到厨房门口蹲着,仰头看林听夏。林听夏低头看了它一眼,没理它。
中午林听夏做了青椒炒肉和番茄蛋汤。两个人坐下来吃饭,雨晴吃了几口,林听夏看着她。
“你最近是不是瘦了?”
“没有。”
“下巴尖了。”
“夏天,吃得少。”
林听夏没再问了。
下午雨晴接着测,林听夏在沙发上看手机。橘子皮从沙发上跳下来,走到林听夏旁边,没趴她腿上,趴在旁边,脑袋搁在她大腿边上。林听夏看了它一眼,伸手摸了摸它的头。猫没跑,但也没蹭她,就那么趴着。阳光从窗户照进来,落在地板上。房间里很安静,只有键盘声和偶尔翻页的声音。
雨晴测到一半,抬头看了一眼。林听夏在沙发上,橘子趴在她旁边,窗帘微微晃动。她看了两秒,低下头继续测。
晚上两个人一起做饭。雨晴切土豆,林听夏切番茄。厨房不大,两个人站着有点挤。雨晴往左边挪了挪,林听夏往右边挪了挪,还是挤。
“你站那边去。”雨晴说。
“这边没位置。”
“那你别动。”
两个人没再动了。
吃完饭,雨晴坐到书桌前写报告。林听夏在沙发上看书,是雨晴书架上的一本小说,翻了一半,折了个角当书签。橘子皮在中间睡觉,头朝着雨晴,尾巴朝着林听夏。
群里洛神发了一条消息:“周末又要加班,烦。”小叶子说“我们店周末最忙,连轴转”。深海发了一张猫在办公桌前崩溃的图,两只爪子抱着头。何意味冒出来了:“我今天拿到药了。”配了一张药盒的照片。
雨晴看着那张照片,拿起手机,私信他:“吃了?”
“还没。今天晚上开始。”
“第一次吃可能有不舒服,头晕恶心什么的。正常。忍一下。”
“嗯。”
“有不舒服随时跟我说。”
何意味发了一个猫点头的表情。雨晴把手机放下,继续写报告。
周三上午,雨晴把报告初稿写好了。五个漏洞:验证码可重用、越权、签名缺失、敏感信息泄露、日志打印过多。严重程度签名缺失给了高危,越权中高,验证码中危,其他两个低危。每个都有详细描述、复现步骤、截图、修复建议。发给周正平,周正平回了一个“收到”。
下午,周正平打电话来了。
“报告我看了。签名缺失那个写得清楚。客户问能不能远程指导修复?”
“可以。”
“那我把你拉群里,你跟他们开发对接。”
周正平把雨晴拉进一个微信群,群名叫“XX项目技术沟通”,里面有三个人。雨晴发了修复建议:签名算法改用HMAC-SHA256,密钥放服务端,不要硬编码。加了一段示例代码,写了几行关键逻辑。开发回了一个“明白”。雨晴又发了越权漏洞的修复方案:订单查询接口增加归属校验,先判断当前用户是否有权限查看该订单。开发说“这个简单”。雨晴没再回。
晚上,周正平又发了一条消息。“杭州有个客户,可能需要现场支持。时间还没定,可能下个月。你先做准备。”
雨晴回了一个“好”。
她在群里说了一句:“可能要去杭州出差。”
小叶子——群里那个小叶子——立刻回复:“来杭州!面基!”
洛神说:“你不是上海的吗?”
小叶子说:“我在杭州打工啊。刚来的。”
雨晴愣了一下。“你在杭州?”
小叶子说:“嗯,上个月来的。在便利店打工,跟之前一样。”
雨晴想了想。“那到时候联系。”
小叶子发了一个猫期待的图。
晚上,林听夏收拾东西。双肩包拉好拉链,放在门口。雨晴坐在书桌前看着她。
“你明天走?”
“嗯。早上。”
“那你早点睡。”
两个人躺在床上。雨晴睡床,林听夏睡沙发。橘子皮在床尾盘成一团,这次没去林听夏那边。黑暗中安静了一会儿。
“你那个杭州的项目,什么时候去?”林听夏问。
“不知道。下个月吧。”
“去几天?”
“可能两三天。”
林听夏没再问了。
“你调休休完了?”雨晴问。
“嗯。明天回去上班。”
“那你早点睡。”
“你也是。”
雨晴翻了个身,摸着橘子皮的背。猫的呼噜声在房间里响着。
第二天早上,雨晴醒的时候林听夏已经走了。茶几上留了一张纸条:“冰箱里有粥。热了喝。”雨晴把纸条折好放进抽屉里——抽屉里已经有好几张了,都是林听夏留的。她没扔。
坐到书桌前,打开笔记本。把API报告最终版发给周正平,加了一条:“越权那个如果开发不会修,我可以再解释。”周正平回了一个“OK”。
群里,杭州的小叶子在问:“姐你什么时候来?确定了跟我说,我请你去西湖边吃外婆家。”
雨晴说:“还没定。定了告诉你。”
小叶子发了一个猫举杯的图。
何意味发了一条私信:“姐,药吃了。昨晚吃的,今天早上起来头晕,恶心,想吐。”
雨晴回:“正常。吃一周就好了。多喝水。”
“嗯。姐你当时也这样吗?”
“嗯。忍过去了。”
“好。”
雨晴把手机放下。橘子皮跳上书桌趴在她面前。她摸了摸猫的头。
窗外的阳光很亮。暑假刚过了一周。杭州的项目还没定。但快了。