PS:这玩意偶前几天用了一下,确实强悍无比,在这个表面前,md5、sha1等公开的加密算法不堪一击啊。听说以后md5、sha1这类加密算法都要被淘汰了,sha256要大行其道了。
彩虹表(Rainbow Table)是一种破解哈希算法的技术,是一款跨平台密码破解器,主要可以破解MD5、HASH等多种密码。它的性能非常让人震惊,在一台普通PC上辅以NVidia CUDA技术,对于NTLM算法可以达到最高每秒103,820,000,000次明文尝试(超过一千亿次),对于广泛使用的MD5也接近一千亿次。更神奇的是,彩虹表技术并非针对某种哈希算法的漏洞进行攻击,而是类似暴力破解,对于任何哈希算法都有效。
一、彩虹表原理
先讲述一些基本概念:
Tables
可以说长期进行密码学研究的人很少有不知道这个的。在很多年前,国外的黑客们就发现单纯地通过导入字典,采用和目标同等算法破解,其速度其实是非常 缓慢的,就效率而言根本不能满足实战需要。之后通过大量的尝试和总结,黑客们发现如果能够实现直接建立出一个数据文件,里面事先记录了采用和目标采用同样 算法计算后生成的Hash散列数值,在需要破解的时候直接调用这样的文件进行比对,破解效率就可以大幅度地,甚至成百近千近万倍地提高,这样事先构造的 Hash散列数据文件在安全界被称之为Table表(文件)。
Rainbow Tables
最出名的Tables是Rainbow Tables,即安全界中常提及的彩虹表。彩虹表就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码。越 是复杂的密码,需要的彩虹表就越大,现在主流的彩虹表都是100G以上,目前主要的算法有LM, NTLM, MD5, SHA1, MYSQLSHA1, HALFLMCHALL, NTLMCHALL, ORACLE-SYSTEM, MD5-HALF。
原理
(在网上也找了一些,大部分都是直译过来的,看得人不知所云,这里以后再补上吧。)
二、获得彩虹表
彩虹表可以使用RainbowCrack或Cain来生成,也可以到网上下载,国外有大牛共享出来的。表分割得越细,成功率就越高,生成的表体积也越大,所需时间也越长。但下载比生成快得多,有人做过测试,4核4GB内存的机器,生成2GB彩虹表,需要花 费7天时间,而7天按2MB的带宽(256K/S左右)几乎可以下载48GB左右,效率明显要超过生成。当然,你要是有超级计算机群生成的话,也不妨自己 生成。对于广大网络安全爱好者来说,还是直接下载来得靠谱!
RainbowCrack生成
Cain生成
cain也是一个强大的工具,网上很容易就可以找到下载地址,具体使用方法参见我的另一篇博文(http://www.cnblogs.com/phpCHAIN/p/3515115.html)。
网上下载
下载链接:①http://freerainbowtables.mirror.garr.it/mirrors/freerainbowtables/
②http://freerainbowtables.mirror.garr.it/mirrors/freerainbowtables/RTI2/md5/
这2个地址都是官方的,第①个很早以前出来的,第②个是后来出来的。
三、彩虹表格式
下载到的彩虹表一般格式是(hash_algorithm)_(plain_charset)#(plain_len_min)-(plain_len_max)_(rainbow_table_index)_(rainbow_chain_length)X(rainbow_chain_count)_(file_title_suffix)-(bench).rt
如:lm_alpha#1-7_0_2100x8000000_yeetrack.rt
其中,hash_algorithm:指定密码的加密算法,包括lm, md5, sha1,mysqlsha1等,其中lm是windows密码的加密算法。
plain_charset指定密码的字符集一般有大写字母、小写字母、数字和特殊字符。详细参数信息如下:
numeric = [0123456789] alpha = [ABCDEFGHIJKLMNOPQRSTUVWXYZ] alpha-numeric = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789] loweralpha = [abcdefghijklmnopqrstuvwxyz] loweralpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789] mixalpha = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ] mixalpha-numeric = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789] ascii-32-95 = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~] ascii-32-65-123-4 = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`{|}~] alpha-numeric-symbol32-space = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|:;”‘<>,.?/ ]
plain_len_min 指定密码的最小长度。
plain_len_max指定密码的最大长度。
rainbow_table_index指定彩虹表的索引。
rainbow_chain_length指定彩虹链的长度。
rainbow_chain_count指定要生成彩虹链的个数。
file_title_suffix指定生成的彩虹表文件名的注释。
bench 用户性能测试。
再说说下载的彩虹表的后缀,分2种。一种是由.bin .index .start这3个文件类型组成,这是用来破解lm加密算法的,可以用ophcrack软件;还有一种是以.rt或.rtc结尾的,可以用rainbowcrack软件。后来由.rt发展出来.rti和.rti2,这2中是用rcracki.exe来跑的,rainbowcrack是不支持这2中格式的。有别于传统的.rt格式,.rti比.rt的多了一个目录.index文件,据说遍列速度比.rt的更快(未曾对比过,无法确定是否属实),而rti2就是在rti后来发展出来的。
四、彩虹表的使用
彩虹表工具很多,常用到的彩虹表工具有Ophcrack、rainbowcrack、rcracki_mt、Cain等。
Ophcrack
下载地址:http://ophcrack.sourceforge.net/tables.php
特点:不支持md5破解,最常用的,界面友好,与众不同,压缩储存,有自己独特的彩虹表结构,还有Live CD。
支持的HASH类型:LM,NTLM
扩展名:.bin .index .start
RainbowCrack
下载地址:http://project-rainbowcrack.com/table.htm
特点:通用的,一般的破解软件如saminside都支持,命令行界面,黑客的最爱,支持CUDA。
支持HASH类型:LM, NTLM, MD5, SHA1, MYSQLSHA1, HALFLMCHALL, NTLMCHALL
扩展名:rt
Rcracki_mt
下载地址:http://sourceforge.net/projects/rcracki/
特点:只支持MD5 32位加密的,不支持16位的。
支持HASH类型:LM, NTLM, MD5, SHA1, MYSQLSHA1, HALFLMCHALL, NTLMCHALL
扩展名:rti, rti2
Cain
下载地址:http://www.onlinedown.net/soft/53494.htm
具体使用方法参见我的另一篇博文(http://www.cnblogs.com/phpCHAIN/p/3515115.html)。
彩虹表的使用方法很简单,这里就只以rcracki_mt破解md5为例了。
进入到rcracki_mt.exe安装目录,破解单个md5,格式:rcracki_mt.exe -h f96b697d7cb7938d525a2f31aaf161d0 D:/rt/*.rti
破解多个md5,格式:rcracki_mt.exe -l hash_list_file.txt D:/rt/*.rti
其中D:/rt是存放彩虹表的路径,hash_list_file.txt是存放md5值的文件,一行填一个hash
下面是具体例子
D:/test>rcracki_mt.exe -h f96b697d7cb7938d525a2f31aaf161d0 *.rti Using 1 threads for pre-calculation and false alarm checking... Found 4 rainbowtable files... md5_hybrid(loweralpha#6-6,numeric#1-3)#0-0_0_10000x63130363_distrrtgen[p][i]_0.rti: reading index... 57605680 bytes read, disk access time: 0.84 s reading table... 505042904 bytes read, disk access time: 8.34 s verifying the file... ok searching for 1 hash... cryptanalysis time: 32.02 s md5_hybrid(loweralpha#6-6,numeric#1-3)#0-0_1_10000x63248067_distrrtgen[p][i]_0.rti: reading index... 57605581 bytes read, disk access time: 0.98 s reading table... 505984536 bytes read, disk access time: 7.53 s verifying the file... ok searching for 1 hash... cryptanalysis time: 31.97 s md5_hybrid(loweralpha#6-6,numeric#1-3)#0-0_2_10000x63196772_distrrtgen[p][i]_0.rti: reading index... 57605581 bytes read, disk access time: 0.94 s reading table... 505574176 bytes read, disk access time: 8.13 s verifying the file... ok searching for 1 hash... cryptanalysis time: 32.14 s md5_hybrid(loweralpha#6-6,numeric#1-3)#0-0_3_10000x63223300_distrrtgen[p][i]_0.rti: reading index... 57605614 bytes read, disk access time: 0.86 s reading table... 505786400 bytes read, disk access time: 8.25 s verifying the file... ok searching for 1 hash... cryptanalysis time: 31.88 s statistics ------------------------------------------------------- plaintext found: 0 of 1 (0.00%) total disk access time: 35.88 s total cryptanalysis time: 128.00 s total chain walk step: 199940004 total false alarm: 25587 total chain walk step due to false alarm: 94671091 result ------------------------------------------------------- f96b697d7cb7938d525a2f31aaf161d0 <notfound> hex:<notfound>
总结到这里就告一段落了,也不知道讲没讲清楚,不清楚的@世人皆醒我独醉,大家互相探讨。