1、和 mysql 相关的 shell 命令
启动 mysql systemctl start mysqld
检查 mysql进程 ps -ef | grep mysqld
2、mysql 中常用命令
查看mysql 版本号 mysql中, select version()from dual;
查看数据库 show databases;
使用数据库 use mysql
查看表 show tables;
3、获得 mysql 元数据命令
select version();服务器版本信息
select database();当前数据库名
select user():当前用户名
show status;服务器状态
show variables like ‘’;服务器配置变量
show global variables like '%datadir%';:看数据文件存放位置
select @@datadir; 查询数据库的路径
select @@basedir 查询 mysql 的安装路径
4、快捷命令
\h 或 help 或?查看帮助 help create database
\G 格式化查看数据(
key : value)
\c(
5.7 可以 ctr1+c)束命令
\s 或 status 查看状态信息
\.或 source 导入数据
\u 或 use 切换数据库
\q 或 exit 或 quit 退出
\!
system 执行系统命令 前面敲一个 system 就可以了 比如 system ifconfig
5、mysqladmin 常用命令
mysqladmin -uroot -p123456 status 查看状态
mysqladmin -uroot -p123456 ping 查看状态
mysqladmin -uroot -p123456 variables 查看变量
Mysqladmin -uroot -p drop database 删除数据库
Mysqladmin -uroot -p create dadtabse 创建数据库
Mysqladmin -uroot -p password 修改密码
mysqladmin -uroot -p flush-log 刷新日志
mysqladmin -uroot -p reload 刷新缓存
MySql 修改配置文件
1、了解 mysql 的配置文件
Linux 下安装的 mysql,配置文件位置 /etc/my.cnf 或者 /etc/mysql/my.cnf
2、修改端口
(1)编辑 vi /etc/my.cnf
在[mysqld]选项下增加 port=12345
(2)关闭 selinuc
setenforce 0
(3)重新启动 mysql 服务
service mysqld restart
(4)查看修改端口
mysqladmin -uroot -p show variables like 'port'
(5)防火墙放行 12345 端口,关闭 3306 端口
firewall-cmd --zone=public --add-port=12345/tcp --permanent
firewall-cmd --permanent --zone=public --remove-port=3306/tcp
(6)防火墙重新启动
Service firewalld restart 重启
systemctl restart firewalld 重启
systemctl disable firewalld 关闭开机启动
MySQL 数据库用户权限管理
1、MySQL 中用户是如何定义的
用户名@主机域
主机域的样子
10.0.0.51
10.0.0.%
%
10.0.0.0/255.255.255.0
Db01
localhost
127.0.0.1
端口号 0-65535
2、MySQL 权限级别介绍
全局——可以管理整个 MySQL
库——可以管理指定的数据库
表——可以管理指定数据库的指定表
字段——可以管理指定数据库的指定表的指定字段、
权限存储在 mysql 库的 user, db, tables_priv, columns_priv, procs_priv 这几个系统表中,待
mysql 实例启动后就加载到内存中
3、用户查看
(1)查看所有用户
select user,host from mysql.user;
(2)查看单个用户所有情况
select * from mysql.user where user = 'root' \G
(3)查看用户权限赋予情况
show grants for root@'%'
4、用户创建
create user 用户名@'主机域' identified by '密码';
create user test1@'%' identified by '123';
create user test2@'%' identified by '123';
create user test3@'%' identified by '123';
create user gmf@'%' identified by '123';
5、用户删除
drop
user username;
username:是要删除的用户名
如 drop user 用户名1@'主机域'
drop user ' '@'127.0.0.1' 用户名为空的删除
6、用户授权
(1)赋权语句
grant privileges
on databasename.tablename to 'username'@'host' with grant option
identified by ‘password’
例如:
grant all privileges on *.* to ‘xj’@’%’ identified by ‘123’ with grant option;
privileges:是指赋予哪些数据库的操作权限,如:
insert、update 等,全部是‘all’databasename:
是指可以操作哪个数据库,全部数据库则是* . *tablename:指可对哪些表进行操作 username:
指给哪个用户授权
Host:指哪一主机、
GRANT 命令说明:
(1)ALL PRIVILEGES 表示所有权限,你也可以使用 select、update 等权限。
(2)ON 用来指定权限针对哪些库和表。
(3)*.* 中前面的号用来指定数据库名,后面的号用来指定表名。
(4)TO 表示将权限赋予某个用户。
(5)@ 前面表示用户,@后面接限制的主机,可以是 IP、IP 段、域名以及%,%表示任何地方。
(6)IDENTIFIED BY 指定用户的登录密码。
(7)WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。
(2)部分赋权举例
单数据库赋权
create database test
use testcreate table aaa(cmd text)
create table bbb(cmd text)
grant all privileges on test.* to ‘test1’@’%’ identified by ‘123’ with option;
单表赋权
grant all privileges on test.aaa to ‘test2’@’%’ identified by ‘123’ with option;
字段赋权
MySQL 单列级别的授权, 这样做的话,我们是连表都是打不开的,只能通过查询语句,查对
我们开放的字段
grant select(user) on mysql.user to ‘test3’@’%’ identified by ‘123’
select * from tables_priv;
select user();
7、收回用户权限
revoke [权限] ON [库.表] FROM [用户名]@[主机];
-- 查看用户
select user,host from user;
-- 新建 1 个用户 test4@'localhost'
create user test4@'localhost' identified by '123456';
-- 查看 test4 用户权限
select * from user where user='test4';
-- 给 test4 赋权限 对所有表的所有权限,5.7 没有用户给创建一个用户
grant all privileges on test.aaa to 'test4'@'%' identified by '123456';
-- 收回权限 revoke 看 table 权限表
revoke all privileges on test.aaa from 'test4'@'%';
select * from tables_priv;
MySQL 几种读取外部文件的方法
一、为什么要在 mysql 数据库中读取外部文
mysql 数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据库数据之外,还可以
进行对数据库外部文件进行读写(但前提是权限足够)
mysql 在不同版本读取文件方法大致有这 3 个:
1.load_file()
2.load data infile()
3.system cat
load_file()和 load data infile 读取文件的方法为:新建一个表,读取文件为字符串形式插入表中,
然后读出表中数据。
但是通常情况下有前提:
1、对外部文件有读的权限
2、secure_file_priv null 什么文件都读不了 默认/var/lib/mysql-files/ 有读取权限
为无 任意读取路径
能够做到任意路径读取 local-infile=1 [mysqld] [mysql]
insert into 表(字段) values(load_file('路径和文件'));
load data infile '路径文件' into table 表名
system cat -----只能本地读
二、读取文件前提实现
修改 mysql.cnf 文件,
在[mysqld] 下添加条目: secure_file_priv =
在[mysqld]下面添加 local-infile=1 选项
在[mysql]下面也添加 local-infile=1
保存,关闭 selinux
setenforce 0
重启 mysql
Service mysqld restart
三、load_file()方式读取文件实现
首先在/tmp 目录下创建一个文档

