pydictor爆破字典生成指南
0x00:简介
pydictor是一个使用python语言开发,遵循GPLv3协议的开源命令行工具,主要用来帮助安全研究人员生成称心如意的暴力破解字典。
以功能强大、简洁实用、适用场景多、自定义程度强为开发目标。
开源地址:pydictor
0x01:特点与功能
今天主要是讲pydictor如何结合渗透测试过程常见的场景使用,特点与功能REAME有详细讲解,下面只梳理一下大概脉络,方便下文的理解。
特点:
1. 完全使用python的原生库写成,不需要额外安装其它任何的python模块; 2. 同时支持python 2.7+ 和python 3.4+版本,可在Windows、Linux和Mac平台上运行; 3. 可自定义化程度高,留出很多可配置规则的文件; 4. 爆破必备,新老皆宜.
功能:
1. 基于三大字符集(d:数字 L:小写字母 c:大写字母)的基础字典; 2. 基于自定义字符集(包括特殊字符)的字典; 3. 排列组合字典(几个字符或字符串的所有排列可能); 4. 用配置文件或者符合pydictor字典语法的字符串直接生成字典; 5. 析取网页中可能有意义的原始单词字典; 6. 基于关键词生成针对性密码字典; 7. 基于性别生成中国公民身份证后4/6/8位字典; 8. 生成一段时间内的生日字典(自定义位数); 9. 用pydictor的handler功能润色下自己的字典; 10.基于个人信息和规则生成社会工程学字典(呃,蹭下知名度,本质还是基于关键词,重在密码规则模式) 11.一系列和字典的整个生命周期有关的内置工具; 包括字典合并、合并后去重、字典去重、单词频率统计、安全擦除字典; 12.一系列和生成优化字典有关的选项; 包括自定长度范围、字典加前缀、加后缀、编码或加密字典、用1337模式、控制字典所用规则的程度、根据数字、字符和特殊字符的个数或种类的多少来筛选字典、用正则表达式来筛选字典等。
0x02:使用场景
早期开发是为了让功能匹配使用场合,后期开发是让具体场景拥有对应的功能。
01:字典合并
字典都不是凭空捏造或生成的,一般都会参考前辈们公布的字典。所以,先收集百八十个字典,放到一个目录下,把字典合并起来吧。
1. 合并目录/网站路径爆破字典 2. 合并子域名字典 3. 合并用户名字典 4. 合并弱密码字典 5. 其它各式各样的字典
python pydictor.py -tool combiner /my/dict/dirpath -o comb.txt
02:词频统计
但是有时候我们通常不需要那么大的字典,选合并后字典的出现频率最高的前1000条保存吧。筛选出
最常用的网站路径/子域名/用户名/弱密码/...
修改lib/data/data.py中counter_split变量指定的分隔符(默认"\n"),也可以统计其它字符分隔的字典词频.
python pydictor.py -tool counter vs comb.txt 1000
03:去除重复项
面对合并后的超大字典,还是不舍得只要频率高的词,路径字典有时候还是多多益善。去重下,照单全收
python pydictor.py -tool uniqifer
comb.txt --output uniq.txt
或者直接合并加去重
python pydictor.py -tool uniqbiner /my/dict/dirpath --output uniq.txt
04:枚举数字字典
准备好字典了,拿最基础的试试手
1. 爆破4位或6位数字手机短信验证码 2. 爆破用户名ID值
生成4位纯数字字典
python pydictor.py -base d --len 4 4
05:简单用户名字典
不能确定是否存在某用户时,试试1位到3位的拼音字典,加上123456这样的几个弱口令,说不定就有意外收获:
python pydictor.py -base L --len 1 3 -o dict.txt
06:后台管理员密码字典(明文传输)
经常遇到的测试场景了,就是一个登录页,把收集到的信息都用上,生成后台爆破字典,比如
域名:test.land.com.cn 编辑名:张美丽、Adaor、midato 公司名:上海美丽大米有限责任公司(如有雷同纯属巧合) 座机:568456 地址:xxx园区A座312室
把自己常用的弱口令字典复制到wordlist/Web 目录下,最终生成的字典会包含它们;
然后把下列信息写入/data.txt
test land zhangmeili meili zml Adaor midato meilidami mldm shmldm 568456 A312
生成字典:
python pydictor.py -extend /data.txt --level 3 --len 4 16
弱口令字典 + 部分信息 + 生成规则 + level 3,最终生成了七万多条密码,一部分密码如下:
07:后台管理员密码字典(前台普通加密)
有时候网站的密码可能不是直接明文传输过去的,程序员会用js简单加密下再传输过去,比如base64编码、md5加密,这时候可以用--encode参数生成加密字典
python pydictor.py -extend /data.txt --level 3 --len 4 16 --encode b64
python pydictor.py -extend /data.txt --level 3 --len 4 16 --encode md5
08:后台管理员密码字典(前台js自定义加密)
高级点的程序员,还喜欢前端自定义个js加密方法,把用户名和密码加密后传输过去,比如
这时候,普通爆破工具基本都无能为力了,但是却依旧可以通过pydictor来生成字典;
修改/lib/fun/encode.py 文件的 test_encode()函数,用python语法仿照上图的加密方式再实现一遍加密:
def test_encode(item): c = chr(ord(item[0]) + len(item)) for i in range(1, len(item)): c += chr(ord(item[i]) + ord(item[i - 1])) return quote(c)
然后运行命令,生成按照前端js加密方法加密后的密码字典,可以直接用burpsuite加载
python3 pydictor.py -extend /data.txt --level 3 --len 4 16 --encode test
最后通过这种方式生成符合前端加密方法的用户名字典,先探测出存在的用户名,再结合几个弱密码,爆破出来100多个弱口令。
需要注意的是,一般生成加密字典前要生成一个没加密的字典,因为每一项在文件中的顺序是一致的,所以爆破出来密码后,可以通过行数对照去没加密的字典中查找明文。
09:复杂格式的字典
例如,你通过shoulder hack和一些信息,猜到别人的密码大概是
Cxhai【三位或四位数字】_abc123@【qq,163,wy,mail中的一个】,然后md5加密的值
这种复杂格式的字典,pydictor也可以轻松的生成
python pydictor.py --conf "Cxhai[0-9]{3,4}<none>_abc123@[qq,163,wy,mail]{1,1}<none>" --encode md5
没加密前的字典:
最终加密后的字典:
10:社会工程学字典
通过配置文件定义的规则和一部分内置代码逻辑,你可以输入一些关于个人的信息,生成关于某个人可能用的密码,比如,我只知道一个的如下信息
姓名: 景林 生日:1997年7月16日 以前用过密码:Jlin520
然后一波操作,生成了四万多条密码
嫌密码太多了?没事,只要长度6-16的,级别设置大点,密码会少很多;
查看下当前配置,重新生成字典,只有三千多条了
11:处理自己的字典
退一万步来讲,上面的字典都帮不了你,但是pydictor的handler功能还是可以帮你根据具体的使用场景来处理自己的字典,让自己原本的字典适用各种场合。
比如:
对方密码策略要求是6到16位;必须有数字和字母,不允许有特殊字符;前端js对密码base64编码后传输到后端。
可以用下面的命令处理自己原先的字典raw.txt,生成符合本次爆破场景的字典:
python pydictor.py -tool handler /wordlist/raw.txt --len 6 16 --occur ">0" ">0" "<=0" --encode b64 -o /wordlist/ok.txt
0x03:结语
pydictor的常见使用场景都简单介绍过了,另外还有一些特殊字典,比如身份证后几位、生日日期字典;内置的专门用来破解SSH弱口令的键盘模式字典 等等,就不一一介绍了,相信自己看看就能理解。
结合目标的爆破场景,合理使用pydictor,人人都是爆破小能手。
参考
https://landgrey.me/skilled-to-using-pydictor/
管理员已关闭本篇文章评论!