146(中)
项目正式启动那天,杭州下雨了。
雨不大,细细的,密密地落,打在梧桐叶上沙沙响。雨晴站在窗前看了一会儿,雨水顺着玻璃往下流,把外面的街景模糊成一团色块。橘子皮蹲在窗台上,隔着玻璃看外面的雨,尾巴慢慢地甩。
“你不能出去玩了。”雨晴说。橘子皮没理她。
坐到书桌前,打开笔记本。今天要正式测车联网APP的云端API。先搭环境。注册测试账号,下载APP,安装到模拟器。打开Burp Suite,配置代理,抓包。登录请求发过去了,返回200。再看响应体,里面有一个token,很长的一串。她把这个token记下来。
接下来测越权。她创建了两个测试账号,A和B。用A的token去访问B的订单列表——接口返回了数据。B的订单列表,用A的token能看。越权漏洞。记下来,截图。
再测敏感信息泄露。查看API返回的数据,发现订单接口返回了用户的手机号、地址、经纬度。经纬度是车辆的实时位置。这意味着任何有权限的人都可以看到其他车辆的行驶轨迹。记下来。
测到第三个接口的时候,卡住了。这个接口需要签名。请求参数里有一个sign字段,看起来像是MD5。她试着改了改参数,重放,服务端返回“签名错误”。说明后端校验了签名。但不能直接改参数,那怎么测?她想了想,先不管签名,看看有没有其他接口不需要签名。
翻了翻文档,找到一个“车辆状态查询”接口。不需要签名,只需要token。她用A的token去查B的车,成功了——返回了B车辆的实时位置、剩余油量、行驶里程。高危漏洞。记下来。
测了一上午,挖了四个漏洞。越权、信息泄露、车辆位置泄露、弱签名算法。弱签名算法那个她还没确定,需要进一步分析。她打开APP的代码,反编译,找到了签名生成的部分。果然是MD5,密钥硬编码在代码里。把密钥复制出来,自己构造了一个签名,替换原请求,重放,成功。确认了。
中午小叶子发消息来:“姐,下雨了,你出门记得带伞。”
“没出门。在家。”
“吃饭了吗?”
“还没。”
“冰箱里有饺子,你煮点吃。”
雨晴打开冰箱,果然有一袋速冻饺子。白菜猪肉的。她烧了水,下了一盘,站着吃完。橘子皮蹲在椅子上看她,喵了一声。
“不是给你的。”
橘子皮又叫了一声。
雨晴从冰箱里拿出一根火腿肠,切了几片放在猫碗里。橘子皮跳下椅子,走过去吃。
下午继续写报告。把上午挖的漏洞按严重程度排好。车辆位置泄露给了高危,越权中高,信息泄露中危,弱签名算法中危。每个漏洞都写了详细描述、复现步骤、截图。写到车辆位置泄露的时候,她多写了一段:“攻击者可利用该漏洞实时追踪任意车辆位置,涉及用户隐私安全,建议尽快修复。”
写完了,从头读了一遍。觉得弱签名算法那部分的描述不够清楚,又加了几个截图,把密钥在代码中的位置圈出来。
发出去之前,她给周正平发了条消息:“报告写好了。发你?”
周正平很快回:“发。”
雨晴把报告发了过去。靠在椅背上,呼了口气。橘子皮跳上书桌趴在她面前,她摸了摸猫的头。
手机震了。周正平回了一个“收到”。过了十几分钟,又发了一条:“客户对车辆位置泄露那个有疑问,觉得不是漏洞。”
雨晴看着那行字。“为什么?”
“他们说车辆位置本来就是共享给车主的,不属于敏感信息。”
“但A车主不应该看到B车主的位置。”
“你跟客户解释一下。”
雨晴想了想,打了一段话:“该漏洞的核心在于权限控制缺失。A用户使用自己的token可以查询到B用户的车辆位置,说明系统没有做用户归属校验。即使位置信息本身不属于绝对敏感数据,但未经授权查看他人信息属于越权行为,建议修复。”
发过去之后,等了快十分钟。周正平回:“客户说知道了。”又是“知道了”。雨晴想起深海鱼说的——甲方说“知道了”等于“知道了但不一定会修”。她把这段对话截了图,存在项目文件夹里。
晚上小叶子回来的时候,雨晴正在厨房做饭。醋溜土豆丝,番茄蛋汤。小叶子换了鞋,走过来站在厨房门口。
“姐,你还会做菜?”
“就会这几个。”
“看着还挺像那么回事。”
雨晴把菜盛出来,两个人坐下来吃饭。小叶子吃了一口土豆丝,嚼了嚼。“好吃。比我做的好。”
“你也会做菜?”
“会煮面。别的不会。”
雨晴没接话。小叶子又吃了一口,说“姐,你那个项目怎么样了”。
“报告发了。客户有个漏洞不认。”
“什么漏洞?”
“车辆位置泄露。A能看到B的车在哪。”
“那确实不安全。要是有人跟踪别人怎么办。”
“我跟他们说了。他们说知道了。”
小叶子叹了口气。“甲方都这样。”
吃完饭,雨晴洗碗的时候,小叶子站在旁边擦盘子。水龙头哗哗地响。
“姐,你什么时候去上海?”
“8月5号。你们定的那天。”
“票买了吗?”
“还没。这几天买。”
“我跟你一起去。我第一次去上海。”
“你没去过?”
“没有。一直在杭州,哪都没去过。”
雨晴看了她一眼。“那这次去逛逛。”
两个人收拾完,坐在床边。橘子皮趴在小叶子腿上,呼噜呼噜的。小叶子低头摸了摸猫。
“姐,你那个林姐,她真的来?”
“嗯。她说调休。”
“你们多久没见了?”
雨晴想了想。“两周多。”
“想她吗?”
雨晴没回答。她拿起手机,给林听夏发了一条消息:“报告发了。客户有个漏洞不认。”林听夏很快回了一个“嗯”。又发了一条:“什么时候回来?”雨晴看着那行字,打了几个字:“8月底。开学前。”林听夏发了一个句号。
小叶子在旁边看着。“她说什么?”
“没说什么。”
“你是不是该回去看看她?”
雨晴沉默了一会儿。“她想我了。”
“那你就回去啊。”
“项目还没做完。”
“项目比人重要?”
雨晴没接话。她站起来,去洗了澡。热水冲在身上,她闭着眼睛站了一会儿。水从头顶流下来,顺着脸往下淌。她在想林听夏一个人在家,晚上吃什么,有没有好好吃药,有没有失眠。她拿起手机,又放下。最后发了一条:“8月初上海见。”林听夏回了一个“好”。
躺到床上,橘子皮跳上来在她脚边盘成一团。雨晴摸了摸猫的背。窗外的雨还在下,沙沙沙的,比白天小了一些。
“姐。”小叶子在地铺上叫她。
“嗯。”
“你以后会不会留在杭州?”
“不知道。”
“你要是留杭州,我们就能经常见面了。”
雨晴没接话。她翻了个身,看着窗帘。路灯的光透过雨雾,朦朦胧胧的。
“睡吧。”她说。
小叶子没再说话了。过了一会儿,雨晴听到她的呼吸变均匀了。她拿起手机,看了一眼时间。快十一点了。林听夏没再发消息。她把手机放到枕头旁边,闭上眼睛。
明天还要跟客户解释漏洞。她想着怎么措辞,想着想着就睡着了。