渗透测试中Fuzzing字典生成详解

  • A+
所属分类:安全博客
摘要

帮好友的新手培训写的文章,发上来滥竽充数,平常不怎么写东西    渗透测试过程中,很多场景需要我们自己生成字典,例如对网站目录的猜解、弱口令的破解、文件名的猜解等等。工欲善其事,必先利其器,有一个好的规则的字典,一定能起到事半功倍的效果。


帮好友的新手培训写的文章,发上来滥竽充数,平常不怎么写东西

简介

    渗透测试过程中,很多场景需要我们自己生成字典,例如对网站目录的猜解、弱口令的破解、文件名的猜解等等。工欲善其事,必先利其器,有一个好的规则的字典,一定能起到事半功倍的效果。

    本文仅仅抛转引玉,介绍我们实际渗透测试过程中,常用的Fuzzing字典生成的工具和方法,挑选出高速、快效的、有用的方案,供大家一起学习交流和参考。

Crunch

    首先是Crunch工具,这是一款基于线上和线下可以同时使用的工具,非常方便,可以根据实际要求生成不同的词组字典,你可以指定生成字符的最大长度和最小长度,也可以为其提供一个字符集,方便在创建字典时使用。然后Crunch将指定要求的字典,同时将我们的要求放在第一优先级,通过不同的组合和排列去创建所有可能的字典字符。

    kali 中自带 Crunch,如果在其他 Linux 机器上我们也可以自己下载安装,下载地址:

https://sourceforge.net/projects/crunch-wordlist/

    安装:

# tar zxvf crunch-3.6.tgz # cd crunch-3.6 # gcc -Wall -lm -pthread -std=c99 -m64 -D_LARGEFILE_SOURCE -# D_FILE_OFFSET_BITS=64 crunch.c -o crunch -lm # make install

    我们首先来看下Crunch的基本使用方法和参数:

crunch <min-len> <max-len> [<charset string>] [options]

    其中 options 可以指定字符集,可以指定字符和保存目录等等

<min-len> – 要开始的最小长度字符串。即使不使用参数的值,也需要此选项  <max-len> – 要开始的最大长度字符串。即使不使用参数的值,也需要此选项  <character-set> – 创建字典时指定的字符集  <charset string> – 指定字符集设置,否则将使用缺省的字符集设置。缺省的设置为小写字符集,大写字符集,数字和特殊字符(符号)。  -c <num> - 指定写入输出文件的行数,也即包含密码的个数  -d <char> - 限制出现相同元素的个数(至少出现元素个数)  -e <string> - 定义停止生成密码,即End -t <pattern>- 表达式模式  -p <string1,string2> - 以排列组合的方式来生成字典  -o <path> – 指定保存字典文件

    生成一个6位数字的字典,并保存到本地:

[email protected]:~# crunch 6 6 0123456789 -o number.txt

渗透测试中Fuzzing字典生成详解

    看下生成的字典文件,显示前100行:

[email protected]:~# sed -n '1,100p' number.txt 000000 000001 000002 000003 000004 000005 000006 000007 000008 000009 000010 000011 000012 000013 000014 000015 000016 000017 000018 000019 000020 000021 000022 000023 000024 000025 000026 000027 000028 000029 000030 000031 000032 000033 000034 000035 000036 000037 000038 000039 000040 000041 000042 000043 000044 000045 000046 000047 000048 000049 000050 000051 000052 000053 000054 000055 000056 000057 000058 000059 000060 000061 000062 000063 000064 000065 000066 000067 000068 000069 000070 000071 000072 000073 000074 000075 000076 000077 000078 000079 000080 000081 000082 000083 000084 000085 000086 000087 000088 000089 000090 000091 000092 000093 000094 000095 000096 000097 000098 000099  

    看下实际生成字典耗时:

real    0m3.174s user    0m0.082s sys    0m0.074s 

    可以看到,生成10W字典实际CPU只占用了0.074s,磁盘I/O读写占用了3.1s,我们再生成100W数据看看

