事情是怎么闹起来的
话说这事,还得从我儿子那破机器人大赛说起。通知是周二发的,周五就要到广州。这SM航空的票,我当时就觉得不对劲。我去官网一查,好家伙,直飞的票价,大人小孩加起来快一万五了。这哪里是坐飞机,这是在抢钱。我当时就给老婆保证,三天之内,我必须扒拉出一套半价的票,不然这老脸就丢尽了。
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址:www.gm89.me
我深知这些大航空公司的尿性,他们对外展示的价格,永远都是给那些没时间、没精力去折腾的人看的。真正的好东西,都藏在他们系统最深处,等着内部人或者特定的渠道去挖。既然是“最新”的系统,肯定就有最新的漏洞。
动手前的准备工作
我立马就动手了。我知道那些票务平台,比如去哪儿,携程,他们展示的只是“公众库存”,那全是残羹冷炙。SM航空自己肯定还有一套私有的。我第一步就是翻出我那台已经落灰的老古董笔记本,那机器配置不高,但跑起抓包工具来比我新买的快多了,干净。
我没有直接去搞那些复杂的接口验证,我知道那会浪费时间。我的目标很明确:找到他们的“内鬼”通道。我先是注册了一个新的开发者账号,当然不是真的,就是用临时邮箱套了个壳子,去爬他们的文档。文档没啥用,全是废话,但给了我一个启发:他们强调了几个新的API版本,专门服务于企业大客户和旅行社。好家伙,路子来了。
我马上开始嗅探SM航空APP的流量。我用代理把APP流量全引到我电脑上,然后开始抓包。抓了一晚上,眼睛都快瞎了,全是加密数据。但我发现了关键点。
具体的实践过程
我抓包抓了整整一晚上。那些加密数据一开始把我搞得头晕,但我知道,加密算法再牛,请求参数总得老实传过去。我反复比对正常查询和APP内部的几次特殊请求,终于在请求体里发现了一个隐藏的参数,叫“FareClass_Corp”。
正常用户在APP里查票,这个参数不是默认隐藏就是设置成Standard。我知道,这玩意儿就是后门钥匙。我锁定了几组关键的API接口,然后开始暴力尝试把那个Corp参数改掉。我没有瞎改,我试着输入了几个我以前在其他系统里遇到过的内部代号,比如‘T_AGENT_INT’,‘VIP_SCHEME’之类的。
- 我试着把参数改成'GUEST_A',接口直接报错,被防火墙拦了,说明他们防御了最简单的猜想。
- 我换成了'T_AGENT_INT',结果界面刷新了一下,返回的数据量大了好几倍,里面出现了大量状态显示为“不可售”的特殊仓位。
- 我用我一个老同事给我的一个过期的内部员工代码,加到请求头里,虽然不能验证身份,但是足够让我看到那个内部价格表了。
这个内部价格表显示,周五飞广州的票,如果通过这种内部代号提交,只要2500块一张,而且是经济舱全价票的服务。我立马写了个简单的脚本,模仿一个小型合作旅行社的查询请求,然后用我的临时开发者账号去绕过了他们的前端验证,直接把订单信息推送到他们最新的预订系统里。我用的不是我的身份证,是老婆的,以防万一。
我当时手都在抖,就怕弹出来个“验证失败”。结果,系统反馈了一个临时的订单号,状态是“待付款”。我马上用微信支付完成了付款,整个过程不到三分钟。
结果与心得
第二天早上,我直接收到SM航空的短信,说出票成功了。我马上登录官网去查,果然,行程单清清楚楚,价格是系统结算后的最低价。省了快一万块钱,我老婆看我的眼神都不一样了。
这件事告诉我一个道理:所有看起来“自动化”的、号称“最新”的系统,背后都有人留下的后门,尤其是这种大型航空公司,技术栈复杂得一塌糊涂,顾得了前面,顾不了后面。他们总是在修补用户看得见的前端Bug,但后端那些老接口、内部通道,永远是他们懒得去动的地方。
SM航空最新的这个系统看着唬人,漏洞百出。他们对前端的身份验证做得严,但后端API里到处都是遗留接口,随便一套组合拳就能打穿。所以说,遇到高价票别急着骂娘,静下心来研究一下他们的数据流和请求参数,总能找到便宜的口子。
