文章总结: 本文详细解析了SQL注入的各种类型,涵盖按注入位置、信息反馈、攻击技术、数据库类型及危害程度等多个维度的分类。重点介绍了GET/POST注入、盲注、堆叠查询等核心概念,并结合Sqli-labs实例说明了攻击原理与防御难点。文章总结了SQL注入的核心在于未验证输入的拼接,建议读者深入理解各类注入特征以提升防御能力。
综合评分: 75
文章分类: WEB安全,漏洞分析,渗透测试
SQL注入类型全解析:从基础到高级的分类详解
武文
武文学网安
2025年12月24日 03:10
四川
大家好,我是武文。
这段时间一直在研究学习SQL注入,发现SQL注入类型繁多,需要了解的只是相对比较复杂,今天先来仔细了解一下SQL注入有哪些类型。
一、SQL注入分类概述
SQL注入是Web安全领域最常见、危害最大的漏洞类型之一。根据攻击方式、利用技术和影响范围的不同,SQL注入可以分为多个类别。理解这些分类对于防御和测试都至关重要。
分类方式多种多样,主要有以下几种分类方式:按注入位置分类 、按信息反馈分类、 按攻击技术分类、按数据库类型分类 、按危害程度分类 、按利用复杂度分类
二、按注入位置分类
2.1 URL参数注入(GET注入)
特点:参数通过URL传递,可见且易被修改。前几天学习的在地址栏修改参数的盲注操作就属于这一类。SQL注入实战——布尔盲注,Sqli-labs第8关为例从原理到脚本实现
攻击方式:
- 直接在浏览器地址栏修改参数
- 使用Burp Suite拦截修改请求
- Python脚本自动化测试
实际场景:商品详情页、文章详情页等通过ID查询的场景。
2.2 表单数据注入(POST注入)
特点:数据通过请求体发送,相对隐蔽。常用于登录框、搜索框等表单提交。
Sqli-labs实战:以Less-11为例,经典的登录框注入。攻击者在用户名或密码字段中输入SQL语句,绕过登录验证或获取敏感数据。
攻击演示:在登录表单的用户名字段输入admin'--,密码留空,可以绕过密码验证直接登录。
特别注意事项:
- POST数据不会出现在浏览器地址栏
- 需要使用抓包工具查看和修改
- 需要了解表单字段名称
实际场景:用户登录、注册、搜索、评论提交等表单操作。
2.3 HTTP头部注入
特点:利用HTTP头部的用户可控字段进行注入,如User-Agent、Referer、X-Forwarded-For等。
Sqli-labs实战:以Less-18为例,User-Agent头部注入。后端记录User-Agent到数据库时未进行过滤,导致注入。
易受攻击的HTTP头部:
- User-Agent:浏览器标识信息
- X-Forwarded-For:客户端真实IP地址
- Referer:请求来源页面
- Cookie:会话信息
攻击原理:应用程序将HTTP头部信息记录到数据库或用于其他SQL查询,但没有进行适当过滤。
2.4 Cookie注入
特点:攻击存储在Cookie中的数据,常用于用户身份验证和会话管理。
Sqli-labs实战:以Less-20为例,Cookie中的uname参数注入。攻击者修改Cookie值,植入SQL注入代码。
攻击方式:
- 使用浏览器开发者工具修改Cookie
- 使用抓包工具拦截请求修改Cookie
- 编写脚本自动化修改
特殊性:
- 攻击持久化,Cookie可能长期有效
- 看起来像是合法用户请求
- 容易实现自动化攻击
2.5 二阶注入(Second-Order Injection)
特点:数据先被存储,后被使用。攻击分为两个阶段。
Sqli-labs实战:以Less-24为例,经典的注册+修改密码组合攻击。
攻击流程:
- 第一阶段:注册用户时,用户名包含恶意SQL代码(如
admin'--) - 第二阶段:修改密码时,后端从数据库取出用户名并拼接SQL,导致恶意代码执行
- 结果:成功修改其他用户(如admin)的密码
防御难点:
- 输入时转义,但使用时未转义
- 多个功能模块间数据共享
- 难以通过单次输入检测发现
2.6 文件上传注入
特点:通过文件名或文件内容进行注入。
实际攻击场景:
- 文件上传功能,文件名存入数据库
- 数据导入功能(CSV、Excel文件导入)
- 图片属性读取(如EXIF信息)
攻击方式:
- 文件名包含SQL语句
- 文件内容包含恶意数据
- 利用文件解析漏洞
三、按信息反馈分类
3.1 联合查询注入(Union-Based)
特点:直接显示查询结果,最直观的注入类型。
Sqli-labs实战:Less-1是最佳示例。攻击者使用union语句将恶意查询结果与原始查询结果合并显示。
攻击步骤:
- 确定查询列数(使用order by)
- 找到显示位(使用union select 1,2,3…)
- 获取敏感数据(替换显示位为所需查询)
优势:
- 一次性获取大量数据
- 结果直观易读
- 自动化程度高
3.2 显错注入(Error-Based)
特点:通过数据库错误信息泄露敏感数据。
Sqli-labs实战:以Less-5为例,利用updatexml、extractvalue等函数触发错误并显示数据。
常用函数:
- updatexml():XML处理函数,参数错误时泄露数据
- extractvalue():XML路径提取,路径错误时泄露数据
- floor()+rand():双查询错误,分组时产生错误
优势:
- 不需要union语句
- 直接显示在错误信息中
- 可以获取函数执行结果
3.3 布尔盲注(Boolean-Based Blind)
特点:通过页面真假状态推断数据。
Sqli-labs实战:以Less-8为例,页面只有”数据存在”和”数据不存在”两种状态。
攻击原理:
- 构造SQL条件语句
- 根据页面是否显示数据判断条件真假
- 通过二分法等技巧逐步猜解数据
应用场景:
- 登录页面只有”登录成功/失败”
- 搜索页面只有”有结果/无结果”
- 任何只有两种状态的页面
3.4 时间盲注(Time-Based Blind)
特点:通过响应延迟判断条件真假。
Sqli-labs实战:以Less-9为例,无论输入什么,页面都显示相同内容,但响应时间不同。
攻击方法:
- 使用sleep()、benchmark()等函数制造延迟
- 根据响应时间判断条件是否成立
- 使用二分法提高猜解效率
适用情况:
- 页面无任何数据回显
- 错误信息被完全屏蔽
- 无法通过页面内容判断
3.5 带外数据注入(Out-of-Band)
特点:通过DNS、HTTP等外部通道获取数据。
攻击原理:
- 构造SQL语句触发外部网络请求
- 通过DNS查询、HTTP请求等方式外传数据
- 在攻击者控制的服务器上接收数据
常用技术:
- DNS带外:利用load_file()触发DNS解析
- HTTP带外:写入文件到Web目录然后访问
- SMB带外:Windows环境下使用文件共享
四、按攻击技术分类
4.1 堆叠查询注入(Stacked Queries)
特点:执行多条SQL语句。
Sqli-labs实战:以Less-38为例,可以在一个请求中执行多条SQL语句。
危害:
- 插入、更新、删除数据
- 创建新用户、修改权限
- 执行系统命令(特定数据库)
数据库支持:
- SQL Server、PostgreSQL完全支持
- MySQL需特定配置支持
- Oracle通常不支持
4.2 编码绕过注入
特点:使用各种编码绕过WAF和过滤机制。
Sqli-labs实战:以Less-25为例,过滤了”or”和”and”关键词。
绕过方法:
- 大小写混合:Or、aNd
- 双写绕过:oorr、aanndd
- 符号代替:|| 代替 or,&& 代替 and
- 注释分隔:uni//on sel//ect
宽字节注入:以Less-32为例,利用GBK等宽字符编码绕过转义。
4.3 内联查询注入
特点:在原有查询中嵌套子查询。
攻击方式:
- 使用子查询代替union
- 在where条件中嵌套查询
- 通过条件判断逐步获取数据
优势:
- 不受union列数限制
- 可以嵌入复杂逻辑
- 适合盲注场景
五、按数据库类型分类
5.1 MySQL注入
Sqli-labs环境:所有关卡基于MySQL数据库。
特有功能:
- 信息收集:version()、user()、database()
- 文件操作:load_file()、into outfile
- 系统函数:sleep()、benchmark()
- 系统表:information_schema
5.2 其他数据库差异
虽然Sqli-labs主要针对MySQL,但实际中还需了解:
SQL Server:
- 系统表:sysobjects、sysdatabases
- 扩展存储过程:xp_cmdshell
- 特有函数:quotename()、charindex()
PostgreSQL:
- 系统表:pg_tables、pg_columns
- 特有函数:pg_sleep()、current_database()
Oracle:
- 系统表:all_tables、all_tab_columns
- 双查询必需:from dual
- 复杂语法结构
六、按危害程度分类
6.1 信息泄露型
- 获取数据库结构
- 读取敏感数据
- 获取系统信息
6.2 数据篡改型
- 修改用户数据
- 篡改业务数据
- 插入恶意记录
6.3 权限提升型
- 绕过认证机制
- 获取管理员权限
- 创建后门账户
6.4 系统控制型
- 执行系统命令
- 读写服务器文件
- 完全控制服务器
总结
SQL注入类型虽然繁多,但核心原理一致:未经验证的用户输入被拼接到SQL语句中执行。如此多的种类,绝大部分还没尝试过,接下来的时间将逐步尝试并分享给大家,希望大家多多关注支持
。
#
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:武文学网安 武文《SQL注入类型全解析:从基础到高级的分类详解》