1. SQL注入基础概念与原理剖析
SQL注入(SQL Injection)是Web安全领域最常见也最危险的漏洞之一。简单来说,就是攻击者通过构造特殊的输入,改变原有SQL语句的逻辑结构,从而绕过安全限制,获取或篡改数据库中的敏感信息。
1.1 SQL注入的本质与危害
SQL注入之所以能够成功,核心原因在于应用程序将用户输入直接拼接到SQL语句中执行。想象一下,如果图书馆的管理系统允许访客直接在借阅记录本上写SQL语句,那会是什么后果?攻击者可以:
- 查看所有用户的借阅记录(数据泄露)
- 修改自己的借阅期限(数据篡改)
- 甚至删除整个图书目录(数据破坏)
在实际Web应用中,这种漏洞可能导致:
- 用户凭证泄露(如获取管理员账号密码)
- 敏感业务数据外泄(客户信息、交易记录等)
- 整个数据库被控制(通过执行系统命令)
1.2 SQL注入的常见触发场景
根据我多年的安全测试经验,SQL注入最常出现在以下位置:
- 搜索框(特别是带筛选条件的)
- 登录表单
- URL参数(如?id=123)
- Cookie值
- HTTP头部信息(如User-Agent)
这些地方如果未做严格的输入过滤和参数化处理,就可能成为攻击的入口点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Union注入攻击全流程解析
Union注入是SQL注入中最经典也最实用的技术之一。它利用SQL的UNION操作符,将恶意查询的结果合并到原始查询结果中显示出来。
2.1 Union攻击的前提条件
不是所有SQL注入场景都适合使用Union攻击。要成功实施Union注入,必须满足以下条件:
- 注入点位于SELECT语句中
- 应用程序会返回查询结果(回显型注入)
- 原始查询和新查询的列数相同
- 对应列的数据类型兼容
提示:如果页面没有直接显示查询结果,但会返回数据库错误信息,可以考虑使用基于错误的注入技术。
2.2 确定查询列数的三种方法
在进行Union注入前,我们必须先确定原始查询返回的列数。以下是三种常用方法:
2.2.1 ORDER BY递增法
这是最可靠的方法,通过不断递增ORDER BY后的数字,直到引发错误:
sql复制' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3--
当数字超过实际列数时,数据库会返回类似"Unknown column '4' in 'order clause'"的错误。
2.2.2 UNION SELECT NULL填充法
通过不断添加NULL值来测试:
sql复制' UNION SELECT NULL--
' UNION SELECT NULL,NULL--
' UNION SELECT NULL,NULL,NULL--
直到不再报"queries have different nu
