任务标题: 数据库基础之数据库系统表相关学习
1、如何利用数据库的功能读写文件,需要什么样的条件才可以读写
2、学习数据库系统表的功能,如何利用 sql 语句查询库名、表名、字段名、内容以及当前用户等基本信息,将学习过程中关键部分整理成报告
扩展学习:尝试查询出用户的 hash,并使用 hashcat 来对获取的 hash 进行暴力破解
学习报告
文件读写
关于实现Mysql的文件读写功能,首先需要了解secure_file_priv的特性。
a) secure_file_priv为null,表示不允许导入导出
b) secure_file_priv指定文件夹时,表示mysql的导入导出只能发生在指定的文件夹
c) secure_file_priv没有设置时,则表示没有任何限制
在进行读写操作时,我们需要以下条件:
a) 必须有权限读取并且文件必须完全可读
b) and (select count() from mysql.user)>0/ 如果结果返回正常,说明具有读写权限。
c) and (select count() from mysql.user)>0/ 返回错误,账户权限不够
d) 欲读取文件必须在服务器上
e) 必须指定文件完整的路径
f) 欲读取文件必须小于 max_allowed_packet
实例操作,读取nginx配置文件
命令:show global variables like ‘%secure%’;
这里我们发现读写操作已经限制在了指定文件夹,要想读取nginx的配置文件必须先进行修改把限制去掉。
命令:sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf
在文档末尾添加secure_file_priv=”/“
- 重启mysql:
命令:select load_file(‘etc/nginx/nginx.conf’);
这里已经读到这个文件了,但是文件内容没有显示,折腾了一会也没有解决办法。。。
写文件:
a) LOAD DATA INFILE语句可以用于高速地从一个文本文件中读取行,并装入一个表中
b) SELECT…..INTO OUTFILE ‘file_name’语句将内容写入文件。(可插入一句话)
系统数据表
- 查询库名。命令: show databases;
- 进入数据库。命令: use information_schema;
- 查询表名。命令:show tables;
- 查询字段名。命令:desc USER_PRIVILEGES;
- 查看当前用户。命令:select user();
- 参考内容:上周学习内容。
使用Hashcat破解哈希
根据第二点,选择mysql数据库,查询表名得到user表,再查询字段,选择我们想要的。
具体显示命令:select User,Host,authentication_string from user;
先识别下所属类型。命令:hashid -em *。。。
到这里有个错误
后面经过一番查找,原因是没有安装OpenCL(https://blog.csdn.net/u011781521/article/details/69485934)。
国内直链下载太慢了,需要FQ。虚拟机暂时没有配置。
- 也可使用网站在线破解。
参考链接
https://blog.csdn.net/lixiangminghate/article/details/80548048
https://www.cnblogs.com/xm17/p/9691070.html
https://blog.csdn.net/qq_25899635/article/details/90449323
https://techglimpse.com/cracking-linux-password-hashes-with-hashcat