生成花式密码

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

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

组合变换

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

最终最终

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

运行之后生成:

嘿嘿,完美。

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2017-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

学会这二十个正则表达式,能让你少些1000行代码!

正则表达式,是一个强大且高效的文本处理工具。通常情况下,通过一段表达准确的表达式,能够非常简短、快速的实现复杂业务逻辑。 因此,正则表达式通常是一个成熟开发人员...

3707
来自专栏腾讯移动品质中心TMQ的专栏

内存泄漏漫谈

对于C/C++来说,内存泄漏问题一直是个很让人头痛的问题,因为对于没有GC的语言,内存泄漏的概率要比有GC的语言大得多,同时,一旦发生问题,也严重的多,而且,内...

2897
来自专栏极客编程

Node.js 4.0的ES6新特性。

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量...

1162
来自专栏CSDN技术头条

QtQuick 系列教程之 QML 与 C++ 交互

QML 作为一种灵活高效的界面开发语言已经越来越得到业界的认可。QML 负责界面,C++ 负责逻辑,这也是 Qt 官方推荐的开发方式。那么 QML 与 C++ ...

2223
来自专栏take time, save time

[细节决定B度]之回首一瞥cout<<"Hello,world"<<endl;

     都说细节决定成败,我觉得的编程来说,特别是面试的时候细节最能决定的是关键时候你能装的程度,所以我想有个系列记录我遇到的各种我遇到的细节问题,以备不时之...

3547
来自专栏数据小魔方

左手用R右手Python系列16——XPath与网页解析库

最近写了不少关于网页数据抓取的内容,大多涉及的是网页请求方面的,无论是传统的RCurl还是新锐大杀器httr,这两个包是R语言中最为主流的网页请求库。 但是整个...

3405
来自专栏zhisheng

0Day技术分析-2-栈溢出原理

栈溢出原理 1 什么是栈 1.1. 缓冲区 我们向一个杯子里倒水,如果我们倒的水超出了杯子的容量,水就会溢出来。 在我们写程序的时候也可能会用到一些临时的变量 ...

3966
来自专栏WeTest质量开放平台团队的专栏

Unity手游崩溃异常如何捕获--C#及JVM捕获

C#脚本未捕获的异常,与Android和Native未捕获异常很大的区别是,未捕获异常不会照成引用的闪退。所以,C#脚本的异常危害相对较小,但是同样更加容易存在...

2114
来自专栏技术博客

编写高质量代码改善C#程序的157个建议[用抛异常替代返回错误、不要在不恰当的场合下引发异常、重新引发异常时使用inner Exception]

  自从.NET出现后,关于CLR异常机制的讨论就几乎从未停止过。迄今为止,CLR异常机制让人关注最多的一点就是“效率”问题。其实,这里存在认识上的误区,因为正...

1082
来自专栏horstxu的博客

一图弄懂ASCII、GB2312、GBK、GB18030编码

最近项目中涉及到了解析文件内容的需求,文件中全都是中文,由于这一过程中碰到的乱码问题实在过多,所以特地花时间研究了一下中文编码。本文中先介绍一下ASCII,GB...

10.6K6

扫码关注云+社区

领取腾讯云代金券