研究MySQL数据库的加解密方式,在网络攻防过程中具有重要的意义;试想一旦获取了网站一定的权限后,如果能够获取MySQL中保存用户数据,通过解密后,即可通过正常途径来访问数据库;一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。本文对目前常见的MySQL密码破解方式进行了研究和讨论。

本文作者:simeon

1.MySQL数据库密码破解

MySQL数据库用户密码跟其它数据库用户密码一样,在应用系统代码中都是以明文出现的,在获取文件读取权限后即可直接从数据库连接文件中读取,例如asp代码中的conn.asp数据库连接文件,在该文件中一般都包含有数据库类型,物理位置,用户名和密码等信息;而在MySQL中即使获取了某一个用户的数据库用户(root用户除外)的密码,也仅仅只能操作某一个用户的数据库中的数据。

在实际攻防过程中,在获取Webshell的情况下,是可以直下载MySQL数据库中保留用户的user.MYD文件,该文件中保存的是MySQL数据库中所有用户对应的数据库密码,只要能够破解这些密码那么就可以正大光明的操作这些数据,虽然网上有很多修改MySQL数据库用户密码的方法,却不可取,因为修改用户密码的事情很容易被人发现!

1.1MYSQL加密方式

MYSQL数据库的认证密码有两种方式,MYSQL 4.1版本之前是MYSQL323加密,MYSQL 4.1和之后的版本都是MYSQLSHA1加密,MYSQL数据库中自带Old_Password(str)和Password(str)函数,它们均可以在MYSQL数据库里进行查询,前者是MYSQL323加密,后者是MYSQLSHA1方式加密。

(1)以MYSQL323方式加密

SELECTOld_Password('bbs.antian365.com');

查询结果MYSQL323= 10c886615b135b38

(2)以MYSQLSHA1方式加密

SELECTPassword('bbs.antian365.com');

查询结果MYSQLSHA1= *A2EBAE36132928537ADA8E6D1F7C5C5886713CC2

执行结果如图1所示,MYSQL323加密中生成的是16位字符串,而在MYSQLSHA1中生存的是41位字符串,其中*是不加入实际的密码运算中,通过观察在很多用户中都携带了“*”,在实际破解过程中去掉“*”,也就是说MYSQLSHA1加密的密码的实际位数是40位。

图1在MYSQL数据库中查询同一密码的不同SHA

 

1.2MYSQL数据库文件结构

1.MYSQL数据库文件类型

MYSQL数据库文件共有“frm”、“MYD”“和MYI”三种文件,“.frm”是描述表结构的文件,“.MYD”是表的数据文件,“.MYI”是表数据文件中任何索引的数据树。一般是单独存在一个文件夹中,默认是在路径“C:\Program Files\MYSQL\MYSQL Server 5.0\data”下。

2.MYSQL数据库用户密码文件

在MYSQL数据库中所有设置默认都保存在“C:\Program Files\MYSQL\MYSQL Server 5.0\data\MYSQL”中,也就是安装程序的data目录下,如图2所示,有关用户一共有三个文件即user.frm、user.MYD和user.MYI,MYSQL数据库用户密码都保存在user.MYD文件中,包括root用户和其他用户的密码。

2 MYSQL数据库用户密码文件

 

1.3获取MySQL密码哈希值

1.获取MYSQL数据库用户密码加密字符串

使用UltraEdit-32编辑器直接打开user.MYD文件,打开后使用二进制模式进行查看,如图3所示,可以看到在root用户后面是一串字符串,选中这些字符串将其复制到记事本中,这些字符串即为用户加密值,即506D1427F6F61696B4501445C90624897266DAE3。注意:

(1)root后面的“*”不要复制到字符串中。

(2)在有些情况下需要往后面看看,否则得到的不是完整的MYSQLSHA1密码,总之其正确的密码位数是40位。

(3)如果是在John theRipper password cracker中进行密码破解,需要带“*”!

获取加密的字符串

 

1.4网站在线密码破解

1.ww.cmd5.com破解。将获取的MySQL值放在cmd5.com网站中进行查询,MySQL密码破解一般都是收费的,成功破解一次0.1元。

2.somd5.com破解。Somd5.com是后面出现的一个免费破解网站,每次破解需要手工选择图形码进行破解,速度快,效果好,只是每次只能破解一个,而且破解一次后需要重新输入验证码。

