前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生成花式密码

生成花式密码

作者头像
信安之路
发布2018-08-08 14:25:31
8270
发布2018-08-08 14:25:31
举报
文章被收录于专栏:信安之路信安之路

大家好,我是木禾,第一次给信安之路投稿哈,因为中午刚好看到有关于 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,嘿嘿,懂了吧。

所以我们往下看:

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

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

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

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

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

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

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

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

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

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

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

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

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

加些变换

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

Dgdg@#123 P@ssw0rd Admin@ Pysy#@dm!n

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

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

首字母大写

1、添加代码:

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

修改 encode type

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

build.conf 处写入密码规则

[admin]{1,1}<HeadUpper>

2、执行命令 pydictor --conf

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

形近字替换

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

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

修改 encode type

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

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

build.conf 处写入密码规则

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

执行命令 pydictor --conf

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

组合变换

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

最终最终

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

运行之后生成:

嘿嘿,完美。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 起因
  • 密码
    • 个人
      • 企业
        • 临时文件
        • 构造密码
          • 设计模块
            • 加些变换
            • 最终最终
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档