生成花式密码

安全工具 2017-11-29

大家好,我是木禾,第一次给信安之路投稿哈,因为中午刚好看到有关于 pydictor 的文章,咦,有用过。几个月前也在烦生成密码的问题,当时认真看过 pydictor 的代码,做了一些改进,因为这个生成工具没有办法实现的一个点:

如正常一个密码格式 password@123 ,但我想随机生成如下几种密码

大写 Password@123

替换 p@ssw0rd@123

是没有办法,所以当时就通过对代码的编码方式进行改进,而达到这个效果。具体方法请看文章,嘿嘿。

起因

如果有人问我,你会密码爆破吗?

相信你也会像我一样毫不犹豫地回答:会啊,很简单。

但是有一天,当我用几万个密码去爆破的时候还爆不出来的时候,我知道我错了。仔细想想,一直以来的密码爆破都是用常见弱口令字典,用 Top1000 之类去爆,而收集的一些信息,或者自己构思出来的一些密码组合,却不能很好地去实现。所以以本文之见,说说密码猜测。

密码

固然,弱口令字典是爆破必备。而当你掌握了一定的信息之后,会开始思考,用户会怎么去组合一个密码呢?如果用户稍微会有点安全意识,会怎么去加强密码呢?比如一些企业对密码复杂度作了要求之后,至少都要 8 位,并且有特殊字符;比如一些比较有安全意识的人,密码会有大小写,不同的组合等等。这样的环境下,如何去猜测用户的密码呢?当然,这需要有一定的经验积累,我从以往接触过的密码来分析,不足之处,还望指点一二。

个人

多个账户用同一套密码。

跟个人信息有关,如姓名,手机号,身份证后 6 位,出生年月等

企业

首先看看现在企业一般是什么要求:

“口令复杂度策略为:口令长度至少为 8 位,并由数字、大小字母与特殊字符组成。”

很多企业的密码都有加强,一般是 6 位以上。

临时文件

多与时间有关。

构造密码

这里我们使用一个工具 —— pydictor 爆破字典生成指南

设计模块

先给几个密码:

qyoa#123

abc@1234

j2ee@pkpk

vm1234!@#$

root@#

看到这些密码,你大概可以看出他们的规律了吧,这些是一些企业的密码,用来登录服务器的。其形成原因,有两点:

第一点:一般是系统名开头。从来没见过直接特殊字符开头吧。

第二点:由系统名开始后,又因为企业对密码长度和字符的要求,会加入字符和数字,所以后面就有了 @123,或 #123,嘿嘿,懂了吧。

所以我们往下看:

wps98D5.tmp.jpg

通常我们的密码不超过四个模块,超三个模块最常见。可以看到上面的例子中,像 qyoa#123 ,可以理解为由三个模块 qyoa#123 组成。由此类推其它例子。

而这四个模块里,也可以有一些规律。

模块1:通常是常见字符,如 admin、root、password、系统名等。

模块2:通常是特殊字符,如 @,@#,!@#$ 等。

模块3:第三个种类会多一点在,通常是个人信息,时间或数字。

模块4:通常是数字,代表序号。

这时我们可以使用 pydictor 来生成字典,pydictor 中有一个配置模式:

wps98D6.tmp.jpg

第一步:先想要组合怎么样的密码,比如现在要组合一个四个模块的密码,各个模块分别为常用字符、特殊字符、猜测用户名、序号。

第二步:配置 pydictor\funcfg 文件夹下 build.conf 文件,要把原来的那语句注释掉。

wps98D7.tmp.jpg

写入密码规则为 [admin,root,password]{1,1}<none>[!,@,#,$]{1,4}<none>liqiang[1,2,3]{1,1}<none>

第三步:执行 pydictor –confpython pydictor -conf

wps98D8.tmp.jpg

可以看到在 result 文件夹下生成了字典:

wps98D9.tmp.jpg

嗯哼,内容正是我想要的。

加些变换

除了上面的组合方法,我们再看看其它一些密码:

Dgdg@#123

P@ssw0rd

Admin@

Pysy#@dm!n

你会发现像这样的,是基于原来的基础字符上做了变换,比如起始大写、形近字替换等。所以我们上一部分做的还不够,要在上一部分的基础上做一些变换。

在 pydictor 中有一个 leet 模式,可以做替换,不过不支持上面的配置模式。怎么办呢?我突然发现配置模式中的编码方式可以自定义,那我们就自己写吧。

wps98DA.tmp.jpg

首字母大写

1、添加代码:

\lib\fun\encode.py 最后部分,写入如下代码:

wps98DB.tmp.jpg

1.png

修改 encode type

不然会识别不出这个编码名。在 \lib\data\data.py 第225行,加入 , 'HeadUpper' : HeadUpper_encode

wps98DC.tmp.jpg

build.conf 处写入密码规则

[admin]{1,1}<HeadUpper>

wps98DD.tmp.jpg

2、执行命令 pydictor --conf

wps98DE.tmp.jpg

可以看到成功生成了首字母大写的密码:

wps98DF.tmp.jpg

形近字替换

按照上面的流程,我们做一个形近字替换:

\lib\fun\encode.py 添加代码

wps98E0.tmp.jpg

2.png

修改 encode type

\lib\data\data.py 第225行,加入 , 'leet' : leet_encode

wps98E1.tmp.jpg

\funcfg\leet_mode.conf 下配置你要做的替换

wps98E2.tmp.jpg

build.conf 处写入密码规则

[admin,password]{1,1}<leet>

wps98E3.tmp.jpg

执行命令 pydictor --conf

wps98F4.tmp.jpg

哈哈,得到了我们想要的替换结果了。

组合变换

如果同时要用到上面两种变换怎么办?很简单,加一个新的编码函数来调用上面这两个编码就行了。

wps98F5.tmp.jpg

最终最终

最终最终,我们可以试试多模块加变换的效果:

wps98F6.tmp.jpg

运行之后生成:

wps98F7.tmp.jpg

嘿嘿,完美。


本文由 myh0st 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论