MYSQL

MYSQL

什么是数据库?

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。

数据库的种类?市面上常用数据库?

关系型数据库:Oracle数据库,MySQL

非关系数据库:BigTable(Google)、Cassandra、MongoDB、CouchDB,redis

数据库常用端口:

mysql的默认端口是3306
sqlserver默认端口号为:1433
oracle 默认端口号为:1521
DB2 默认端口号为:5000
PostgreSQL默认端口号为:5432

redis默认端口号为:6379

memcache :11211

MYSQL基本命令

1.1 开启/关闭/重启

​ systemctl start mysqld

2.1 登入

​ mysql -u用户名 -p用户密码 :mysql -uroot -p123456

2.2密码密文

​ mysql -uroot -p +回车,输入密码;

3.1查看数据库

​ show databases;

3.2使用数据库

​ use 数据库名;

3.3创建,删除数据库

​ create/drop 数据库名;

3.4显示数据表结构

​ describe 数据表名;

3.5 MYSQL的ALTER命令

1:删除列

ALTER TABLE 【表名字】 DROP 【列名称】

2:增加列

ALTER TABLE 【表名字】 ADD 【列名称】 INT NOT NULL COMMENT ‘注释说明’

3:修改列的类型信息

ALTER TABLE 表名 modify column 字段名 字段类型;

ALTER TABLE 表名 CHANGE 更改字段 新字段 字段类型;

4:重命名列

ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称】 BIGINT NOT NULL COMMENT ‘注释说明’

5:重命名表

ALTER TABLE 【表名字】 RENAME 【表新名字】

6:删除表中主键

Alter TABLE 【表名字】 drop primary key

7:添加主键

ALTER TABLE sj_resource_charges ADD CONSTRAINT PK_SJ_RESOURCE_CHARGES PRIMARY KEY (resid,resfromid)

8:添加索引

ALTER TABLE sj_resource_charges add index INDEX_NAME (name);

9: 添加唯一限制条件索引

ALTER TABLE sj_resource_charges add unique emp_name2(cardnumber);

10: 删除索引

alter table tablename drop index emp_name;

4.1初始登入数据库

​ 获取零时密码:grep ‘temporary password’ /var/log/mysqld.log

设置与密码复杂相同的密码:ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘Gxaedu_110’;

设置密码要求的长度:set global validate_password_length=6;

设置密码的复杂程度:set global validate_password_policy=0;

查看数据库:show databases;

使用数据库: use mysql;

设置数据库密码:alter user ‘root’@‘localhost’ identified by ‘123456’;

授权远程登入本的账号密码: grant all privileges on . to ‘root’@’%’ identified by ‘123456’;

注意: setenforce 0;

关闭防火墙:systemctl stop firewalld;

5.1备份保存数据库

备份: mysqldump -uroot -p123456 数据库名 > 路径/数据库名.sql

​ mysqldump -uroot -p123456 hanchao>hanchao.sql

导入:mysql -uroot -p123456 数据库名<路径/数据库名.sql

​ mysqldump -uroot -p123456 hanchao<hanchao.sql

增删改查

注意:SQL server 查询有相同表时,使用[user]方括号括起来

1.1 插入数据

1.2 删除数据

1.3 修改数据

在这里插入图片描述

1.4 查询数据

在这里插入图片描述

1.5多表查询

先给出两张表:

在这里插入图片描述

(1)内连接:只返回两个表都有,而且id相等的值

(2)左连接:返回包括左表所有记录,还有和右表中相等的记录
在这里插入图片描述

(3)右连接:返回包括右表所有记录,还有和左表中相等的记录

7、子查询

也就是查询里面套查询
在这里插入图片描述

这里面的用法太多了,而且也太麻烦了。因此给出了这个最简单的例子。

8、分组查询

