MYSQL

SQL:结构化查询语言(Structured Query Language)
SQL的功能:查询数据库、插入、更新、删除和查询数据库并返回结果。

SQL语言分类:
DDL 数据定义语言(Data Definition Language)
DML 数据操作语言(Data Manipulation Language)
DCL 数据控制语言(Data Control Language)

DDL:数据定义语言
功能:用于数据库、表、视图、函数、存储过程或其他对象的创建、删除或者修改的操作。

create  创建
alert   修改
drop    删除

创建数据库(指定默认字符集:default charset utf8):
create database test1 default charset utf8;

删除数据库:
drop database test1;

创建表:
create table user(uid int(11), uname varchar(255), passwd varchar(255));

查看表结构:
show create table user;
desc user;

删除表:
drop table user;

修改表(添加字段):
alter table user add column mobile bigint;

删除字段:
alter table user drop column mobile;

修改字段类型:
alter table user modify column passwd int;

修改字段顺序(修改uid为第一位):
alter table user change uid uid int(11) first;

修改uname为username,类型为varchar,放到uid后边(after指定字段位置):
alter table user change uname username varchar(32) after uid;

修改表名(user改为newuser):
alter table user rename newuser;

DML:数据操作语言
功能:主要是对表、视图等对象进行查询、插入、更新和删除操作。

select   查询
insert   插入
update   更新
delete   删除

在user表中插入一条记录:
insert into user(uid,username,passwd,regtime) values(1,'zhangsan','123465',20200916);

插入指定字段:
insert into user(uid,username) values(2,'lisi');

查看warning信息:
show warnings;

拷贝一张和user表命名为user2:
create table user2 as select * from user;

删除一条记录:
delete from user2 where username='lisi';

清空整张表:
delete from user2;

关联删除:
delete a,b from emp a,dept b where a.dept_no=b.dept_no and a.dept_no='d006';

复制user表中的数据插入到use2表中:
insert into user2 select * from user;

更新一条记录
update user2 set glod=1000 where uid=1;

正向排序
select * from user order by uid;

倒序:
select * from user order by uid desc;

限制前10行
select * from user order by 1 limit 10;

查找user表与user2中相同uid记录:
select *from user where uid in(select uid from user2);

关联查询inner join...on(内连接):
返回a,b表同时存在的uid的记录
select a.name,b.mobile from game_user a inner join game_user_ext b on a.uid=b.uid;

left join...on(左连接):
a表为左表,返回a全部数据以及对应在b表中的值

right join...on(右连接):

union联合查询(条件:两表字段相同)
select * from user union select * from user2;

查询mysql.user表(用户字典):
select host,user,password from mysql.user;

DCL:数据控制语言
功能:主要是DBA来管理权限使用的。注入的目标是提升权限,或者授权一个具有较高权限的临时账户。

授权(创建一个从任意IP登录的超级权限用户):
grant all privileges on *.* to admin@'%' identified by 'abc';
刷新权限:flush privileges;
验证:mysql -h 192.168.233.128 -uadmin -pabc

创建一个指定权限的用户
grant select,insert on *.* to admin2@'%' identified by 'abc';
刷新权限:flush privileges;
验证:同上

提升admin2的权限:
grant all privileges on *.* to admin2@'%';

时间日期类型:用于日期和时间的表示
包括date(日期型)、datetime(日期时间型)、timestamp(时间戳)、year(年)

创建时间日期类型表为testd:
create teble testb(d date,t time,dt datetime,ts timestamp default current_timestamp on update current_timestamp,y year);

获取当前时间:
select now();

插入当前时间:
insert into testd values(now(),now(),now(),now(),now());

字符类型
包括:char,varchar,binary(二进制),varbinary(可变长度二进制),blob,text(文本),enum(枚举),set(集合)

创建字符类型表:
create table testc(un char(3),un2 varchar(3),un3 binary(3),un4 varbinary(3));

插入一条记录:
insert into testc values('ba','ba','ba','ba');

enum和set:
create table testd(uname enum('a','b','c'),uname1 set('a','b','c'));

插入(只能插入创建时给出的值,enum插入一个,set可插入一个或多个):
insert into testd values('a','a,b');

查找(set)uname2中有‘b’的记录:
select * from testd where find_in_set('b',uname2);

注入语句(判断用户名)
select * from user where username='admin' and find_in_set(left(user(),1),'s,t,u,r')=4;

SQL注入提权后创建一个账户

创建一个任意登录的普通账户
insert into mysql.user(host,user,password) values('%','admin3',password('abc'));

刷新权限:flush privileges;

创建一个超级用户
拷贝root权限到临时表,在插入user表
create table tmp select * from mysql.user where user='root' limit 1;

select * from tmp;

update tmp set host='%',user='admin4',password=password('abc');

insert into mysql.user select * from tmp;

flush privileges;

字典库mysql信息
用户表:user 保存了主机,用户名和密码等重要信息
数据库权限:db 保存了对数据库级别的权限信息
字段权限表:columns_priv 保存了字段的详细权限分配信息

information_schema:

distinct  去除重复信息
select distinct table_schema from information_schema.tables;

相关函数:

user()/current_user()/session_user()   返回当前用户名
version()   数据库版本号
database()   当前数据库名

返回字符在字符串中的位置:
select position('@' in user())

select locate('@',user())

睡眠函数
select sleep(1);

压力测试函数:
select benchmark(5000000,md5('ba'));

随机函数:
select rand();

四舍五入取整:
select round(rand()*2);

向下取整:
select floor(rand()*2);

随机排序:
select * from users order by rand();

报错:
select count(*) floor(rand()*2) as a from users group by a;
select count(*) concat(user(),floor(rand()*2)) as a from users group by a;
posted @ 2020-09-13 09:22  clown-b  阅读(150)  评论(0)    收藏  举报