渗透测试中Fuzzing字典生成详解

real    0m4.603s user    0m1.158s sys    0m0.431s 

    100W数据生成也仅仅只用了4.6s,实际测试中Fuzzing前的字典准备将会非常的快速和高效。

    -t 参数可以指定我们生成的字典的字符的模式,用表达式符号来输入

@ 插入小写字母 , 插入大写字母 % 插入数字 ^ 插入特殊符号

    下面我们来看一道ctf题,实际运用下:

渗透测试中Fuzzing字典生成详解

    题目提供了一个cap包,给了信息妹子今年(2014年)上大三,说明妹子应该是21岁,那么出生年份应该是1993年或者1994年,具体的我算不出来,感觉自己对年份计算完全一窍不通,不过没事,反正就这两年,都试试就好了,我们生成两个字典:

[email protected]:~# crunch 8 8 -t 1993%%%% -o date1.txt  [email protected]:~# crunch 8 8 -t 1994%%%% -o date2.txt 

    使用 -t 参数和 % 来占位生成数字组合

    然后拿 aircrack-ng 和我们生成的两个字典跑一下

[email protected]:~# aircrack-ng -w date2.txt wifi-crack.cap

    可以看到,跑date2.txt的时候,成功跑出了wifi密码,解密了CTF题目:

渗透测试中Fuzzing字典生成详解

    正确的Flag是:19940808,不过记得md5()一下再提交,根据题目要求。

Cewl

    Cewl是一款用ruby开发的基于爬行URL来获取信息生成字典的工具,它使用指定URL并爬取2个链接的深度(默认情况下),我们也可以自己指定增加或减少爬行深度,并且cewl将自动化查询有可能成为密码字典的每个词组,生成一个词组表,用作fuzzing测试。

    我们来看一下cewl的基本用法和参数:

cewl [OPTION] <url>  [OPTION]:  -d:蜘蛛爬行深度,默认为2  -m:最小单词长度,默认为3  -w:将输出写入文件  -u:指定User-agent  -a:包含元(meta)数据  -e:包含电子邮件地址  -c:统计爬取的每个单词的计数  -o:爬行其他网站 

    对网址 www.baidu.com 进行爬取生成字典:

[email protected]:~# cewl www.baidu.com -e -c -v -d 2 -w dict.txt

渗透测试中Fuzzing字典生成详解

    如图cwel会自动对我们提供的网站进行深度为2的信息爬取,然后生成dict.txt字典文件,查看一下:

渗透测试中Fuzzing字典生成详解

    后面的数字就是我们的 -c 参数实际效果,统计词组出现的次数,实战的fuzzing测试中,包括社会工程学攻击中,这是我们常常用到的。

CUPP

    CUPP是基于python开发的跨平台交互式字典生成工具,它在密码破解方面提供了非常个性化的方案,人们通常会表现出倾向于通过添加生日、周年纪念日、宠物的名字等等来使密码个性化,而CUPP则专注于此弱点来破解密码。在创建字典之前,CUPP会询问我们有关测试目标的一些必要信息,通过参数 -i 与CUPP人机交互,传递生成字典的信息。

    CUPP会根据输入的信息自动化智能生成相关性词组组合的社会工程学字典。在实际渗透测试的时候,我们常常碰见fuzzing的局限,但是生成泛字典来进行测试量又太大,此时就需要生成binding具体目标的关联性社会工程的信息库,来极大的提升fuzzing测试的效率和速度。

    CUPP需要我们自己下载安装,Kali系统并不自带:

    Github

[email protected]:~# git clone https://github.com/Mebus/cupp.git

    Apt

[email protected]:~# apt-get install cupp

    Yum

[email protected]:~# yum install cupp

    安装完成后查看CUPP:

渗透测试中Fuzzing字典生成详解

    基本语法很简单,我们先来看下参数:

