SQL注入-联合查询(union)注入
SQL注入-联合查询(union)注入
Wells联合查询介绍
联合查询语句:
1 | select a from b union select c from d where e; |
使用条件:页面对查询语句有回显查询数据
注意事项:
使用联合查询注入时,位于union前的语句不要出现查询的结果(后端只选择查询结果第一行的情况,若前一部分可以被查询,则联合查询的部分不会回显)
若前部分有结果,可在每次的
union
查询后添加语句limit n,1
(n根据题目实际进行切换)起到回显联合查询结果的作用注:limit num1,num2的作用为从第num1行开始显示num2行内容
所需函数
1.concat()
函数
concat()
函数:将多个不同字段的字符串连接成一个字符串。
1 | concat(str1,str2) #语法 |
注意:返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
2.group_concat()
函数
group_concat()
将多个同个字段的字符串连接成一个字符串。
1 | group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc] [separator ‘分隔符’]) #语法 |
注入流程
判断类型
字段数
联合查询(
union
),必选保证union
前后两个查询的字段数一致,即两个查询结果有相同的列数,因此要对前一个的字段数进行判断。可以使用order by 数字
进行判断注:
order by n
表示查询结果通过第n个字段进行排序使用示例:
1
id=1' order by 1 --+
使用时不断增大数字,假设直至第
n
个出现错误,从而判断出字段数为n-1
回显点
知道字段数之后,我们还需要确定在哪个字段是回显到页面上的
直接根据字段数,联合查询数字
1,2,3...
,以三个字段数为例1
id=1' order by union select 1,2,3 --+
从页面上查找回显的是哪个数字
爆库名、表名,字段名,数据
使用union
语句在回显位置导出数据库中的数据,结合SQL注入-基础 | WELLS Blog中的SQL注入常用基础语句
以2位置为回显点,爆表名为例
1 | id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+ |
评论
匿名评论
✅ 你无需删除空行,直接评论以获取最佳展示效果