目录

MySQL数据库

mysql中比较常用的一些函数:

判断MySQL数据库是否存在SQL注入

MySQL数据库文件结构

MySQL数据库密码破解

MySQL UDF提权


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 Files\MySQL\MySQL Server 5.7\data”下。在MySQL数据库中所有设置默认都保存在“C:\Program Files\MYSQL\MYSQL Server 5.7\data\mysql”中,也就是安装程序的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语句

MySQL 详细学习笔记

MySQL数据库及注入方法的更多相关文章

  1. MySQL暴错注入方法

    mysql暴错注入方法整理,通过floor,UpdateXml,ExtractValue,NAME_CONST,Error based Double Query Injection等方法 1.通过fl ...

  2. 第二百八十一节,MySQL数据库-SQL注入和pymysql模块防止SQL注入

    MySQL数据库-SQL注入和pymysql模块防止SQL注入 SQL注入就是通过SQL语句绕开程序判断,获取到数据库的内容 下面以一个简单的程序登录SQL注入举例: 正常登录 1.数据库有一张会员表 ...

  3. MySql数据库乱码解决方法

    MySql数据库乱码解决方法 解决乱码问题一个原则:存取系统使用一致的编码规则. 多使用mysql的原生命令行,这样才能做更多的事情. ​ 第一步: 确认应用系统需要使用的编码 java的默认编码是跟 ...

  4. 在Eclipse中使用JDBC访问MySQL数据库的配置方法

    在Eclipse中使用JDBC访问MySQL数据库的配置方法 分类: DATABASE 数据结构与算法2009-10-10 16:37 5313人阅读 评论(10) 收藏 举报 jdbcmysql数据 ...

  5. mysql 数据库远程访问设置方法

    摘自: http://www.iteye.com/topic/418151 mysql数据库远程访问设置方法 1.修改localhost更改 "mysql" 数据库里的 " ...

  6. 使用SQL语句修改Mysql数据库字符集的方法

    使用SQL语句修改Mysql数据库字符集的方法   修改库: alter database [$database] character set [$character_set] collate [$c ...

  7. Centos下mysql数据库备份与恢复的方法

    一.mysqldump工具备份 mysqldump由于是mysql自带的备份工具,所以也是最常用的mysql数据库的备份工具.支持基于InnoDB的热备份.但由于是逻辑备份,所以速度不是很快,适合备份 ...

  8. ASP 连接 MySQL 数据库两种方法

    一般都是用myodbc来连接.首先,在系统中安装 Mysql 的ODBC数据库驱动.如安装稳定版本是3.51.下载地址是:http://dev.mysql.com/downloads/connecto ...

  9. Jsp连接Mysql数据库取数方法

    我将Jsp连接Mysql数据库方法整理如下,供大家学习交流! 1.首先在myslq数据库中新建mldn数据库,并新建emp表.(方法不展开介绍) 插入数据如下: create table `emp` ...

随机推荐

  1. Linux速通07 硬盘分区、格式化及文件系统管理

    硬件设备与文件名的对应关系 # 在Linux系统中,每个设备都被当作一个文件来对待 # 各种设备在Linux中的文件名 设备 设备在Linux内的文件名 IDE硬盘 /dev/hd[a-d] SCSI ...

  2. 技术基础 | 在Apache Cassandra中改变VNodes数量的影响

    Apache Cassandra中num_tokens的默认值在4.0版本中将会有变化!这看起来好像只是在CHANGES.txt文件中做了个小小的改动,但实际上这个改动将会对集群的日常运维有着深远的影 ...

  3. InterJ idea 回滚提交的代码

    如果你要回滚到这一次提交 ctrl shift k 提交 选force push 那么你的代码就回滚到你所想要的这次提交记录了

  4. vue之better-scroll详解及封装

    在我们的h5或移动端网页开发中,常常会需要实现滚动加载数据,等需求,而在开发中原生开发往往会带来意想不到的问题,因此我们引入better-scroll来帮我们实现流畅的滚动效果. 什么是better- ...

  5. WPF 基础 - 启动与退出及异常捕获

    1. 若需要控制 exe 实例数量 bool ret; mutex = new System.Threading.Mutex(true, exename, out ret); if (!ret) { ...

  6. web之面试常问问题:如何实现水平垂直居中?

    前提准备,在HTML页面中定义一个div,div中内容自定义. <div class="box sc">致我们呼啸而过的青春</div> 样式: div.b ...

  7. CSS篇-dispaly、position、定位机制、布局、盒子模型、BFC

    display常用值 参考链接英文参考链接中文 // 常用值 none:元素不显示 inline:将元素变为内联元素,默认 block:将元素变为块级元素 inline-block:将元素变为内联块级 ...

  8. MVC中"删除"按钮无法实现

    出现原因:MVC视图中定义了空的模板页 解决办法:删除模板页 或 改成定义页面标题都可以

  9. vps-java环境配置

    昨天准备用vps打一台反序列化的机子要java环境,java环境安装了但是javac一直用不了,鼓捣了一段时间把配置文件给搞没了,只好重装vps,找了很多帖子才搞定,为了防止下次继续出现这种情况又要重 ...

  10. 高精度减法(c++)

    高精度减法 每当要进行精度较高的运算时,就要用到高精度. 下图是各个类型的数值范围: 如果想不起各个类型占多少字节,可以采用下面的方法: printf("%d %d",sizeof ...