cupp [options]  -v   查看cupp版本号  -l    从线上下载词组  -i    使用交互式的提问创建用户密码字典  -w   导入自定义字典

    主要使用到的就是 -i 参数,进行人机交互:

[email protected]:~# cupp -i  [+] Insert the informations about the victim to make a dictionary [+] If you don't know all the info, just hit enter when asked! ;)  > First Name: zhangsan > Surname: li > Nickname: han > Birthdate (DDMMYYYY): 02051996   > Partners) name: zhangwu > Partners) nickname: li > Partners) birthdate (DDMMYYYY): 02061965   > Child's name: > Child's nickname: > Child's birthdate (DDMMYYYY):   > Pet's name: milky > Company name:   > Do you want to add some key words about the victim? Y/[N]: Y > Please enter the words, separated by comma. [i.e. hacker,juice,black], spaces will be removed: kali,linux > Do you want to add special chars at the end of words? Y/[N]: Y > Do you want to add some random numbers at the end of words? Y/[N]:N > Leet mode? (i.e. leet = 1337) Y/[N]: n 

渗透测试中Fuzzing字典生成详解

    如图我们可以看到,CUPP交互会问你的姓名、家庭姓名、、父母姓名、父母生日、宠物姓名、孩子姓名和生日、公司名称等等信息

    一步步输入,如果没有就跳过

Do you want to add some key words about the victim

    这里是添加自定义的攻击向量,提供自己搜集来的特定的关键词

Do you want to add special chars at the end of words

    这里是问我们是否添加特殊符号词组

Do you want to add some random numbers at the end of words

    这里是问我们是否添加随机的数字词组

Leet mode? (i.e. leet = 1337)

Leet mode是问我们是否使用黑客语,黑客语通常是把拉丁字母转变成数字或是特殊符号,例如E写成3、A写成@等。或是将单字写成同音的字母或数字,如to写成2、for写成4等等。

    看下我们如图交互下生成的字典文件信息:

渗透测试中Fuzzing字典生成详解

Pydictor

    Pydictor是一款跨平台的轻量级字典爆破生成工具,基于python开发,支持python2、python3,对于快速建立密码字典有很大作用,快速高效,非常强大实用。

    并且Pydictor可以合并密码字典,词频统计,去重,枚举数字字典。支持高度自定制,支持base64加密,我们可以通过修改配置文件、添加自己的字典、使用黑客语模式、按长度选择等方式生成高度自定义和复杂的字典词组列表,日常可以帮助我们更有效的进行测试。

    Pydictor是第三方工具,需要我们自己下载安装,Kali系统并不自带:

    Github

[email protected]:~# git clone https://github.com/LandGrey/pydictor.git

    Apt

[email protected]:~# apt-get install pydictor

    Yum

[email protected]:~# yum install pydictor

    安装完成后运行Pydictor:

渗透测试中Fuzzing字典生成详解

    基本参数:

pydictor.py [options]            -base        [type]            -char        [custom_char]            -chunk       [chunk1] [chunk2] ...            -extend      [string_or_file]            -plug        [birthday,pid6,scratch,pid4,pid8,ftp]            --conf       [expression_or_file]            --sedb            -o,--output  [directory]            -tool        [shredder,combiner,counter,uniqifer,uniqbiner,handler,comparer,hybrider]            --len        [minlen] [maxlen]            --head       [prefix_string]            --tail       [suffix_string]            --encode     [none,sha1,b64,url,sha512,des,rsa,b32,b16,test,sha256,execjs,hmac,md516,md5]            --occur      [letter] [digital] [special]            --types      [letter] [digital] [special]            --repeat     [letter] [digital] [special]            --regex      [regex]            --level                  --leet                   --dmy   -base 基本类型  -char 字符型  -chunk 块  -extend 延伸  -plug 插件  --conf 基于配置文件的词汇表  -sedb 社会工程学  -o 指定生成的txt的文件路径  -tool 使用工具 如·:组合,比较器,计数器,处理器,uniqbiner,uniqifer  --len 长度范围  --head 添加头文件  --tail 添加尾部文件  --encode 加密功能模块  --occur 发生功能模块  --types 类型功能模块  --regex 正则表达式函数  --level 等级  --leet 黑客语表 

    输入以下命令生成一个6位的数字组合字典:

