3.5 MD5(Base64)加密与解密

在对某个CMS系统进行安全检测时,可以通过注入点获取其管理员表中的管理员用户名和密码数据,但由于不知道该密码数据采用何种加密方式,所以,虽然知道CMS系统管理的后台,但苦于没有破解管理员的密码而无法登录系统。笔者通过研究终于掌握了MD5(Base64)加密原理和解密原理,因此才有本节内容。

Base64是网络上最常见的用于传输8bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要使用Base64编码,附件也需要使用Base64编码。Base64要求把每3个8bit的字节转换为4个6bit的字节(3×8 = 4×6 = 24),然后把6bit再添2位高位0,组成4个8bit的字节,也就是说,转换后的字符串理论上将比原来的字符串长1/3。

“MD5”的全称是“Message-Digest Algorithm 5”(信息-摘要算法),在20世纪90年代初由Mit Laboratory For Computer Science和Rsa Data Security Inc的Ronald L. Rivest开发,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一个定长的大整数)。

3.5.1 MD5(Base64)密码简介

MD5(Base64)加密后的字符串长度为24位,最末尾有2个“=”符号,字符串中数字和字母混写,这种加密方式在ASP.NET等CMS环境中经常碰到。如图3-41所示为3个用户及其加密后的密码字符串。

0149-1

图3-41 MD5(Base64)密码

3.5.2 在网上寻找破解之路

直接在Google上对“md5(dbase64)加解密”进行搜索,如图3-42所示,从搜索结果来看,除了求助外,很难在网上找到MD5(dBase64)的加密和解密方法。

0149-2

图3-42 Google搜索结果

3.5.3 寻求解密方法

下面我们来寻找解密MD5(Base64)密码的方法。

01 生成Hash值

InsidePro网站提供了在线Hash破解(http://hash.insidepro.com/)和在线生成各种Hash值的功能,在线生成Hash值的网址为http://www.insidepro.com/hashes.php?lang=eng,如图3-43所示。在“Password”文本框中输入“author”,单击“Generate”按钮,可直接生成各种Hash值。

0150-1

图3-43 生成各种Hash值

02 比对Hash值和加密密码值

在生成Hash值后的http://www.insidepro.com/hashes.php?lang=eng页面上拖动滚动条,一一对照。通过比对发现,在Base64加密中有一个明显的特征,即加密字符串最后面一般都有等号。从中截取部分author的加密值如下。

Haval128(Base64):1xehfrgfAcMYLCdLcYiDlg== 
Haval160(Base64):JPfaQRoHY0v/EJnXN9iKd9MfdbE= 
MD2(Base64):d+K74ta9Vhbr4yuKzfCAZQ== 
MD4(Base64):QPRz/CVV3O9EVOA/iCaOwA== 
MD5(Base64):Ar2S+qOKqmzA6nXlmTeh7w== 

“MD5(Base64):Ar2S+qOKqmzA6nXlmTeh7w==”与图3-41中的加密值一致。如图3-44所示,验证了该加密方式就是MD5(Base64)加密。

0150-2

图3-44 找到加密方式

03 添加Hash值

从http://www.insidepro.com/eng/passwordspro.shtml页面上了解到,PasswordsPro可以破解MD5(Base64)加密方式。PasswordsPro是一款付费软件。

运行PasswordsPro 2.5.3.0,单击右键,在弹出的快捷菜单中选择“Add”选项,如图3-45所示,添加一个Hash值进行破解。在“Hash”文本框中输入“MD5(Base64):Ar2S+ qOKqmzA6nXlmTeh7w==”,然后单击“Add”按钮。

0151-1

图3-45 添加要破解的Hash值

04 执行暴力破解

如图3-46所示,单击三角形按钮,运行破解程序,选择暴力破解方式。

0151-2

图3-46 暴力破解MD5(Base64)密码

在PasswordsPro 2.5.3.0中还有其他破解方式,包括“Preliminary Attack”、“Mask Attack”、“Simple Dictionary Attack”、“Combined Dictionary Attack”、“Hybrid Dictionary Attack”和“Rainbow Attack”6种破解方式,如图4-47所示。

05 破解成功

暴力破解方式太耗费时间,故选择了“Simple Dictionary Attack”(简单字典攻击)方式。由于密码在字典中,所以很快就破解出来了,如图3-48所示。

0152-1

图3-47 多种破解方式

0152-2

图3-48 使用字典成功破解

值得一提的是,InsidePro官方网站提供了74个字典文件,感兴趣的读者可以自行下载。在实际应用中,这些字典仍然不够,有些密码设置得往往超乎想象的复杂,除非有完整的彩虹表,否则暴力破解和字典破解的时间将非常漫长。

3.5.4 探寻MD5(Base64)的其他破解方式

除了通过PasswordsPro破解,还有一些方式或许能够破解MD5(Base64)密码,下面我们一起讨论一下。

01 进行Base64解码

网上有很多工具可以对Base64编码进行解码,其中一款是可以在Linux和Windows下运行的Base64工具,下载地址为http://www.fourmilab.ch/webtools/base64/,下载后可以直接运行,命令为“base64 -decode base64.b64 base64.tmp”,参数“-decode”或“-d”表示解码,“-encode”或“-e”表示Base64编码。

base64.b64是Base64编码后的文件,base64.tmp是解码后生成的文件。在该工具目录下,还有一个BAT文件用于批处理解码,如图3-49和图3-50所示。

0153-1

图3-49 Base64解码工具

0153-2

图3-50 执行解码批处理文件

02 编辑解码文件

将MD5(Base64)加密后的密码值“Ar2S+qOKqmzA6nXlmTeh7w==”复制到base64.b64文件中,编辑解码文件的情形如图3-51所示。

0153-3

图3-51 编辑解码文件

03 查看解码后的文件

使用UltraEdit-32编辑器打开base64.tmp,如图3-52所示,该文件显示为乱码。这一点笔者也很奇怪,后面通过其他一些Base64解码工具进行解码,其正常显示结果仍为乱码。

0154-1

图3-52 查看解码后的文件

04 获取Base64解码后的MD5值

在UltraEdit-32编辑器中,直接以二进制方式打开解码后的文件base64.tmp,如图3-53所示,将其中的二进制编码进行整理,其结果为“02BD92FAA38AAA6CC0EA 75E59937A1EF”,共32位,这与MD5加密后的值有些相似。

0154-2

图3-53 获取二进制的值

将这个值复制到www.cmd5.com网站进行解密,如图3-54所示,结果显示为“author”。

0154-3

图3-54 MD5解密

3.5.5 MD5(Base64)原理

在线生成Hash值,然后按照3.5.4节中的步骤重新测试,结果与之测试吻合,由此我们可以推测出MD5(Base64)的加解密原理。

1.MD5(Base64)加密原理

MD5(Base64)加密,首先对字符串进行MD5加密,即MD5(string),然后对MD5加密后的字符串进行Base64编码。

2.MD5(Base64)解密原理

MD5(Base64)解密,先对MD5(Base64)进行Base64解码,再对Base64解码后的值通过二进制方式进行读取,结果应为32位字符串,最后对获取的32位字符串进行MD5解密。

3.5.6 小结

在信息安全领域,只有想不到的,没有做不到的,只要努力、坚持和不断尝试,终究会有收获。通过对MD5(Base64)加密和解密原理的研究,我们成功获取了该CMS系统的WebShell,如图3-55所示。网络攻防最终是技术的对抗!

0155-1

图3-55 成功获取该系统的WebShell