最近比较迷恋Windows密码破解和还原,之前用过Saminside,这个工具用来跑LM Hash还是比较快的,在一台不算差劲的机器上,差不多一天就可以破解大部分LM Hash。而彩虹表破解(查表破解)的方式速度更快,我手头有一个64GB LM彩虹表,基本上只需要几分钟时间,就可以把密码明文跑出来。但是现在都知道NTLM修正了LM的弱点,所以VISTA、Win7、Win8、Win10之类的系统都不能直接通过LM Hash来还原密码明文。而目前针对NTLM的彩虹表又特别巨大,仅仅9位的字母数字混合密码,彩虹表就有690GB大,仅仅9位这还不包括特殊字符。如果要包括全部ASCII字符的话,15密码估计翻个十来倍大小应该没问题。几十个TB就用来准备彩虹表,对任何一般意义上的破解者来说都是无法想象的代价。RainbowCrack哈希表下载:http://project-rainbowcrack.com/
尽管如此还是尝试着想自己生成一份彩虹表看看。在RainbowCrack网站下载了最新的RainbowCrack 1.6.1版本,这个工具还是很不错的,除了用来跑彩虹表,还可以自己生成彩虹表。并且其跑表速度还可以用显卡GPU加速,有好显卡的机器会跑的非常快。
RainbowCrack网站上已经有了一部分彩虹表下载,不过都是测试用的,规则很简单,最复杂的NTLM哈希就是刚才说过的9位字母数字混合表,690GB那个。说实话还是有点小。我是准备自己生成着看,所以特别关注了一下里面附带的rtgen.exe工具。
悲剧的是,虽然国内也有人之前简单介绍过这个彩虹表生成工具:http://www.phpfans.net/article/htmls/200904/MjcxMTQ1.html,但介绍的实在太简单了,而且当时作者使用的是老版本的rtgen.exe,并且是针对生成MD5做的示例,命令参数不一样,各参数又没有新版本的对应介绍,基本上只能瞎琢磨了。
rtgen.exe 1.6.1版本命令行格式如下:
rtgen hash_algorithm charset plaintext_len_min plaintext_len_max table_index chain_len chain_num part_index
大致翻译:
rtgen 哈希类型 字符范围 最小位数 最大位数 表索引 链长度 链数量 索引块
哈希类型:LM,HTLM,MD5,SHA1,SHA256,几种常见HASH
字符范围charset.txt文件内有示例:
【数字】numeric = [0123456789]
【字母】alpha = [ABCDEFGHIJKLMNOPQRSTUVWXYZ]
【字母+数字】alpha-numeric = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]
【小写字母】loweralpha = [abcdefghijklmnopqrstuvwxyz]
【小写字母+数字】loweralpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789]
【小写+大写字母】mixalpha = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
【小写+大写+数字】mixalpha-numeric = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]
【ASCII字符范围32-95(涵盖绝大部分字符)】ascii-32-95 = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~]
【ASCII字符32-65-123-4(不含小写字母)】ascii-32-65-123-4 = [ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~]
【字母+数字+符号+空格】alpha-numeric-symbol32-space = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/ ]
最小位数最大位数也有示例:
hash algorithms implemented in alglib0.dll:
lm, plaintext_len limit: 0 - 7
ntlm, plaintext_len limit: 0 - 15
md5, plaintext_len limit: 0 - 15
sha1, plaintext_len limit: 0 - 20
sha256, plaintext_len limit: 0 - 20
关键是以下三个参数没搞明白: table_index表索引,chain_len chain_num链长度,part_index块数量
这个参数该怎么确定?完全没有头绪。。。
目前在单位的一个15T存储上开始了第一波测试:
F:\rainbowcrack>rtgen ntlm ascii-32-95 1 15 1000 1000000 10000000 0
rainbow table ntlm_ascii-32-95#1-15_1000_1000000x10000000_0.rt parameters
hash algorithm: ntlm
hash length: 16
charset: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW
XYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
charset in hex: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32
33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4
d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67
68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e
charset length: 95
plaintext length range: 1 - 15
reduce offset: 0x03e80000
plaintext total: 2994780131194708735
sequential starting point begin from 0 (0x0000000000000000)
generating...
还不知道这要运行多久才能结束,也不知道15TB的存储够不够用……
等我这边生成的有结果了我来更新吧。不知道有没有朋友已经测试生成过……能给我指点一下。
评论列表: