攻防实战复盘
医疗API脱库:一次SQL注入的暗夜狩猎
2026年08月17日 · 周一
真实攻击复盘 高级
场景:2026年8月13日凌晨,某三甲医院互联网医院系统遭攻击,患者主索引与检验数据被批量窃取。攻击者利用挂号API接口的SQL注入漏洞,绕过WAF直取数据库。
攻击 / 事件时间线
1
初始访问
攻击者扫描发现医院对外暴露的/api/v1/appointment/query接口存在时间盲注。通过构造AND SLEEP(5)的联合查询,确认数据库类型为MySQL 5.7。随后利用UNION SELECT提取当前数据库用户与版本信息,确认具备FILE权限。
sqlmapBurp Suite
2
权限提升与数据探测
攻击者通过INFORMATION_SCHEMA枚举数据库,定位到存储患者敏感信息的patient_db库。利用LOAD_FILE()函数读取数据库配置文件,获取了用于业务联动的只读账号app_ro的加密密码,并通过crackstation完成离线破解。
sqlmapHashcat
3
横向移动与数据窃取
使用破解的app_ro账号登录内网跳板机,发现数据库白名单机制仅允许特定IP访问。攻击者通过DNSLOG外带数据,将patient_basic_info表(含姓名、身份证号、手机号)分批以CONCAT方式拼接后,利用SELECT ... INTO OUTFILE写入临时目录,再通过HTTP请求逐条拉取。
DNSLogPython脚本
4
告警触发与痕迹清理
凌晨3:42,数据库审计日志触发异常规则——单小时内SELECT次数超过500次且目标表为敏感表。攻击者检测到会话被Kill后,立即删除mysql.general_log中的相关记录,并利用pt-kill工具模拟正常慢查询干扰溯源。
pt-killsed
蓝队视角 · 发现与处置
SOC值班人员收到数据库审计平台告警后,立即通过堡垒机查看数据库会话列表,发现来自非业务IP的持续查询。蓝队第一反应是阻断源IP,但攻击者已通过代理池轮换。随后调整策略:在数据库层开启general_log并定向抓取该账号的SQL语句,同步抓取WAF访问日志,通过sqlmap的UA特征锁定攻击者使用的扫描器指纹。最终在30分钟内定位到攻击入口为挂号API,紧急下线该接口并升级WAF规则,阻断所有含UNION关键字的请求。
涉及关键技术 / 工具
时间盲注与UNION注入DNSLOG数据外带数据库审计日志分析
防护经验总结
  • 对对外暴露的API接口强制使用参数化查询,并在网关层部署SQL注入语义分析规则,而非仅依赖正则匹配。
  • 数据库账号遵循最小权限原则,禁止业务账号具备FILE权限,并对敏感表开启独立审计策略,设定单会话查询次数阈值。
  • 建立敏感数据访问的实时告警通道,将数据库审计日志直接接入SOC平台,缩短从异常行为到处置的MTTD。
#SQL注入#医疗数据泄露#数据外带#API安全
数据安全早知道 · 攻防实战专栏
⚠️ 免责声明
本文内容源自公开披露的安全事件或高仿真模拟场景,所有涉及的组织、系统、技术细节均经过脱敏处理,仅供安全学习与交流参考,不构成任何技术指导或合规建议。
数安早知道
🔗 数据安全与信息安全知识库 datasafe.website
— 点击上方链接访问知识库,获取更多安全资讯 —