(29)
周日傍晚,雨晴回到郑州的时候,天快黑了。
火车晚点了二十分钟。车厢里人不多,大部分人在洛阳就下了,剩下的几个零散地坐着,有人靠着椅背睡觉,有人低头看手机。雨晴坐在靠窗的位置,看着窗外的风景从田野变成楼房,从楼房变成高架桥,从高架桥变成熟悉的车站。苏晚坐在她旁边,也睡着了,头歪着,棒球帽檐遮住了半张脸,红色发卡在帽檐上随着火车的晃动轻轻颤着。雨晴没有叫醒她。她看着苏晚的侧脸,觉得她睡着的时候比醒着安静很多,嘴角抿着,眉头微微皱着,像是在做什么不太好的梦。
火车到站的时候,苏晚自己醒了。她揉了揉眼睛,帽檐歪了,她扶正,然后站起来伸了个懒腰。“到了?”她的声音还带着刚睡醒的沙哑。雨晴说“到了”。她们一起下车,出站,在站前广场和刘景行他们会合。宋辞的登山包还是那么大,他背了一路,现在又背回来,苏晚说“你背了个寂寞”,宋辞说“你不懂,这是仪式感”。周小茉抿着嘴笑,陈思远没说话,把电脑包的带子往肩膀上提了提。刘景行说“散了,下周社团见”,然后大家各自往地铁站走。
雨晴和苏晚一起走到地铁站。苏晚往一号线,雨晴往三号线。分开的时候苏晚说“你到家给我发消息”,雨晴说“好”。她走进三号线站台,等车,上车,靠着车门,把书包放在脚边。车厢里人不多,有一个妈妈抱着小孩,小孩已经睡着了,嘴张着,口水流下来,亮晶晶的。雨晴看着那个小孩,想起自己小时候——她不知道自己小时候是不是也这样,在妈妈怀里睡着,流口水,什么都不用想。她记不清了。
回到公寓的时候,天已经全黑了。她开门,开灯,换鞋。房间里还是那个样子,冰箱嗡嗡地响,窗台上的薄荷站在新盆里,叶子垂着,但比走之前精神了一点——也许是心理作用。她走过去,摸了摸叶子,指尖凉凉的。她给薄荷浇了水,水从盆底渗出来,滴在窗台上,她用袖子擦了。
她给林听夏发消息:“到家了。”
过了大概五分钟,林听夏回:“早点休息。”
雨晴看着那三个字,觉得它们比以前暖了一点。也许是因为林听夏没有问“洛阳好玩吗”“累不累”“吃了没”,只是说“早点休息”。好像她知道雨晴累了,好像她什么都知道。雨晴没再回,把手机放在茶几上,走进卧室,躺在床上。她抱着林听夏的枕头——那个已经没有味道了的枕头——闭上眼睛。
脑子里闪过这两天的事。火车站,苏晚的棒球帽,火车上宋辞讲他搞挂客户网站的故事,苏晚笑得很大声。洛阳的大学,报告厅,讲台上那些她听不懂的PPT,苏晚在旁边小声翻译。青旅,四人间,上下铺,苏晚穿着白色睡裙梳头,她自己躲在卫生间里反锁门,换好衣服才出来。那碗牡丹燕菜,烩面,苏晚说“洛阳的烩面没有郑州的好吃”。那个晚上,她说“还、还没”的时候结巴了,她的手指在抖,她把拳头塞进被子下面,压在身体旁边。
她翻了个身,把枕头抱得更紧。她觉得洛阳像一场梦。不是那种不真实的梦,是那种太真实的、每一个细节都记得清清楚楚、但想起来却觉得不太像真的的梦。
周一、周二、周三,三天过得很快。上课,写作业,学网安,吃饭,睡觉。和之前一样,但又不太一样。她发现自己上课的时候不再走神了——不是那种完全不走神,是走神的时间变短了。以前她会在课堂上想起林听夏,想起她蹲在厨房地上捡碎瓷片的样子,想起她在火车站转身走进人流里的背影,一想就是一整节课。现在她也会想,但想一会儿就把自己拉回来了,拉回到黑板上那些一元二次方程的判别式上。
周四下午,社团活动。
雨晴走进机房的时候,苏晚已经在老位置上了。她今天换了一个发卡,不是红色的,是深蓝色的,但还是在刘海上,很显眼。她看见雨晴,笑了一下,说“来了”。雨晴嗯了一声,在她旁边坐下。
刘景行站在前面,敲了敲白板。“今天不学新东西,每个人分享一下洛阳之行的收获。从我开始。”他推了推眼镜,说他在沙龙上听到了一个新的漏洞挖掘思路,回去之后试了一下,发现可以用在自己正在做的项目上。他说的时候语气很平,像是在念一份报告,但雨晴注意到他的手指在桌上敲了两下,笃笃,比平时更用力。
然后是苏晚。她站起来,声音很大,像是在做演讲。“我学到了三个东西。第一,那个讲逻辑漏洞的案例很有用,我回去之后复现了一下,发现我们学校那个选课系统可能也有类似的问题。第二,应急响应那个小姐姐讲得太好了,我以后也想做那个方向。第三,”她顿了顿,“洛阳的牛肉汤真的很好喝,你们下次去一定要喝。”
机房里有几个人笑了。宋辞笑得最大声,薯片差点从手里掉出去。
宋辞分享的时候,说他听懂了一个关于文件上传的案例。他说的时候磕磕巴巴的,有些词说错了,苏晚在旁边小声纠正他,他改过来,继续说。他说完坐下来,长长地呼了一口气,像是刚跑完八百米。周小茉分享了她对CTF比赛的理解,她说她以前觉得CTF很难,现在觉得虽然还是很难,但好像可以试着学一下。她说的时候声音很小,但每个人都听见了。
陈思远站起来,只说了一句话:“那个讲应急响应的不错。”然后坐下了。苏晚在后面小声说“你也太省字了”,陈思远没理她。
轮到雨晴的时候,她站起来,手放在桌上,手指摸到了桌面上的一道划痕。她深吸了一口气,开口了。
“我最感兴趣的是那个逻辑漏洞的案例。”她的声音不大,但机房安静,每个人都听得见。“那个讲者说,有一个网站,用户修改订单价格的时候,前端限制了只能输入正数,但后端没有校验。攻击者可以抓包,把价格改成负数,然后提交。结果订单总金额变成了负数,用户不仅不用付钱,网站还要倒找钱。”
她停了一下,看了一眼苏晚。苏晚朝她点了一下头。
“我当时没完全听懂,因为抓包的工具我不会用。回来之后我查了资料,装了一个Burp Suite,跟着教程试了一下。我搭了一个测试环境,模仿那个漏洞,把价格改成了负数。提交之后,订单金额真的变成了负数。”她说到这里的时候,嘴角动了一下。“虽然只是一个测试环境,但看到那个负数的时候,我觉得……挺有意思的。”
机房安静了一秒。然后陈思远开口了。
“进步很快。”
就三个字。但雨晴看见他嘴角动了一下——那不是笑,但也不是不笑。苏晚在旁边笑着补充:“她回来之后就在群里问Burp Suite怎么装,我教了她一下,她一个晚上就学会了。”宋辞在后面喊“三文鱼大佬”,被刘景行瞪了一眼,闭嘴了。
活动结束的时候,周小茉走过来,手里拿着笔记本,牙套在灯光下闪了一下。“雨晴,你那个SQL注入的联合查询能再教我一下吗?我卡住了。”雨晴说“好”。她们坐在机房里,其他人都走了。苏晚走的时候说“我先走了,你教完她早点回去”,雨晴点头。
雨晴打开电脑,在DVWA靶场里演示了一遍联合查询的步骤。她先查了字段数,然后查了数据库名,再查了表名,最后查到了数据。她一边敲一边说,手指在键盘上慢慢移动,每打一行代码就停下来解释一下。周小茉在旁边听,偶尔问一句“这个是什么意思”“那个为什么要这样写”。雨晴回答的时候,有些词她自己也说不清楚,但她把自己知道的部分说了,不知道的部分说“这个我还没学,等我学了告诉你”。周小茉说“好”。
周小茉终于跑通的时候,她盯着屏幕上那行查出来的数据,愣了一秒,然后激动得差点把笔记本从桌上推下去。雨晴伸手扶住了电脑。“成了成了成了!”周小茉的声音有点大,在空荡荡的机房里回荡。她笑的时候牙套全露出来了,银色的,亮亮的。雨晴看着她的笑,忽然想起自己第一次跑通SQL注入的时候——那天晚上她一个人在家,盯着屏幕上的“Welcome to the password protected area”看了很久,然后靠在椅背上,长长地呼出一口气。那时候林听夏不在。现在周小茉面前有人在。
她们一起走出实验楼的时候,天已经快黑了。路灯亮了,橘黄色的,把两个人的影子投在地上。周小茉说“谢谢你雨晴”,雨晴说“没事”。周小茉走了几步,又回头,说“你教得比视频里清楚”。雨晴愣了一下,然后说“没有”。周小茉笑了笑,转身走了。
雨晴一个人往校门口走。路过教学楼的时候,她看见一个人从走廊那头走过来。低马尾,白侧脸,深蓝色校服。是林静秋。
雨晴的脚步慢了一下。林静秋也看见了她。她们的距离大概有十步远。林静秋看了她一眼,那个眼神很短,短到雨晴不确定她是不是在看自己。然后林静秋把目光移开了,从她身边走过去。走过去的时候,雨晴闻到她身上有一股淡淡的洗衣液的味道——和林听夏用的不一样,但很干净。她没有回头。雨晴也没有叫她。
她站在原地,看着林静秋的背影消失在走廊尽头。路灯的光从侧面照过来,把她的影子拉得很长很长,拖在地上,像一条灰色的尾巴。雨晴不知道为什么,忽然想起苏晚说过的话——“你姐什么时候回来?”她说“快了”。她不知道林静秋和这件事有什么关系,也许没有任何关系。她只是觉得,那个人的名字里有一个“秋”字,而林听夏的名字里有一个“夏”字。夏和秋。中间隔着一个完整的秋天。
她摇了摇头,把这个念头甩掉,走出校门。
晚上,雨晴正在写作业,手机响了。不是消息提示音,是来电铃声。她看了一眼屏幕——林听夏。她几乎是瞬间接起来的。
“喂?”
“小乖。”林听夏的声音从听筒里传出来,比在电话里听起来近很多,像是就在耳边。雨晴的喉咙紧了一下。
“姐姐。”
“你在干嘛?”
“写作业。”雨晴说。她把笔放下,靠在椅背上,把手机贴在耳朵上,贴得很紧。
林听夏说她在医院里,刚吃完饭。她说医院食堂的包子还行,白菜粉条馅的,一块五一个,她每次吃两个。她说她认识了一个病友,叫温若,和她差不多大,画画很好。她说温若送了她一张画——光秃秃的梧桐树,用铅笔画