密码字典生成工具:crunch
https://github.com/crunchsec/crunch
现在网络安全的设备层出不穷,各种网络安全设备不管是对于内网还是对于外网的防护达到了细致入微。社会工程学作为渗透中非常重要的一环,有着非常大的威力,社会工程学最重要的就是密码的暴力破解,暴力破解最重要的就是密码字典。字典的质量直接影响到最终的暴力破解速度,对整个渗透工作起着十分重要的作用。
这里就来介绍一款按照指定规律生成具有针对性字典的工具——crunch。
crunch简介
crunch是一种创建密码字典工具,按照指定的规则生成密码字典,可以灵活地制定自己的字典文件。使用crunch工具生成的密码可以输出到屏幕,保存到文件、或另一个程序。
crunch安装
现在的kali系统是默认自带crunch的。如果你使用其他系统,可以通过从github的这个地址下载源码:
# min:设定最小字符长度
# max:设定最大字符长度
crunch [options]
@ 代表小写字母
, 代表大写字母
% 代表数字
^ 代表特殊字符
crunch参数
一般拿到这种命令行的工具,都会用参数-h看以下帮助说明:
crunch -h
可以看到基本的使用语法:
crunch [min length] [max length] [options]
如果要看完整的说明文档,要用man命令:
man crunch
最简单的使用就是生成一串固定英文字符跟一串固定数字:
crunch 14 14 -t zhangsan%%%%%% -o aa.txt
其中-t参数用于指定输出完整字符串的格式,后面跟的一些固定的字符和有特殊意义的字符,其中有特殊意义的字符对应具体用处如下:
-b:指定文件输出的大小,避免字典文件过大
-c:指定文件输出的行数,即包含密码的个数
-d:限制相同元素出现的次数
-e:定义停止字符,即到该字符串就停止生成
-f:调用库文件(/etc/share/crunch/charset.lst)
-i:改变输出格式,即aaa,aab -> aaa,baa
-I:通常与-t联合使用,表明该字符为实义字符
-m:通常与-p搭配
-o:将密码保存到指定文件
-p:指定元素以组合的方式进行
-q:读取密码文件,即读取pass.txt
-r:定义重某一字符串重新开始
-s:指定一个开始的字符,即从自己定义的密码xxxx开始
-t:指定密码输出的格式
-u:禁止打印百分比(必须为最后一个选项)
-z:压缩生成的字典文件,支持gzip,bzip2,lzma,7z
除了这些有特殊意义的字符,还可以直接指定要使用的字符,比如这样:
crunch 1 2 abc
在设定长度后直接跟一个字符串,输出的字典中的字符串都会用命令中传入的字符进行构造。
-o参数用于指定将生成的字符串存入到特定的文档。可以直接传文件名,表示输出文件的名称。也可以跟一些参数,让工具自动生成文件名,比如:
crunch 1 2 abc -o START
遇到字典特别大,需要限制每个字典文件大小的时候,可以使用-b参数:
crunch 14 14 -t zhangsan%%%%%% -o START -b 5mb
除了指定输出字典文件大小外,也可以指定文件中字符串的个数(行数),使用-c参数:
crunch 14 14 -t zhangsan%%%%%% -o START -c 400000
当确认字典中的字符串不存在两个连续字符连续的时候(例如是5位的两个中文拼音,中文拼音不会存在两个相同的拼音字符),可以使用-d参数,表示限制相同字符出现的次数,如果传1就表示不会出现连续两个相同的字符:
crunch 5 5 -t @@@@@ -o START -d 1
kali提供了一些常用的字符集用于制作字典,字符集文件:
cat /usr/share/crunch/charset.lst
crunch可以通过-f参数使用这个字符集:
crunch 5 5 -t @@@@@ -o START -d 1 -f /usr/share/crunch/charset.lst hex-lower
-f参数后不仅要传字符集文件,还要传文件中具体的字符集名称。
当你已经知道目标字符串的组成内容,但是不知道排列顺序时,可以使用-p参数,它的作用是通过指定的字符串,输出所有可能的组合方式:
crunch 8 8 -p 12345@cy > aa.txt
需要注意两点,当使用-p参数的时候,入参中的最小、最大字符长度其实是不会生效的,但是必须传;另一个需要注意的是,-p参数必须放在命令行的最后。
-p参数还有种用法,将特定字符串作为也给整体进行组合:
crunch 1 1 -p zhang san 123 > aa.txt
crunch的组合规律其实是能猜测出来的,当你觉得crunch输出的字典在某一个字符串前面的内容是有问题的,不想让这些有问题的字符串出现在字典中,可以使用-s参数,比如这样:
crunch 8 8 12345@cy -s 1111111y -o aa.txt
-s参数和-p参数两者是互斥的,虽然同时使用也不会报错,但是-s参数的功能会失效。
当目标字符串其中的几个字符串是有特殊意义的,肯定是组合在一起使用的,可以使用-q参数,读取一个文件,里面的每一行都会作为一个整体进行组合,例如这样:
crunch 1 1 -q pass.txt > aa.txt
如果按照设定的规律生成的字典文件非常大,除了前面的-b参数,将一个字典文件拆分成多个文件,还可以使用-z参数,将字典文件压缩,支持对压缩方式有以下几种:
crunch 1 1 -q pass.txt -o aa.txt -z 7z
最后再罗列一些各个参数:
总结
其实可以生成字典的工具很多,就连python都可以自己手写脚本来生成字典。但是kali中有预装的工具,为什么不用呢,而且crunch的使用也的确非常方便。
crunch的使用过程中除了几个互斥的参数,其他参数都是可以组合使用的。根据收集到的信息,制定合理的字典生成规则,最终得到的字典文件能够帮助我们更快、更高效地达成目的。