1.5 hashcat破解hashcat支持很多种破解算法,免费开源软件,官方网站https://hashcat.net/hashcat/,破解命令:

hashcat64.exe -m 200 myql.hashpass.dict //破解MySQL323类型

hashcat64.exe -m 300 myql.hashpass.dict //破解MySQL4.1/MySQL5类型

1.6 John the Ripper密码破解John the Ripper下载地址:http://www.openwall.com/john/h/john179w2.zip,John theRipper除了能够破解linux外,还能破解多种格式的密码,在kali下测试破解MySQL密码,如图4所示。

Echo*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B>hashes.txt

John –format =MySQL-sha1 hashes.txt

john –list=formats | grep MySQL //查看支持MySQL密码破解的算法

图4测试MySQL密码破解

1.7使用Cain破解Mysql密码

1.将MYSQL用户密码字符串加入到Cain破解列表

使用Cain & Abel 来破解MYSQL数据库用户密码,Cain & Abel是一个可以破解屏保、PWL密码、共享密码、缓存口令、远程共享口令、SMB口令、支持VNC口令解码、Cisco Type-7口令解码、Base64口令解码、SQL Server 7.0/2000口令解码、Remote Desktop口令解码、Access Database口令解码、Cisco PIX Firewall口令解码、Cisco MD5解码、NTLM Session Security口令解码、IKE Aggressive Mode Pre-Shared Keys口令解码、Dialup口令解码、远程桌面口令解码等综合工具,还可以远程破解,可以挂字典以及暴力破解,其sniffer功能极其强大,几乎可以明文捕获一切帐号口令,包括FTP、HTTP、IMAP、POP3、SMB、TELNET、VNC、TDS、SMTP、MSKERB5-PREAUTH、MSN、RADIUS-KEYS、RADIUS-USERS、ICQ、IKE Aggressive Mode Pre-Shared Keys authentications等。

Cain & Abel 目前最新版本是4.9.56,软件下载地址:http://www.oxid.it/downloads/ca_setup.exe。下载Cain & Abel 后,直接安装,然后运行它,在Cain & Abel 主界面中单击“Cracker”标签,然后将用户密码的加密字符串“506D1427F6F61696B4501445C90624897266DAE3”加入到MYSQLHashes破解列表中,如图5所示,单击“Add tolist”,如图6所示,将字符串复制到Hash输入框中。Username可以任意输入。

5使用Cain破解MYSQL密码主界面

6添加MYSQL Hashes

2.使用字典进行破解

如图7所示,选中刚才添加的需要破解的字符串,然后选择“Dictionary Attack(字典破解)”,在弹出的菜单中选择“MYSQL SHA1 Hashes”方式进行破解,该方式针对的是MYSQL4.1后续版本,对于MYSQL4.1以前版本则选择“MYSQL v3.23 Hashes”进行破解。

7选择破解方式

 

选择DictionaryAttack(字典破解)”后会出现一个窗口,主要用于选择字典,如图8所示,在Dictionary下方右键单击,可以添加一个或者多个字典文件,字典选择完毕后可以在“Options(选项)”中进行选择,然后单击“Start”按钮进行破解。

8MYSQL字典破解设置

说明:

在“Options(选项)”中一共有8种方式即:

(1)字符串首字母大写

(2)字符串反转

(3)双倍字符串

(4)字符串全部小写

(5)字符串全部大写

(6)在字符串中加入数字

(7)在每个字符串中进行大写轮换

(8)在字符串中加入2个数字

破解成功后Cain会给出一些提示信息,如下所示:

Plaintext of user <none> is databasepassword

Attack stopped!

1 of 1 hashes cracked

表明加密的密码是“databasepassword”。回到Cain破解主窗口中后破解的密码值会自动加入到“Password”列中如图9所示便于查看。

 

9破解密码成功

 

3.破解探讨

(1)字典破解跟字典强度有关

单击“开始”-“程序”-“MYSQL”-“MYSQL Server5.0”-“MYSQL Command Line Client”打开MYSQL Command LineClient,输入密码后,输入以下代码重新设置一个新密码:

UseMYSQL

updateuser set password=password("1977-05-05") where user="root";flushprivileges;

本试验中将原来的密码修改为“1977-05-05”,其结果如图10所示。

