引言
像许多人一样,Sam Curry 和我花了很多时间在机场安检排队。如果你经常坐飞机,可能会在安检处看到一条特殊的通道,叫做 Known Crewmember(KCM,机组人员已知身份系统)。KCM 是 TSA 的一个项目,允许飞行员和空乘人员绕过安检,即使是乘坐国内个人航班也是如此。
KCM 的流程相当简单:员工使用专用通道,出示他们的 KCM 条形码,或者向 TSA 安检员提供他们的员工号码和所属航空公司。需要出示多种形式的身份证件,同时 TSA 安检员的笔记本电脑会验证该员工在航空公司的就业状态。如果验证成功,员工可以完全不经过任何安检直接进入安全区域。
还有一个类似的系统用于驾驶舱门禁,叫做 Cockpit Access Security System(CASS,驾驶舱门禁安全系统)。大多数飞机在驾驶舱内飞行员座位后方至少有一个 jumpseat(备用座位)。当飞行员需要通勤或旅行时,他们并不总能坐上付费座位,因此可以使用 jumpseat。CASS 允许航班的登机口工作人员验证申请 jumpseat 的人员是否是一名经过授权的飞行员。登机口工作人员随后可以告知航班机组人员,该申请者已通过 CASS 认证。
就业状态验证是这些流程中最关键的环节。如果个人目前不为航空公司工作,他们没有经过背景调查,就不应该被允许绕过安检或进入驾驶舱。该流程还负责返回机组人员的照片,以确保授权访问的是正确的人。那么,当每家航空公司都使用不同的系统来存储员工信息时,这一切是如何运作的呢?这正是我们所好奇的,也是故事变得有趣的地方……
ARINC
ARINC(柯林斯航空航天公司的子公司)似乎受 TSA 委托运营 Known Crewmember 系统。ARINC 运营着几个核心组件,包括一个供飞行员和空乘人员查询自己 KCM 状态的在线网站,以及一个用于在不同航空公司之间路由授权请求的 API。每家航空公司似乎都运行着自己的授权系统来参与 KCM 和 CASS,并与 ARINC 这个"中心"进行交互。
TSA 和航空公司可以向 ARINC 发送诸如 CockpitAccessRequest 和 CrewVerificationRequest 之类的请求,ARINC 随后将其路由到相应的航空公司系统并接收响应。目前有 77 家航空公司 参与 KCM。虽然大型航空公司可能已经构建了自己的系统,但小型航空公司是如何响应这些请求以参与 KCM 或 CASS 的呢?
FlyCASS.com
在寻找实际运行授权系统的供应商时,我们发现了一个名为 FlyCASS 的网站,该网站向小型航空公司推销一种基于网页的 CASS 接口。出于好奇,我们注意到每家航空公司都有自己的登录页面,例如 Air Transport International(8C)的页面位于 /ati。由于只有一个登录页面暴露在外,我们以为自己碰壁了。
但为了确保万无一失,我们在用户名中尝试输入一个单引号作为 SQL 注入测试,并立即收到了一个 MySQL 错误:
糟糕。
这是一个非常不好的迹象,因为用户名似乎被直接插入了登录 SQL 查询中。果然,我们发现了 SQL 注入漏洞,并能够使用 sqlmap 确认该问题。使用用户名 \' or \'1\'=\'1 和密码 \