HEMA网站盲SQL注入漏洞分析与利用

本文详细记录了在fasteditor.hema.com发现的盲SQL注入漏洞。作者通过参数分析、SQLMap工具检测和手工Payload构造,成功获取数据库用户名和服务器IP地址。文章包含完整的漏洞利用过程、技术细节和修复建议,是学习SQL注入实战的优质案例。

HEMA网站盲SQL注入漏洞分析与利用

背景介绍

现代网站几乎都使用数据库。当用户请求数据时,服务器应用会构造查询语句发送给数据库。这些查询通常使用SQL语言。在构造数据库查询时,服务器应用需要考虑请求用户的访问权限,只返回用户有权访问的数据。

但如果这个过程存在漏洞,允许攻击者操纵发送到数据库的查询语句呢?可能会导致数千条学校记录泄露、私人财务数据曝光甚至防火墙被攻破。SQL注入(SQLi)因此被视为严重漏洞,在漏洞赏金计划中往往提供最高奖励。

目标侦察

作者从网站的照片项目部分开始测试,该功能允许用户创建照片项目并打印照片。HEMA为其服务使用不同的子域名,每个都有独立的API。

在侦察过程中,作者发现一个有趣的端点:

1
https://fasteditor.hema.com/api/user/<userID>/products?offset=0&limit=8&orderby=id+DESC

漏洞发现

作者特别关注查询字符串和POST参数,寻找可能直接拼接到SQL查询的线索。当在orderby参数值中插入单引号时,服务器返回SQL错误,显示使用了PDO(PHP数据对象),甚至包含部分SQL查询片段。

漏洞利用

SQLMap检测

使用SQLMap工具检测发现orderby参数存在三种SQL注入攻击方式:

  • 堆叠查询:在查询中添加自定义查询

手工Payload构造

由于SQLMap遇到防火墙限制,作者手工构造Payload:

1
orderby=width+DESC;SELECT+(CASE+WHEN+(SUBSTRING((user())FROM(1)FOR(1))='§h§')+THEN+SLEEP(8)+ELSE+SLEEP(1)+END)

这个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安全研究人员提供了宝贵的技术参考。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计