[email protected]:~/pentest/pydictor# ./pydictor.py --len 6 6 -base d -o dict.txt

-base     参数表示基于生成的类型,Pydictor的base主要有:

base 含义 范围
d 数字 [0 - 9]
L 小写字母 [a - z]
c 大写字母 [A - Z]
dL 数字+小写字母 [0-9 a-z]
dc 数字+大写字母 [0-9 A-Z]
Lc 小写字母+大写字母 [a-z A-Z]
dLc 数字+小写字母+大写字母 [0-9 a-z A-Z]

    查看生成的字典:

渗透测试中Fuzzing字典生成详解

    Pydictor强大的地方在于支持自定义多种encode编码:

Encode 内容
none 默认方式, 不进行任何编码
b16 base16 编码
b32 base32 编码
b64 base64 编码
des des 算法
execjs 执行本地或远程js函数
hmac hmac 算法
md5 md5 算法输出32位
md516 md5 算法输出16位
rsa rsa 算法
sha1 sha-1 算法
sha256 sha-256 算法
sha512 sha-512 算法
url url 编码
test 自定义编码方法

    让我们用指定rsa算法,对刚才的字典重新生成:

[email protected]:~/pentest/pydictor# ./pydictor.py --len 6 6 -base d --encode rsa -o dict_rsa.txt

渗透测试中Fuzzing字典生成详解

    看下生成的dict:

渗透测试中Fuzzing字典生成详解


    以上几种是我们测试中经常需要用到的,非常高效快速实用的字典生成工具和方案,下面再介绍下Dymerge,这是一款字典集合工具,可以将我们之前生成的任意数量的字典合并到一起。

    Dymerge也是第三方工具,我们先git一下:

[email protected]:# git clone https://github.com/k4m4/dymerge.git

    运行:

渗透测试中Fuzzing字典生成详解

    使用方法:

[email protected]:# ./dymerge.py [dict_file] [dict_file] [dict_file]... -o [dict_file_save]  <dict_file> – 提供要合并的第一个字典的路径 <dict_file> – 提供要合并的第二个字典的路径 <dict_file> – 提供要合并的第三个字典的路径 -o – 表示将保存字典的路径 <dict_file_save> – 合并后字典保存的路径 

    合并前面我们生成的两个字典,保存为dict3.txt:

[email protected]:~/pentest/pydictor/dymerge# ./dymerge.py /root/pentest/dict/dict1.txt /root/pentest/dict/dict2.txt -o dict3.txt DyMerge 0.2 Nikolaos Kamarinakis (nikolaskama.me)   ____                                                   //  _`/           /'/_/`/ / / /// /  __  __//      /     __   _ __    __      __   / / / / /// /// / / /__/ /  /'__`///` __//'_ `/  /'__`/    / / /_/ / / /_/ / / /_// ///  __// / //// /_/ ///  __/     / /____///`____ / /_// /_/ /____// /_// /____ / /____/      //___/  `/___/  //_/ //_///____/ //_/ //____/ //____/                 //___/                       //____/                 //__/  Made with <3 by k4m4  /_/__/  [+] Starting Dictionary Merge Task [+] Reading Dictionaries [+] Merging Dictionaries [+] Task Successfully Complete [+] Final Dictionary Saved As --> dict3.txt Comp/tional Time Elapsed: 0.017565 

渗透测试中Fuzzing字典生成详解


码字不易,感谢阅读。

来源:明天 จุ๊บ https://ruo.me/

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: