起因
一次滲透過程中目標使用的SQL Server有聯合注入,發現使用union all
不報錯,union
報錯,同時還有一個就是字段的類型,發現類型不對也會報錯,貼張圖
union+all+select+123123,1,'2','3',null,null,null--+- 不報錯
union+select+123123,1,'2','3',null,null,null--+- 報錯
注意點:
1 union
結果集種的列名總是等於第一個select語句中的類型。
2 union
內部的select
語句必須擁有相同數量的列,列也必須有相似的數據類型。同時,每條select語句的列的順序必須相同。
3 如果子句中有 order by,limit
需要用括號()
包起來,推薦將order by,limit
放到所有子句之后,即對最終合並的結果來排序或篩選。
union 和union all的區別:
union聯合
的結果集不會有重復值,如果要有重復值,則使用union all
union會自動壓縮多個結果集合中重復的結果,使結果不會有重復行,union all 會將所有的結果共全部顯示出來,不管是不是重復。
union:會對兩個結果集進行並集操作,不包括重復行,同時進行默認規則的排序。
union all:對兩個結果集進行並集操作,包括重復行,不會對結果進行排序。
1.sql Union用法
select 字段1 from 表名1 Union select 字段2 from 表名2;
2.sql Union All用法
select 字段1 from 表名1 Union all select 字段2 from 表名2;