10修改MYSQL用户密码

 

再次使用UltraEdit-32软件重新打开“C:\ProgramFiles\MYSQL\MYSQL Server 5.0\data\MYSQL\user.MYD”获取其新的密码字符串“B046BBAF61FE3BB6F60CA99AF39F5C2702F00D12”,然后重新选择一个字典,在本例中选择生成的生日字典,如图11,图12所示,仅仅选择小写字符串进行破解,很快就获取了破解结果。实际结果表明使用Cain来破解MYSQL密码,如果是采用字典破解,那么破解效果跟字典强度有关,只要破解的密码在字典中,则一定能够破解。

11再次破解MYSQL密码

 

12修改MYSQL密码后再次进行破解MYSQL密码

(2)使用彩虹表进行破解

在Cain中还提供彩虹表破解MYSQL,在破解方式中选择“CryptanalysisAttack”-“MYSQL SHA1 Hashes via RainbowTables”即可,如图13,图14所示,在实际测试过程中由于网络上提供的sha彩虹表格式是RTI,而Cain中使用的是RT,我将下载的所有彩虹表中文件后缀由RTI修改为RT,然后进行破解,提示信息显示不成功,应该是彩虹表的格式不一样,Cain中只承认它自己提供的。

13使用彩虹表破解方式

14使用彩虹表进行破解

 

(3)Hash计算器

在Cain中提供了各种Hashes的计算,在主界面中单击计算机图标按钮,即可弹出Hashes计算器,在“Text tohash”中输入需要转换的原始值,例如输入“12345678”,单击“Calculate”进行计算,如图15所示,可以看到14种Hashes值。

15计算Hashes

 

(4)生成彩虹表

在Cain的安装目录C:\ProgramFiles\Cain\Winrtgen中直接运行Winrtgen,如图16所示,该工具为彩虹表生成器,可以很方便的生成各种类型的彩虹表值。

16 Winrtgen彩虹表生成工具

 

(5)设置彩虹表

在图17中单击“Add Table”在“RainbowTable properties”中的Hash中选择“MYSQLsha1”,然后可以根据实际情况分别设置“Min Len”、“Max Len”、“Index”、“Chain len”、“Chain Count”以及“N oftables”的值,一般情况仅仅需要设置“Min Len”、“Max Len”以及“N oftables”的值。“N of tables”主要用来测试Hashes生成的完整度,输入不同的值,会在Table properties中显示百分比,通过尝试来确定一共需要生成多少个表,然后单击“Benchmark”进行时间估算,如图17所示,单击“OK”完成彩虹表生成设置。

17设置彩虹表

在彩虹表生成器中,如图18单击“Start”开始生成彩虹表,在Status中会显示生成的大小和进度。

18开始生成彩虹表

由于彩虹表生成的时间比较漫长,在网络上也没有搜索到以rt结尾的MYSQL Sha1hashes表,因此本次破解主要以字典破解为主,彩虹表的破解将在全部生成后进行,在服务器权限设置不太严格的情况下,通过Webshell完全可以将MYSQL下的user.MYD文件下载到本地,只要破解了root用户的密码,然后借助Webshell可以做很多事情,本文通过介绍了在线网站、John the Ripper、hashcat解、cain来破解MYSQL密码,对于设计不太复杂的MYSQL密码,破解还是较为容易的。

 

(6)对于16位的MySQL密码(MYSQL323加密算法)还有一种快速破解方式,编译以下程序,直接进行破解,可以破解8位以下数字、字符等密码。

使用方法:

./ MySQLfast6294b50f67eda209

破解效果如图19所示。

/* This program is public domain. Share and enjoy.

* $ gcc -O2 -fomit-frame-pointer MySQLfast.c -o MySQLfast

* $ MySQLfast 6294b50f67eda209

* Hash: 6294b50f67eda209

*/

#include <stdio.h>

typedef unsigned long u32;

/* Allowable characters in password; 33-126 is printable ascii */

#define MIN_CHAR 33

#define MAX_CHAR 126

/* Maximum length of password */

#define MAX_LEN 12

#define MASK 0x7fffffffL

int crack0(int stop, u32 targ1, u32 targ2, int *pass_ary)

