美剧:从无耻之徒开始的硅谷大亨 第11节

  看着这些品相极佳的手机,杨坚的脑海里瞬间浮现出了一个可行的商业拓展计划。

  一直给鲍里斯这个随时可能黑吃黑的俄罗斯帮派分子打工,赚的永远是处于食物链底层的死工资。既然现在手里有了这么好的货色,他完全可以先扣下一台,将其破解越狱,拿着这台完美运行的样机,去南区甚至是北区边缘的那些正规二手电子维修店转一圈,当面展示自己的技术实力。只要能证明自己有把废铁变黄金的能力,那些苦于无法破解基带、只能靠低价倒卖零件度日的老板们,绝对会排着队求他合作。

  鸡蛋永远不能放在同一个篮子里。只有开阔了属于自己的多条进货渠道,他才能真正掌握这门生意的定价权,把鲍里斯从唯一的老板,变成他众多客户中可有可无的一个选项。

第十六章 代码写不出来就尝试白嫖吧

  夜晚八点的芝加哥正是街头混混和醉汉们最活跃的时候,远处时不时地传来几句破嗓子的叫骂声和忽远忽近的刺耳警笛。

  但这些南区特有的喧嚣,似乎都被阻挡在了这间狭窄破旧的出租屋之外。只剩下深秋刺骨的寒风裹挟着枯叶,时不时地拍打着那扇漏风的破木窗户,发出令人牙酸的“嘎吱”声。

  屋里没有开主灯。唯一的光源,就是书桌上那台散发着幽蓝光芒的廉价显示器。

  杨坚整个人几乎都陷进了那张掉皮的二手办公椅里。屏幕的冷光打在他有些疲惫却异常专注的脸上,映出那双布着几根血丝的黑白分明的眼睛。他手里端着一杯早就凉透的速溶咖啡,机械地抿了一口苦涩的残渣,随后烦躁地放下马克杯,伸手用力抓了抓有些凌乱的头发。

  在电脑桌的最边缘,鲍里斯给的那二十台成色不错的二手iPhone正静静地躺在塑料袋里,完全被主人无视了。

  他并没有急着开工。刚刚到手的六百美金现钞还安安稳稳地揣在夹克内兜里,上个月拖欠的房租已经有了着落,眼下的温饱危机暂时宣告解除。

  既然兜里有了这层厚实的现金缓冲垫,那袋子待破解的手机也就从续命的氧气瓶变成了随时可以提现的定期存款。他完全没必要像个被高利贷逼债的倒霉蛋一样,连夜赶工去换取明天的口粮。

  他现在有更充裕的时间和精力,去死磕那个真正能让他在这片资本丛林里撕开一道口子的东西。

  杨坚的视线重新聚焦在屏幕上,那里正密密麻麻地滚动着一段让他死活跑不通的 Java代码。

  他正在全神贯注地尝试复现那个在后世足以让全球网络安全界引发大地震的核弹级漏洞——Log4j JNDI注入漏洞。

  具体的复现思路他脑子里门儿清,但问题就卡在了“构建恶意的 LDAP响应服务”这最关键的一环上。

  “思路绝对没问题,但特么的这底层的协议怎么就这么难搞……”杨坚盯着屏幕上疯狂报错的终端,无奈地叹了口气。

  在目前的年代,根本没有后世那些一键生成恶意服务端的神器。他必须从零开始,硬搓一个能糊弄过 Java虚拟机的微型 LDAP服务器。可无论他怎么修改报文的字节序,目标机器就是死活不加载他的恶意代码,不是报序列化错误,就是直接丢弃请求。

  闭门造车了两天,进展不能说是步履维艰,只能说是一动不动。他现在看着屏幕上那些死活不听指挥的底层代码,感觉这玩意儿简直比南区街头最烂的酒鬼还要不可理喻。

  杨坚也尝试了上网求助。毕竟在2011年左右,无论是国内还是美国的互联网,技术论坛的氛围都极其真诚火热。没有割韭菜的付费教程,全是乐于分享的技术大牛。

  为了防止被人顺藤摸瓜,他极其谨慎地给这个问题套上了一层伪装,将其包装成了一个“关于遗留老旧系统网络兼容性测试”的纯技术求助帖,发到了诸如 Stack Overflow早期板块以及几个知名的黑客与开发者 BBS上。

  发完帖子后,他就像个等开奖的赌徒,一边啃着隔夜的冷披萨,一边每隔五分钟就狂按一次 F5刷新页面,期待着哪位顶着二次元头像的隐世大牛能从天而降,甩出一段神级代码直接打通他的任督二脉。

  然而,现实往往比 Bug还要骨感。

  论坛里虽然潜伏着无数大神,但并不是每一个帖子都能得到神仙下凡般的指点。杨坚问的这个问题实在太偏门、太底层了——“如何不依赖标准库,使用纯 Socket通信手动构造极其非标准的 LDAP ASN.1响应报文,去迎合 Java命名接口(JNDI)的底层解析规则”。

  这种不仅是在钻牛角尖、甚至看着还有点像在搞破坏的底层黑魔法,发出去犹如石沉大海。好不容易等来几个回复,点开一看,全能让人气得脑充血。

  一楼的架构师警察:“楼主你这纯属是陷入经典的 XY问题了。你为什么要这么干?直接 import javax.naming.*用现成的 API调标准库不香吗?奉劝一句,别闲着没事重复造轮子。”

  二楼的吃瓜群众:“这阴间需求看着怎么这么像在写木马或者搞渗透?楼主不会是哪个大学的本科生,在上网络安全课想骗论坛老哥帮你写期末大作业吧?”

  三楼和四楼的论坛水军:“纯纯的底层黑魔法,不明觉厉,帮顶。”、“沙发没了,搬个小板凳蹲个大佬解答,先 Mark为敬。”

  最离谱的是五楼,只留下了极其敷衍的四个字:“关机重启下。”

  看着满屏这些让人吐血的回复,杨坚一口气差点没倒上来。

  这种感觉极其憋屈。就像是你手里明明捏着一张能造出歼星舰的图纸,跑去五金店问老板“怎么把这两根引信接起来不短路”,结果老板像看神经病一样看着你,语重心长地劝你“买个一块五的成品双控开关不好吗”。

  偏偏他还根本没法跟这帮人解释!他总不能在帖子里大喊“老子在挖一个价值不菲、能让全网瘫痪的零日漏洞”吧?那估计第二天 FBI就会踹开他这间漏风出租屋的破门。

  “靠一群水友,黄花菜都凉了。”杨坚揉了揉发胀的太阳穴,果断关掉了满屏废话的浏览器。

  倒霉透顶的杨坚只能把目光投向了线下。

  两天后,芝加哥大学计算机系的阶梯教室。

  推开大门的那一刻,一股混合着廉价披萨、高浓度功能饮料和电子元件的奇特味道扑面而来。这就是由芝大计算机系牵头举办的一场开放式Tech Meetup(线下技术沙龙)。

  杨坚站在后排,看着这乱糟糟却生机勃勃的现场,心里忍不住生出几分感慨。

  他对于当前这个时代的技术现状与开源精神有了一种具象化的理解。这真的是互联网最后的黄金时代——智能手机刚刚普及,大厂的技术垄断和寡头互联的高墙还未筑起。在这里,人们不谈论股票期权,不谈论流量变现,只谈论如何用代码改变世界。

  就在这时,一阵激烈的争论声打断了他的思绪。

  不远处的一个圆桌旁,一个留着胡茬、身材高大的丹麦裔青年正挥舞着手臂,用极具煽动性的语气大声批判着 Java体系的臃肿:“你们这些学院派就是被 Java那些繁文缛节洗脑了!未来属于敏捷开发!Ruby on Rails才是 Web架构的终极形态,它能让你们少写哪怕一万行没用的狗屎代码!”

  杨坚挑了挑眉。他一眼就认出了那个年轻气盛的家伙——大卫·海涅迈尔·汉森(DHH)。

  这位不仅是芝加哥本地明星软件公司 37signals(后来的 Basecamp)的联合创始人,更是大名鼎鼎的 Ruby on Rails框架的缔造者。在2011年这个时间节点,他正处于技术声望的最巅峰,是无数开发者眼里的叛逆偶像。

  不过,作为一个从后世穿越来的老码农,杨坚看着这位被众人众星捧月的大佬,心里只觉得有些好笑。

  他在心里默默吐槽了一句:“尽情狂欢吧,DHH大佬。再过个几年,等单体架构被移动互联网时代的恐怖流量撑爆时,这帮现在把你当神拜的极客们,就会一边疯狂掉头发,一边连夜把你的代码全拆了,老老实实用 Go语言和微服务重构。而且谁能想到,你这个现在的技术潮流引领者,十几年后会变成一个天天在推特上疯狂对线、甚至逆版本而动,扯着嗓子喊要把公司从云端全搬回物理机房的暴躁刺头呢?”

  历史的局限性总是这么奇妙且讽刺。

  不过,杨坚对这场注定要被时代翻篇的框架之争没半点兴趣。他今天可是带着极其明确的目的来的——白嫖这满屋子的高智商大脑。

  找个安静的角落一个人死磕?那纯属脑子进水。在南区混了这么久,杨坚早就把脸皮练得比防弹衣还厚。

  他走到餐台前,极其自然地顺了一角免费的冷披萨和一听可乐,一边啃着,一边像个极其圆滑的交际花一样,开始在各个讨论圈子边缘游走试探。

  听到聊前端 UI和网页设计的,他脚都不停直接略过;听到聊数据库表结构的,他停下听两秒,发现没干货后立刻走人。

  终于,在会场偏僻的一角,他锁定了一个由几个发际线堪忧、穿着格子衬衫的老哥组成的硬核圈子。这帮人正在白板前激烈地讨论着企业级 Java应用底层的网络通信和分布式目录服务(LDAP)。

  “来活了。”

  杨坚眼睛一亮,毫不客气地凑了过去,站在最外围边喝可乐边旁听。

  他没有一上来就傻乎乎地抛出自己的 Bug,那样只会被当成伸手党赶出去。他像个耐心的猎手一样潜伏着。当其中一个胖子工程师抱怨 Java原生的 Naming接口在处理复杂网络环境时太过臃肿死板时,杨坚精准地抓住了时机。

  他咽下嘴里的披萨,极其自然地插了一句嘴,用几句后世云原生架构里极其精辟的接口解耦与轻量级通信思维,瞬间把那胖子的话题拔高了两个维度。

  这种来自未来十年的降维打击,立刻让圈子里的几个工程师对他刮目相看。几句专业黑话一交锋,大家瞬间默认了这个年轻的亚洲面孔是自己人,原本封闭的小圈子自然而然地给他让出了一个位置。

  见火候差不多了,杨坚装作不经意地叹了口气,抛出了自己准备已久的鱼饵。

  “说起底层协议,各位老哥,我最近接了个极其阴间的遗留系统测试活儿,头疼得很。”杨坚皱着眉头,抛出了那个在论坛上无人问津的问题,“你们说,如果完全抛弃标准库,只用纯 Socket通信,我该怎么手动构造一段极其非标准的 LDAP ASN.1响应报文,去强行骗过 Java JNDI接口的底层校验逻辑?”

  此话一出,刚才还聊得热火朝天的小圈子瞬间安静了下来。

  几个资深老哥面面相觑。这个问题实在太偏门、太野路子了,简直就像是放着好好的正门不走,非要问“怎么用一根铁丝把金库底下的下水管道给撬开”。

  “伙计,你这思路也太……剑走偏锋了。”那个胖子工程师挠了挠快要秃顶的脑袋,表情有些尴尬,“谁没事会去硬搓 ASN.1的底层字节序啊?那玩意儿简直不是人看的。你为什么不直接……”

  “你陷入思维误区了,年轻人。”

  胖子的话还没说完,一个低沉、略带点傲慢的男中音突然在杨坚身后响起,直接打断了这场讨论。

  杨坚转过头,看到一个穿着得体的粗花呢西装、带着半框眼镜的中年白人男子不知何时站在了这个小圈子的外围。男子的目光越过众人,直接锁定了杨坚,眼神里透着一种学术权威的从容与锐利。

  “你一直在尝试构建一个完整的、符合规范的 LDAP目录服务报文去迎合它,”中年男人推了推眼镜,语气里带着一丝智商优越感十足的微笑,“但你的目的如果仅仅是为了让 Java客户端通过 JNDI下载特定的 Reference对象,那你根本不需要遵循完整的 LDAP握手协议。”

  杨坚愣了一下,脑子里仿佛有一道闪电劈过。

  “你的意思是……”

  “我的意思是,Java的底层 NamingManager极其愚蠢。”男人继续说道,“它在解析 LDAP响应时,只认三个核心属性:javaClassName、javaFactory和 javaCodebase。你只需要写一个最简单的 Socket监听端口,直接把包含这三个属性的硬编码字节流强行塞给客户端,根本不用管其他的协议规范,它就会乖乖去下载你的代码。”

  一语惊醒梦中人!

  杨坚猛地一拍大腿。对啊!他之前一直想用正规的手段去回复请求,却忘了在黑客的逻辑里,只要结果达到了,中间的协议规范完全可以被暴力阉割和伪造!

  这老小子的计算机底层知识极其扎实,眼光毒辣得可怕。

  “太妙了……非常感谢!”杨坚飞快地在纸上记下思路,转过头真诚地道谢,“您是芝大的教授吗?”

  “你可以这么叫我。”中年男人极其享受杨坚这种恍然大悟的崇拜眼神,他伸出手,“我叫赫斯特(Professor Hearst)。我是专门负责评估……‘特殊人才’的。我看你逻辑敏锐又长得年轻帅气,根本不像是那些死读书的本科生。我手里正好有几个非常核心的校外项目,不知道你有没有兴趣跟我去办公室详细聊聊?”

  听到“赫斯特”这个名字,杨坚原本准备握手的手在半空中极其细微地停顿了半秒,随后极其自然地握了上去。

  赫斯特教授?

  杨坚的脑子里迅速过了一遍《无耻之徒》的原著剧情。那个在第一季里代表教育考试服务中心(ETS),把替人代考 SAT疯狂作弊的利普当场抓获,不仅没有报警,反而利用利普的把柄,威逼利普这个天才少年成为他私人项目免费劳动力的那个衣冠禽兽老狐狸?!

  难怪这老家伙的计算机和逻辑学知识这么丰富,他在原著里就是个打着惜才的名义,专门在各大高校里发掘并压榨天才的不良导师。

  看着赫斯特教授那副看似伯乐、实则要把他生吞活剥的伪善笑容,杨坚心里冷笑了一声。作为一个深谙职场潜规则的老鸟,他太懂这种“上赶着的买卖”背后藏着怎样的陷阱了。

  赫斯特现在看中他,只是因为他展现出了一点小聪明。如果他现在两手空空、毫无背景地跟着去了办公室,在绝对的身份和资源压制下,他顶多只能沦为赫斯特手里一个廉价甚至免费的底层牛马。

  未来或许可以利用这个老狐狸的资源进行合作,但绝对不是现在。绝对不能是在他还没有任何实质性筹码、没有真正证明自己不可替代性的时候。

  “久仰大名,赫斯特教授。您刚才的点拨简直是一针见血。”

  杨坚抽出手,脸上挂着极其得体、甚至透着几分职场精英般圆滑的微笑。他并没有急着答应,而是用一种不卑不亢的语气婉拒道:

  “您的项目听起来非常诱人。不过实在不巧,我最近手里正接了几个商业客户的底层架构重构项目,正处于赶工交付的阶段。我这人有个原则,既然接了活儿,就不想因为精力分散而砸了自己的招牌,更不想因为状态不好而敷衍了您这么重要的项目。”

  赫斯特那双藏在半框眼镜后的眼睛微微眯了起来。他原本以为这个衣着寒酸、在角落里死磕底层逻辑的亚裔年轻人,会像那些渴望得到学术大佬赏识的穷学生一样,对他抛出的橄榄枝感恩戴德。

  但他没想到,这小子拒绝得如此丝滑,而且话术老练,话里话外都在暗示“自己是个有客源、有商业价值的工程师”。

  “原来如此,那真是太遗憾了。”赫斯特眼里的那种高高在上收敛了几分,多了一丝真正的审视与兴趣。

  “不过,我希望能留下您的联系方式。”杨坚恰到好处地抛出了一个未来的鱼饵,“等我把手头的活儿彻底结清,并且把我刚才构思的这套‘非标准底层协议’做成一个完美的成品时,我会亲自去您的办公室拜访。到那时候,我想我们能聊的合作,一定会比现在有趣得多。”

  听到这番滴水不漏且充满野心的话,赫斯特终于收起了那副伪善的笑容,嘴角勾起一抹满意的弧度。

  “很好。我喜欢清楚自己价值的年轻人。”赫斯特从西装内兜里掏出一张名片,递了过去,“这是我的私人办公室电话。我期待看到你的成品。”

  “一定不会让您失望。”

  杨坚双手接过名片,看都没看一眼就塞进了口袋里。他冲赫斯特和那几个工程师挥了挥手,随后在一众开发者的争论声中,步伐从容地走出了阶梯教室。

  走出大楼,迎面吹来的芝加哥冷风让杨坚的头脑彻底清醒,心情却是一片大好。

  这波芝大线下沙龙,来得简直太值了。

  不仅白嫖到了最关键的底层技术拼图,打通了卡壳两天的逻辑死结,竟然还顺手搭上了赫斯特这只老狐狸的线。这老登虽然人品不咋样,但作为芝大的资深教授和项目负责人,他手里掌握的学术资源和行业人脉绝对是货真价实的。

  杨坚隔着夹克布料,摸了摸口袋里那张名片,眼神变得深邃而冷峻。

  现在不合作,是因为自己是个还没上牌桌的无名小卒,只能被当成廉价劳动力。但等他回去把 Log4j这个重磅炸弹搓出来,在整个软件安全圈里扬名立万时,合作蛋糕怎么分,可就不能光这老狐狸说了算了。

