HEMA网站盲SQL注入漏洞分析与利用
背景介绍
现代网站几乎都使用数据库。当用户请求数据时,服务器应用会构造查询语句发送给数据库。这些查询通常使用SQL语言。在构造数据库查询时,服务器应用需要考虑请求用户的访问权限,只返回用户有权访问的数据。
但如果这个过程存在漏洞,允许攻击者操纵发送到数据库的查询语句呢?可能会导致数千条学校记录泄露、私人财务数据曝光甚至防火墙被攻破。SQL注入(SQLi)因此被视为严重漏洞,在漏洞赏金计划中往往提供最高奖励。
目标侦察
作者从网站的照片项目部分开始测试,该功能允许用户创建照片项目并打印照片。HEMA为其服务使用不同的子域名,每个都有独立的API。
在侦察过程中,作者发现一个有趣的端点:
|
|
漏洞发现
作者特别关注查询字符串和POST参数,寻找可能直接拼接到SQL查询的线索。当在orderby参数值中插入单引号时,服务器返回SQL错误,显示使用了PDO(PHP数据对象),甚至包含部分SQL查询片段。
漏洞利用
SQLMap检测
使用SQLMap工具检测发现orderby参数存在三种SQL注入攻击方式:
- 堆叠查询:在查询中添加自定义查询
手工Payload构造
由于SQLMap遇到防火墙限制,作者手工构造Payload:
|
|
这个Payload使用FROM和FOR替代被防火墙拦截的逗号,通过Burp Suite Intruder自动化测试字符集。
概念验证
通过分析响应时间(超过8秒的响应表示字符匹配),成功提取出数据库用户名:hema_live@10.0.102.192
影响评估
发现SQL注入漏洞意味着数据库可能已遭泄露。大多数应用在应用层进行访问控制检查,而不是在数据库层面,这意味着攻击者可能获得无限制的数据库读写权限。
解决方案
- 永远不要信任客户端输入
- 在查询中使用客户端输入时实施适当的检查
- 采用多种技术保护查询安全
时间线
- 2020年5月11日:发现漏洞,供应商部署热修复
- 2020年5月15日:HEMA确认漏洞并奖励100欧元礼品卡
- 2020年8月6日:报告发布
奖励
100欧元HEMA礼品卡+额外奖金(用于报告5个反射型XSS漏洞、1个SQL注入漏洞和其他多个漏洞)
本文详细展示了从漏洞发现到利用的完整过程,为Web安全研究人员提供了宝贵的技术参考。