{

int i, c;

u32 d, e, sum, step, diff, div, xor1, xor2, state1, state2;

u32 newstate1, newstate2, newstate3;

u32 state1_ary[MAX_LEN-2], state2_ary[MAX_LEN-2];

u32 xor_ary[MAX_LEN-3], step_ary[MAX_LEN-3];

i = -1;

sum = 7;

state1_ary[0] = 1345345333L;

state2_ary[0] = 0x12345671L;

while (1) {

while (i < stop) {

i++;

pass_ary[i] = MIN_CHAR;

step_ary[i] = (state1_ary[i] & 0x3f) + sum;

xor_ary[i] = step_ary[i]*MIN_CHAR + (state1_ary[i] << 8);

sum += MIN_CHAR;

state1_ary[i+1] = state1_ary[i] ^ xor_ary[i];

state2_ary[i+1] = state2_ary[i]

+ ((state2_ary[i] << 8) ^ state1_ary[i+1]);

}

state1 = state1_ary[i+1];

state2 = state2_ary[i+1];

step = (state1 & 0x3f) + sum;

xor1 = step*MIN_CHAR + (state1 << 8);

xor2 = (state2 << 8) ^ state1;

for (c = MIN_CHAR; c <= MAX_CHAR; c++, xor1 += step) {

newstate2 = state2 + (xor1 ^ xor2);

newstate1 = state1 ^ xor1;

newstate3 = (targ2 – newstate2) ^ (newstate2 << 8);

div = (newstate1 & 0x3f) + sum + c;

diff = ((newstate3 ^ newstate1) – (newstate1 << 8)) & MASK;

if (diff % div != 0) continue;

d = diff / div;

if (d < MIN_CHAR || d > MAX_CHAR) continue;

div = (newstate3 & 0x3f) + sum + c + d;

diff = ((targ1 ^ newstate3) – (newstate3 << 8)) & MASK;

if (diff % div != 0) continue;

e = diff / div;

if (e < MIN_CHAR || e > MAX_CHAR) continue;

pass_ary[i+1] = c;

pass_ary[i+2] = d;

pass_ary[i+3] = e;

return 1;

}

while (i >= 0 && pass_ary[i] >= MAX_CHAR) {

sum -= MAX_CHAR;

i–;

}

if (i < 0) break;

pass_ary[i]++;

xor_ary[i] += step_ary[i];

sum++;

state1_ary[i+1] = state1_ary[i] ^ xor_ary[i];

state2_ary[i+1] = state2_ary[i]

+ ((state2_ary[i] << 8) ^ state1_ary[i+1]);

}

return 0;

}

void crack(char *hash)

{

int i, len;

u32 targ1, targ2, targ3;

int pass[MAX_LEN];

if ( sscanf(hash, &quot;%8lx%lx&quot;, &targ1, &targ2) != 2 ) {

printf(&quot;Invalid password hash: %s\n&quot;, hash);

return;

}

printf(&quot;Hash: %08lx%08lx\n&quot;, targ1, targ2);

targ3 = targ2 – targ1;

targ3 = targ2 – ((targ3 << 8) ^ targ1);

targ3 = targ2 – ((targ3 << 8) ^ targ1);

targ3 = targ2 – ((targ3 << 8) ^ targ1);

for (len = 3; len <= MAX_LEN; len++) {

printf(&quot;Trying length %d\n&quot;, len);

if ( crack0(len-4, targ1, targ3, pass) ) {

printf(&quot;Found pass: &quot;);

for (i = 0; i < len; i++)

putchar(pass[i]);

putchar('\n');

break;

}

}

if (len > MAX_LEN)

printf(&quot;Pass not found\n&quot;);

}

int main(int argc, char *argv[])

{

int i;

if (argc <= 1)

printf(&quot;usage: %s hash\n&quot;, argv[0]);

for (i = 1; i < argc; i++)

crack(argv[i]);

return 0;

}

转载于:https://www.cnblogs.com/ichunqiu/p/7810914.html

