北京的秋天来得急,走得也快。清华园里的银杏叶刚泛起金边,冷风就急不可耐地往人衣领子里钻。
紫荆学生公寓的男生宿舍里,暖气还没来,但气氛却很热。
林天裹着那件从江城带来的旧卫衣,坐在电脑前,眼睛熬得通红。那台还是他高中时候买的联想台式机,此刻风扇正发出“嗡嗡”的轰鸣声,仿佛随时要起飞。屏幕上是Windows XP经典的蓝天白云背景,只不过上面密密麻麻开着好几个黑色的命令行窗口。
这距离杨明宇那场“线上视频骂醒大会”已经过去了一周多。
杨老师给他的作业是“寻找漏洞”。这四个字听起来简单,做起来简直是要了亲命。清华的教务系统那是谁写的?那是几代图灵班(注:姚班的前身概念或相关实验班)的大神、现在的教授们亲自操刀架构的,运行在昂贵的SUN小型机上,号称“固若金汤”。
“还在折腾你那个脚本呢?”
一个冷淡的声音从背后传来,带着一丝毫不掩饰的的怜悯。
说话的人叫顾玮。
如果说林天是江城这种小池塘里的金鳞,那顾玮就是出生在深海里的鲸鱼。这哥们儿来自海淀区的“神仙学校”,据说高二就拿了IOI(国际信息学奥赛)的金牌。
顾玮的桌面上永远开着Linux的界面(在2005年这可是极客的象征),他手里捧着一本全英文的《算法导论》,看林天的眼神仿佛在看一个原始人。
在这一周的相处中,林天深刻体会到了什么叫“降维打击”。
林天用VC++ 6.0写个排序算法,要想十分钟,写三十行;顾玮扫一眼,三分钟,用GCC编译,五行代码搞定,还能顺便嘲讽一句:“你这内存泄漏得像个筛子。”
“嗯,随便试试。”林天没回头,继续盯着屏幕上的数据包分析工具。
顾玮端着咖啡,像个视察工作的领导一样走到林天身后,扫了一眼他的屏幕,嗤笑了一声:“你这是想搞‘抢课外挂’?别费劲了。教务系统的并发控制是基于Oracle数据库的行级锁,严谨得很。你这种模拟鼠标点击的‘按键精灵’宏,连服务器的皮毛都摸不到。”
“不试试怎么知道。”林天咬着牙,手指没停。
“这就像你想用弹弓去打卫星。”顾玮摇摇头,走回自己的座位,“有这时间不如多背几个单词。野路子在真正严谨的计算机科学面前是没有生存空间的。”
“野路子”这三个字,像针一样扎在林天心上。
是啊,他是野路子。他是靠着做游戏、写网吧计费插件练出来的。他的代码不优雅,变量命名全是拼音缩写,甚至有时候充满了“goto”语句这种被学院派唾弃的写法。
但杨老师说了,这就是他的优势。
杨明宇的话像魔咒一样在他脑海里回响:“权威不是完美的。只要是人写的系统就一定有人性的弱点。”
林天深吸一口气。顾玮说得对,从代码逻辑上来看这个系统确实完美无缺。如果按照常规思路去分析它的算法,林天就算算力再翻一倍也干不过那些教授。
但是,林天想起了自己在江城网吧看过的场景。
那时候,网吧的计费系统也很严密。但那些没钱上网的小混混是怎么干的?他们不是去破解代码,而是趁着网管交接班的一瞬间,或者疯狂晃动网线接口,卡出一个“物理断网但系统未响应”的状态,从而免费上网。
这就是“物理”的漏洞。
林天停下了编写C++代码的手,转而打开了一个名为“按键精灵”的最土最Low的软件——这在2005年的网游圈里可是神器。
他不再试图去欺骗服务器的验证机制,而是换了一个思路:既然数据库锁是完美的,那么在极高强度的并发请求下,为了防止死锁,数据库会不会有强制回滚?或者Web服务器(Apache)的连接数会不会爆满导致溢出?
就像一群人挤公交车,门是关得严严实实的。但如果一万个人同时往门上撞,司机为了防止车门被挤爆,会不会下意识地开一下门?
“你在干什么?”顾玮听到了奇怪的声音,转过头来。
他看到林天正在把一段看起来极其简单的循环发包脚本,复制进了十几台虚拟机里。
“我在模拟一场‘堵车’。”林天嘴角勾起一抹诡异的笑。
“疯子。”顾玮评价道,“你这样只会把你的IP封掉。这是SYN Flood攻击,是违规的。”
“我控制了频率,在封禁阈值以下。”林天按下回车键,“开始了。”
屏幕上,绿色的数据流开始滚动。
但他不是为了瘫痪系统,他是为了寻找那个“0.01秒”的缝隙。
顾玮本来不屑一顾,但随着林天电脑机箱风扇的轰鸣声越来越大,他也忍不住凑了过来。他看到自己电脑上打开的选课页面,响应时间从几毫秒变成了“正在加载...”。
“这有什么意义?你只是在制造垃圾流量。”顾玮皱眉。
“别急,看这里。”林天指着屏幕右下角的抓包工具。
就在服务器因为连接数过载而即将启动保护机制的前一刹那,那个“选课成功”的返回值,突然出现了一个诡异的乱码。
原本应该是“排队中”的提示,因为Web服务器的一次内存溢出,竟然跳过了鉴权步骤,直接返回了“OK”!
“卧槽?”顾玮那张万年冰山脸终于裂开了,爆出了一句并不优雅的感叹词。
“抓到了。”林天猛地一拍桌子,兴奋得差点跳起来,“看到没有!这就是漏洞!当并发量超过临界点,Apache服务器的进程来不及处理Session,为了释放资源,它把我的请求当成已经验证过的老请求放行了!这就是‘挤公交’效应!”
他成功了。他用一种最暴力、最“野路子”的方法,在清华最顶尖的系统上撕开了一道口子。
顾玮盯着屏幕,眼神复杂到了极点。他像看怪物一样看着林天:“这……这不科学。这在理论上是不应该发生的。”
“代码是逻辑的,但硬件是物理的。”林天靠在椅背上,感觉浑身的毛孔都舒展开了,那种被压抑了一个月的憋屈感一扫而空。
喜欢让你带个差班,你全员本科了?请大家收藏:(m.2yq.org)让你带个差班,你全员本科了?爱言情更新速度全网最快。