第十七章 接回弗兰克

  从芝加哥大学回到南区时,天色已经暗了下来。

  杨坚推开破旧的出租屋大门,连灯都没开,直接把背包往地上一扔,迫不及待地坐到了电脑前。赫斯特那个老狐狸随口点拨的思路,就像一把火,把他脑海里那些卡壳的逻辑全给点燃了。

  在开干之前,他习惯性地走到角落,拉开那台嗡嗡作响的二手冰箱,准备找点高热量的垃圾食品来应付漫长的一夜。

  结果冷藏室里空空如也,连根火腿肠的影子都没有。

  “得亏我脸皮够厚,在沙龙里蹭了足够多的免费披萨和可乐。”杨坚摸了摸还算充实的肚子,无奈地自嘲了一句。这点热量,足够他熬过今晚这最关键的冲刺了。

  他重新坐回电脑前,收起所有的杂念,十指开始在键盘上飞快地敲击。没有捷径可走,他就这么凭借着绝对的专注和毅力,哼哧哼哧地投入到了复现漏洞的苦干之中。

  彻底抛弃掉构建完整 LDAP目录的固有思维后,一切豁然开朗。他用最原始的 Socket监听写了一段极简的脚本,硬编码了包含恶意链接的 ASN.1字节流,直接向测试环境里的 Java接口发起降维打击。

  不知过了多久,窗外那一抹苍蓝的暮色如潮水般悄然隐退。浓重的夜色像打翻的砚台,缓缓浸染了天际,最终沉淀出属于深夜的深邃与沉静。

  随着杨坚按下最后一次回车键,屏幕上的代码窗口停顿了不到半秒。紧接着,测试环境的虚拟机毫无征兆地弹出了一个黑色的命令行窗口——最高控制权,拿下了!

  “搞定。接下来可以考虑怎么拿捏大厂,狠狠吃一波米了,桀桀桀。。。”

  看着那个闪烁的系统光标,杨坚长长地呼出一口浊气,眼里布满血丝,嘴角却压不住地疯狂上扬。这个在后世足以洞穿全球大半个互联网基础设施、让无数科技巨头安全团队彻夜惊醒的顶级安全漏洞,终于被他亲手完整地复现了出来。

首节 上一节 11/124下一节 尾节 目录

推荐阅读