sql注入中的union select 1,2,3....

在sql注入联合查询中,我们会碰到union select 1,2,3。那这个是什么意思了,首先先看下union select

union select 

        用来合并两个或多个 SELECT 语句的结果集。比如这里新建了两个表,users和users2

users表如下

users2如下

联合查询,即查询users表中的name字段的值和查询users2表中的address字段的值,将结果一起返回

注意:union select只能查询两个表中共同都有的字段,如果一个字段在另外一个表中没有,就会报错

如users表比users2表多了school字段,查询users表中的school和users2表中的address,因为users2表中没有school字段,所以报错

那select 1,2,3什么意思了?

select 1,2,3...

       select直接加数字串时,可以不写后面的表名,那么它输出的内容就是我们select后的数字,这时我们写的一串数字就是一个数组(或1个行向量),这时select实际上没有向任何一个数据库查询数据,即查询命令不指向任何数据库的表。返回值就是我们输入的这个数组,这时它是个1行n列的表,表的属性名和值都是我们输入的数组,如下图.select 之后可以接一串数字:1,2,3…只是一个例子,这串数字并不一定要按从小到大排列,也不一定从1开始,这串数字的值和顺序是任意的,甚至可以是重复的,如:11,465,7461,35 或11,11,11,11,数字串的长度也是任意的,我们想获得多少列的数据,就写多少个数字

       那么这个东西有什么用呢?在SQL注入时,我们可以利用它来进行一个快速测试,在Union注入时,如果我们通过测试已经知道了前面语句的字段数,就可以写入union 注入语句,但存在一个问题,我们虽然可以通过注入获得想要的信息,但这些信息必须能够返回到我们手中,对于网页来说,如何能够让数据回显是至关重要的。例如一个网站的参数传递执行的查询有3个字段,很可能这些字段不是都显示在网页前端的,假如其中的1或2个字段的查询结果是会返回到前端的,那么我们就需要知道这3个字段中哪两个结果会回显,这个过程相当于找到数据库与前端显示的通道。如果我们直接输入查询字段进行查询,语句会非常冗长,而且很可能还需要做很多次测试,这时候我们利用一个简单的select 1,2,3,根据显示在页面上的数字就可以知道哪个数字是这个“通道”,那么我们只需要把这个数字改成我们想查询的内容(如id,password),当数据爆破成功后,就会在窗口显示我们想要的结果。
       如上所述,select直接加数字串不指向任何数据库的表,那么如果在后面加上数据库表的名字呢?结果又会怎么样,我们做一个实验如下图所示:我们查询一下users2表中有什么内容,这个表是什么结构

users2如下

进行查询,select 1,22,34,45,65 from users2


       users2表有四个字段,可以看出行行代表 表格的字段(id,name,age,address)。原来的id,name等属性被替换成了这些数字串,而且我们输入的数字串长度是任意的,输入几个数字,就会出现几个属性,也就是说返回表的列数是等于我们输入的数字个数的,而行数与原数据库表的结构保持一致,原本有4行数据,输入数字串后仍为4行。

猜你喜欢

转载自blog.csdn.net/qq_44159028/article/details/114820256
今日推荐