目录
MySQL数据库
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言——结构化查询语言(SQL)进行数据库管理。
mysql中的注释符:# 、 /**/ 、 --
MySQL数据库的特有的表是:information_schema.tables
information_schema.tables 存储了数据表的元数据信息,下面对常用的字段进行介绍:
- table_schema: 记录数据库名
- table_name: 记录数据表名
- table_rows: 关于表的粗略行估计
- data_length : 记录表的大小(单位字节)
在MySQL5.0之后,MySQL中默认添加了一个名为 information_schema 的数据库,该数据库中的表都是只读的,不能进行更新、删除和插入等操作,也不能加载触发器,因为它们实际只是一个视图,不是基本表,没有关联的文件。
当尝试删除该 information_schema 数据库时,会爆出以下的错误!
information_schema 数据库中三个很重要的表:
- information_schema.schemata: 该数据表存储了mysql数据库中的所有数据库的库名
- information_schema.tables: 该数据表存储了mysql数据库中的所有数据表的表名
- information_schema.columns: 该数据表存储了mysql数据库中的所有列的列名
关于这几个表的一些语法:
// 通过这条语句可以得到所有的数据库名
select schema_name from information_schema.schemata limit 0,1
// 通过这条语句可以得到所有的数据表名
select table_name from information_schema.tables limit 0,1
// 通过这条语句可以得到指定security数据库中的所有表名
select table_name from information_schema.tables where table_schema='security'limit 0,1
// 通过这条语句可以得到所有的列名
select column_name from information_schema.columns limit 0,1
// 通过这条语句可以得到指定数据库security中的数据表users的所有列名
select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1
//通过这条语句可以得到指定数据表users中指定列password的数据(只能是database()所在的数据库内的数据,因为处于当前数据库下的话不能查询其他数据库内的数据)
select password from users limit 0,1
查看当前用户的权限
select * from mysql.user where user = substring_index(user(), '@', 1) ;
mysql中比较常用的一些函数:
- version(): 查询数据库的版本
- user():查询数据库的使用者
- database():数据库
- system_user():系统用户名
- session_user():连接数据库的用户名
- current_user:当前用户名
- load_file():读取本地文件
- @@datadir:读取数据库路径
- @@basedir:mysql安装路径
- @@version_complie_os:查看操作系统
ascii(str) : 返回给定字符的ascii值,如果str是空字符串,返回0;如果str是NULL,返回NULL。如 ascii("a")=97
length(str) : 返回给定字符串的长度,如 length("string")=6
substr(string,start,length) : 对于给定字符串string,从start位开始截取,截取length长度 ,如 substr("chinese",3,2)="in"
substr()、stbstring()、mid() 三个函数的用法、功能均一致
concat(username):将查询到的username连在一起,默认用逗号分隔
concat(str1,'*',str2):将字符串str1和str2的数据查询到一起,中间用*连接
group_concat(username) :将username数据查询在一起,用逗号连接
limit 0,1:查询第1个数 limit 1,1: 查询第2个数 limit n,1: 查询第n+1个数
判断MySQL数据库是否存在SQL注入
传送门——> SQL注入漏洞详解
MySQL数据库文件结构
MYSQL数据库文件类型
MySQL数据库文件共有 frm 、MYD 和 MYI 三种文件,.frm 是描述表结构的文件,.MYD 是表的数据文件,.MYI 是表数据文件中任何索引的数据树。一般是单独存在一个文件夹中,默认是在路径“C:Program FilesMySQLMySQL Server 5.7data”下。在MySQL数据库中所有设置默认都保存在“C:Program FilesMYSQLMYSQL Server 5.7datamysql”中,也就是安装程序的data目录下,有关用户一共有三个文件即user.frm、user.MYD和user.MYI,MYSQL数据库用户密码都保存在user.MYD文件中,包括root用户和其他用户的密码。
user.MYD文件
MySQL数据库密码破解
MySQL数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文件读取权限后即可直接从数据库连接文件中读取,例如 asp 代码中的conn.asp数据库连接文件,在该文件中一般都包含有数据库类型,物理位置,用户名和密码等信息;而在MySQL中即使获取了某一个用户的数据库用户(root用户除外)的密码,也仅仅只能操作某一个用户的数据库中的数据。
在实际攻防过程中,在获取Webshell的情况下,是可以直接下载MySQL数据库中保留用户的user.MYD文件,该文件中保存的是MySQL数据库中所有用户对应的数据库密码,只要能够破解这些密码那么就可以正大光明的操作这些数据,虽然网上有很多修改MySQL数据库用户密码的方法,却不可取,因为修改用户密码的事情很容易被人发现!
MySQL用户密码加密方式
MySQL数据库的认证密码有两种方式,MySQL 4.1版本之前是MySQL323加密,MySQL 4.1及其之后的版本都是MySQL SHA1加密。因为如今绝大部分网站都是用的4.1之后的版本,所以我们接下来只讨论使用MySQL SHA1加密方式的密码。MySQL中的 password(str) 函数就是对其进行加密的。该函数会生成41位的字符串,但是 * 是不计入到密码中的,所以真正有效位数是后面的40位。
当MySQL<8.0时,是用 password() 函数对密码加密。当MySQL>8.0时,MySQL取消了 password() 函数。
在MySQL中,用户密码存放在 mysql 数据库的 user 表里
- 当MySQL<5.7,密码字段在mysql数据库的user表的password字段里
- 当MySQL>=5.7,密码字段在mysql数据库的user表的authentication_string字段里
当MySQL< 5.7时:
当MySQL>= 5.7时:
破解MySQL用户密码
例如破解root用户的密码:81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
在线破解网站:https://cmd5.com/ 、 https://www.somd5.com/
MySQL UDF提权
相关文章:常见的SQL语句