聚焦源代码安全,网罗国内外最新资讯!
编译:奇安信代码卫士团队
本周,研究员 Eugene Lim 在星巴克企业数据库中发现了一个严重的 SQL 注入漏洞,影响数据库中存储的近百万金融记录,并因此获得星巴克为严重漏洞提供的最高赏金4000美元。Lim 于4月8日发现漏洞,星巴克在2天内修复。HackerOne在8月6日公开漏洞报告。Lim 表示,他开始检查目标端点中的文件上传漏洞时发现他正在运行微软 Dynamics AX 企业资源规划 (ERP) 平台,于是测试了端点中的 XXE 缺陷。如下是他发布的具体漏洞查找过程:我最开始是通过常见的子域名枚举发现这个端点的。从表面来看,它看似是一个非常好的目标:一个简单的 HTML 文件上传表单。我开始通过 PHP shell 等测试是否存在不受限的文件上传漏洞,但我很快从出错信息中获悉,虽然这些文件被发送给服务器,但它们是被当做 XML 文件处理的而并未保存在服务器上。幸运的是,这些出错信息帮助我构造了一个格式适当的且服务器接受的 XML 文件。由于该文件期待的节点是 MainAccount、Credit、Debit、Invoice 等等,因此它看似是某种会计数据库条目。另外,这些出错信息包含对微软 Dynamics AX(一款企业金融/会计软件平台)的参照。于是我开始测试 XXE 攻击。然而,这些外部实体似乎遭拦截,尽管我多次尝试绕过,仅实现拒绝服务后果。这个结果不够好,因此经过几次尝试后我最终转移至其它目标。一个多月后,我开始重新思考这个问题。幸运的是这个目标还在线。这次我认为如果把将 XML 输入输入到数据库,那么我应该测试是否存在 SQL 注入漏洞。具体而言,MainAccount 看起来有戏,因为它接受数字 ID 如 <MainAccount>123456</MainAccount>而且可能用于SQL 查询 WHERE 语句中。然而,省略符 (‘) 似乎被适当地转义了。稍作测试后我发现了我的错误:XML 格式禁止包括省略符在内的某些字符。如要包含,必须将省略符作为转义实体输入。我不能使用 <MainAccount>123456’</MainAccount>,而必须使用<MainAccount>123456'</MainAccount>。服务器立即返回一个database error 信息,这说明我的路子是对的!又进行了一些手动测试后,我发现可以构造基于时间的 SQL 注入。之后我转向标记为–tamperhtmlencode的sqlmap来自动化攻击。经过几分钟焦灼的等待后,sqlmap 确认了利用代码并返回数据库版本:Microsoft SQL Server 2012。我成功了!因此我手里有了一个 SQL 注入漏洞,但是如果数据库未被使用或者可以忽略不计怎么办?于是我决定测试三件事情:数据库中的数据类型、数据量以及数据的新近度。然而,我很快遇到了障碍:作为企业数据库,微软 Dynamics AX 非常庞大:快速检查结果显示该数据库中有数千个表。我必须专注于主表,但从哪里开始呢?幸运的是,微软提供了关于 Dynamics AX的在线文档。经过一番研究后我发现了默认主表以及相关列。几分钟后,答案浮出水面:截至去年,有近百万条记录中包含真实的会计信息。完美!我立即停止测试并开始编写漏洞报告。不要做井底之蛙。不要因为它是文件上传就只关注上传一个反向 shell;不要因为它接受 XML 文件就只关注 XXE。做好笔记并重新审视之前的目标。我挖的很多漏洞都是源自重新查看老旧的端点。适当放一放可以发现新的攻击路径。感谢星巴克团队以及HackerOne 诊断人员的快速响应和良好沟通!
原文链接
https://hackerone.com/reports/531051
https://www.securityweek.com/sql-injection-vulnerability-exposed-starbucks-financial-records
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点,转载请注明“转自奇安信代码卫士 www.codesafe.cn”
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。