在对某个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发展而来。它的作用是让大容量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式(就是把一个任意长度的字节串变换成一个定长的大整数)。
MD5(Base64)加密后的字符串长度为24位,最末尾有2个“=”符号,字符串中数字和字母混写,这种加密方式在ASP.NET等CMS环境中经常碰到。如图3-41所示为3个用户及其加密后的密码字符串。
图3-41 MD5(Base64)密码
直接在Google上对“md5(dbase64)加解密”进行搜索,如图3-42所示,从搜索结果来看,除了求助外,很难在网上找到MD5(dBase64)的加密和解密方法。
图3-42 Google搜索结果
下面我们来寻找解密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值。
图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)加密。
图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”按钮。
图3-45 添加要破解的Hash值
04 执行暴力破解
如图3-46所示,单击三角形按钮,运行破解程序,选择暴力破解方式。
图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所示。
图3-47 多种破解方式
图3-48 使用字典成功破解
值得一提的是,InsidePro官方网站提供了74个字典文件,感兴趣的读者可以自行下载。在实际应用中,这些字典仍然不够,有些密码设置得往往超乎想象的复杂,除非有完整的彩虹表,否则暴力破解和字典破解的时间将非常漫长。
除了通过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所示。
图3-49 Base64解码工具
图3-50 执行解码批处理文件
02 编辑解码文件
将MD5(Base64)加密后的密码值“Ar2S+qOKqmzA6nXlmTeh7w==”复制到base64.b64文件中,编辑解码文件的情形如图3-51所示。
图3-51 编辑解码文件
03 查看解码后的文件
使用UltraEdit-32编辑器打开base64.tmp,如图3-52所示,该文件显示为乱码。这一点笔者也很奇怪,后面通过其他一些Base64解码工具进行解码,其正常显示结果仍为乱码。
图3-52 查看解码后的文件
04 获取Base64解码后的MD5值
在UltraEdit-32编辑器中,直接以二进制方式打开解码后的文件base64.tmp,如图3-53所示,将其中的二进制编码进行整理,其结果为“02BD92FAA38AAA6CC0EA 75E59937A1EF”,共32位,这与MD5加密后的值有些相似。
图3-53 获取二进制的值
将这个值复制到www.cmd5.com网站进行解密,如图3-54所示,结果显示为“author”。
图3-54 MD5解密
在线生成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解密。
在信息安全领域,只有想不到的,没有做不到的,只要努力、坚持和不断尝试,终究会有收获。通过对MD5(Base64)加密和解密原理的研究,我们成功获取了该CMS系统的WebShell,如图3-55所示。网络攻防最终是技术的对抗!
图3-55 成功获取该系统的WebShell