MySQL数据库密码破解相关推荐

  1. mysql数据库密码破解方法

    1.先找到到user.MYD文件. 所有的mysql系统用户的账号密码都存在这个文件里. 2.编辑器打开 这一串hash就是localhost@root的密码,注意破解的时候前面的*不要. 3.找个破 ...

  2. 如何在linux系统下修改mysql密码_如何在linux下修改mysql数据库密码?linux修改数据库密码的方法...

    本篇文章给大家带来的内容是介绍如何在linux下修改mysql数据库密码?linux修改数据库密码的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. Linux下修改Mysql的 ...

  3. centos修改mysql密码_WAMP下修改MYSQL数据库密码

    WAMP就是Windows Apache Mysql PHP集成安装环境,即在window下的apache.php和mysql的服务器软件.用来学习.调试.运行php,mysql都是非常简便的.初次安 ...

  4. mac mysql 账户密码忘记_MAC下MYSQL数据库密码忘记的解决办法

    Mac操作系统下MYSQL数据库密码忘记的快速解决办法 1. 在系统偏好 中,中止MYSQL服务.: 2. cd/usr/local/mysql-...../bin sudo ./mysqld_saf ...

  5. MySQL数据库密码忘了,怎么修改密码,找回密码。

    MySQL数据库密码忘了,怎么修改密码,找回密码. 当我们忘记mysql数据库密码时我们就无法正常进入数据库,也就无法修改密码,那么这时该怎么修改密码呢,这里教大家一个简单常用修改密码的方式. 1.打 ...

  6. 如何修改MySQL数据库密码

    如何修改MySQL数据库密码 写的比较好,此处收藏一下,感谢博主的分享:原博客地址 方法 1: 用 SET PASSWORD 命令 首先登录 MySQL. 格式:mysql> set passw ...

  7. phpwind mysql 密码_PhpWind教程:MySQL数据库密码修改方法

    问题: MySQL数据库密码如何修改? 解决方法: 方法一 使用phpmyadmin,这是最简单的了,修改mysql库的user表, 不过别忘了使用PASSWORD函数. 方法二 使用mysqladm ...

  8. 更改Mysql数据库密码

    今天Navicat连接MySql数据库报如下错误,明明密码没有错误呀,可就是登不上,只能重新修改密码. 关闭正在运行的MySQL. 打开DOS窗口,转到mysql\bin目录. 输入mysqld -- ...

  9. 修改mysql数据库密码

    1. 添加环境变量 MYSQL_HOME:D:\mysql (D:\mysql为mysql数据库的安装目录) 接着在已存在的环境变量path后追加:%MYSQL_HOME%\bin; 或: 直接进行m ...

最新文章

  1. Objective-c 实用代码
  2. 学习Python编程的19个资源
  3. JavaScript类型总览(图)
  4. C#网络编程(基本概念和操作) - Part.1
  5. mysql5.2 软件园_MySQL Server V5.5 官方安装版
  6. 记忆化搜素,和递推法
  7. UI component html code 查看工具
  8. phpcmsV9子栏目调用其父栏目名称、URL、catid等信息 - 方法总结
  9. 【转】浅谈React、Flux 与 Redux
  10. 华为成了!鸿蒙OS 2.0对比iOS 14:苹果流畅度竟完败?
  11. Xshell 连接CentOS服务器解密
  12. 清华大学电机学答案_电机学清华大学答案
  13. 关于c盘清理以及前端环境配置
  14. IDEA连接数据库后在数据表里添加外键的两种方式
  15. 传世调试之-道士技能《解毒术》、《神光术》:无法正常升级。
  16. IOS10上崩溃错误“View has lost track of its superview, most likely through unsupported use of CALayer”解决方案
  17. arduino点阵声音频谱_音频跳动:制造32分频音频频谱点阵
  18. 一种永不止步的进取精神的勤奋
  19. 神经网络和深度神经网络,深度神经网络类型包括
  20. 一喝到威士忌真是什么烦恼都忘了

热门文章

  1. 【Rust 日报】2022-04-10 适用于Rust的异步CQL驱动
  2. 【附源码】计算机毕业设计SSM汽车维修服务系统
  3. 60秒的秒表c语言程序,99秒表c程序
  4. 【下载网页上的视频】IDM显示无法将下载行为传输到IDM
  5. 实验10 人机交互的质量与测评
  6. 基于STM32F103单片机的生理监控心率脉搏监控TFT彩屏显示
  7. python写入文件没反应_记第一个问题——python文件无法写入数据
  8. HTML批量转换jpg,万能文件转换工具(word,excel,powerpiont,PDF,TXT,JPG,HTML互转)
  9. hbuilder前端需要的插件_这两款HTML5开发工具,前端开发工程师用了直呼内行
  10. 字符数组与字符串的转换