(1)使用group by分组
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yUinRdQo-1603106501201)(https://pics1.baidu.com/feed/dcc451da81cb39db0ba0a926bdf0bc21aa18304e.jpeg?token=a77370976771498c63db059b27f02a73&s=78067D320F666D204C6DA8DB00009031)]

select 类别, sum(数量) as 数量之和
from A
group by 类别

返回结果如下表,实际上就是分类汇总。

(2)使用having设置条件

在这里插入图片描述

9·1,查询字段行·连接concat_ws(分隔符,字段1,字段2…)admins,pages id,public,title,body 1,1,Micro-CMS Changelog,## Vers

在这里插入图片描述

9·2查询字段列连接符group_concat(字段1,字段2…,separator 分隔符)
在这里插入图片描述

Mysql注入中的outfile、dumpfile、load_file函数详解

在利用sql注入漏洞后期,最常用的就是通过mysql的file系列函数来进行读取敏感文件或者写入webshell,其中比较常用的函数有以下三个

  • into dumpfile()
  • into outfile()
  • load_file()

我们本次的测试数据如下

img

读写文件函数调用的限制

因为涉及到在服务器上写入文件,所以上述函数能否成功执行受到参数 secure_file_priv 的影响。官方文档中的描述如下

img

翻译一下就是

  • 其中当参数 secure_file_priv 为空时,对导入导出无限制
  • 当值为一个指定的目录时,只能向指定的目录导入导出
  • 当值被设置为NULL时,禁止导入导出功能

这个值可以通过命令 select @@secure_file_priv 查询。由于这个参数不能动态更改,只能在mysql的配置文件中进行修改,然后重启生效。

dumpfile与outfile的区别

导出数据库场景下的差异

select …… into outfile

我们先来看一下mysql官方文档里对于这两个函数的解释

img

img

其中有两个值得注意的坑点

outfile函数可以导出多行,而dumpfile只能导出一行数据
outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式

我们接下来通过导出测试看看这里面的细节

首先通过命令 select * from test into outfile '/tmp/test.txt' 来使用outfile导出

可以看到文件 /tmp/test.txt 文件中保存了所有的数据并且在一行数据的末尾自动换行

img

通过查看官方文档,可以看出使用如下参数可以进行格式调整

img

其中 FIELDS ESCAPED BY 可以用来对指定的字符进行转义, FIELDS [OPTIONALLY] ENCLOSED BY 用来对字段值进行包裹, FIELDS TERMINATED BY 用来对字段值之间进行分割

例如使用如下命令 select * from test into outfile '/tmp/test.txt FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY ' " 'LINES TERMINATED BY '\n'

得到的导出文件如下

img

select …… into dumpfile

而接着使用命令 select * from test into dumpfile '/tmp/test.txt' 使用dumpfile进行导出

可以看到此命令在执行的时候提示输出超过一行

img

查看文件内容

img

可以看见通过dumpfile导出的数据行数据之间并未进行换行且只导出了部分数据

写入webshell或者udf下的差异

select …… into outfile

我们使用命令 select 'a\naa\raaaa' into outfile '/tmp/test.txt' 来看一下在常用的写文件场景下的结果

img

可以看到outfile对导出内容中的\n等特殊字符进行了转义,并且在文件内容的末尾增加了一个新行

我们接着使用命令 select 'a\naa\raaaa' into dumpfile '/tmp/test.txt' 来看一下

img

可以看到dumpfile对文件内容是原意写入,未做任何转移和增加。这也就是为什么 我们在平常的UDF提权中使用dumpfile进行dll文件 写入的原因

还有一个需要关注的点就是:outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径。这个问题在php注入中更加麻烦,因为会自动将单引号转义成’,那么基本就GG了,但是load_file,后面的路径可以是单引号、0x、char转换的字符,但是路径中的斜杠是/而不是\

umpfile ‘/tmp/test.txt’` 来看一下

[外链图片转存中…(img-ihhMEFqd-1603106501220)]

可以看到dumpfile对文件内容是原意写入,未做任何转移和增加。这也就是为什么 我们在平常的UDF提权中使用dumpfile进行dll文件 写入的原因

还有一个需要关注的点就是:outfile后面不能接0x开头或者char转换以后的路径,只能是单引号路径。这个问题在php注入中更加麻烦,因为会自动将单引号转义成’,那么基本就GG了,但是load_file,后面的路径可以是单引号、0x、char转换的字符,但是路径中的斜杠是/而不是\

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值