运行 mysql
sql 命令如下:
1 create table aaa(cmd text);
2 insert into aaa(cmd) values (load_file('/tmp/1.txt'));
3 select * from user;
四、load data infile 方式实现文件读取
其实 load data infile 和 load_file()用法上没有什么区别,只是在注入过程中,往往会过滤掉
load_file()这个函数,但是仍然有 load data infile 可以使用。
如:load data infile '/tmp/1.txt' into table aaa;
五、System 命令方式读取文件
在 mysql 版本为 5.x 时,除了可以使用上两种方法外,还可以使用系统命令直接读取文件

注意:
1.此方法只能在本地读取,远程连接 mysql 时无法使用 system。
2. 无法越权读取。
show grants for 用户名@主机域
操作权限 insert delete update select create drop grant revoke
操作对象 库,表,字段,所有
操作权限 insert delete update select create drop grant revoke
操作对象 库,表,字段,所有
读取外部文件
load_file 函数 insert into 表(字段) values(load_file(‘’路径文件))
load data infile 命令 load data infile ‘路径文件’ into table 表名
system cat system ifconfig 本地运行
load_file 函数 insert into 表(字段) values(load_file(‘’路径文件))
load data infile 命令 load data infile ‘路径文件’ into table 表名
system cat system ifconfig 本地运行