社会工程学密码字典

社会工程学密码字典是破解密码的基础,一份好的字典可以在数据破解的过 程中起到事半功倍的效果。利用搜集到的信息,并依据人们设定密码的规律和习 惯,生成的社会工程学字典在破解的过程中效果显著。在美剧《黑客军团》中, 主角Elliot在获取私人账户信息时,用得最多的就是社会工程学密码字典。

7.1.1    字典的生成

社会工程学密码字典的内容主要分为两个部分:

· 常见的用户密码和默认密码。

·利用管理员信息自动生成的密码。

假设我们获取到了目标系统的管理员名字叫 张伟 ,我们可以通过搜索引擎 以及目标的社交网络查询到他的基本信息。然后可以新建一个名为

person_information的文件来存放个人的信息,内容如图7-1所示。

社会工程学密码字典_第1张图片

7-1    个人信息示例

此处所展现的部分信息只是用于演示,在实际情况下,读者可以搜集更多与 目标有关的信息。搜集到的信息越多,得到的字典中所包含正确的密码概率就越 大。同时,我们还需要一份热门的常用密码字典,里面除了包含经常使用的密码 外,还有包含许多服务以及软件的默认密码。读者可以访问公众号链接7-1下载各 种类型的密码字典文件,如图7-2所示。

这里选用的是名为darkweb2017-top10000.txt的字典文件,将它下载到本地并 重命名为TopPwd 。此时就有了2个文件,一个是包含目标个人信息的文件

person_information ,另一个是包含常用密码和默认密码的文TopPwd

社会工程学密码字典_第2张图片

7-2    密码字典下载列表

使用Python来编写生成密码字典的脚本需要用到itertools模块。这个模块是   Python 内置的,用法简单且功能强大。下面先介绍itertools ,这个模块里提供了很 多函数,此处主要讲解3个需要用的函数:

·permutationiterable r ):返回iterable 中元素所有组合长度为r 的项目序   列,r省略则默认取iterable 中项目的数量。例如itertools.Permutations'abc' 3), “abc” 中按顺序排列组合长度为3进行输出,即abc acb bac bca cab cba

·product*iterables[ repeat]):可以获得多个循环器的笛卡儿积。例如

product "123" "abc" ),得到的结果是1a 1b 1c 2a 2b 2c 3a 3b 3c

·repeatobject[ times]):这个函数的作用就是重复元素,未指定times则会 一直重复。例如repeat100),100 100 100… 

接下来编写一个密码字典的生成脚本,具体步骤如下。

1)写入脚本信息,导入相关模块:

#!/usr/bin/python3

# -*- coding: utf-8 -*-

import itertools

2)创建ReadInformationList() 函数,读取用户的个人信息,存入用户信息 列表:

def Read InformationList() :

try:

# 读取个人信息文件,并按行存入lines

informationFile = open( 'person_information ', 'r ')

lines = informationFile .readlines()

for line in lines:

infolist.append(line .strip() .split( ' : ')[1])

except Exception as e:

print(e + "\n")

print("Read person_information error !")

3)创建CreateNumberList() 函数,创建数字内容,存入数字列表:

def CreateNumberList() :

# 数字元素

words = "0123456789"

# 利用itertools来产生不同数字排列,数字组合长度为3

itertoolsNumberList = itertools .product(words, for number in itertoolsNumberList :

# 写入数字列表备用

numberList.append("" .join(number))

repeat=3)

4)创建CreateSpecialList() 函数,创建特殊字符,并写入特殊字符列表:

def CreateSpecial List() :

specialWords = "`~ !@#$%^&*()?|/><, ."

for i in specialWords:

special List.append("" .join(i))

5)创建AddTopPwd() 函数,读取TopPwd文件的内容,先存入字典文件:

def AddTopPwd() :

try:

# 读取TopPwd文件,并先存入password字典文件

informationFile = open( 'TopPwd ', 'r ')

lines = informationFile .readlines()

for line in lines:

dictionaryFile .write(line)

except Exception as e:

print(e + "\n")

print("Read TopPwd error !")

6)创建Combination() 函数,字典生成算法主体,读者也可以增加自己的 代码:

def Combination() :

for a in range(len(infolist)) :

# 把个人信息大于等于8位的直接输出到字典

if (len(infolist[a]) >= 8) :

dictionaryFile .write(infolist[a] + '\n ')

# 对于小于8位的个人信息,利用数字补全到8位输出

else:

needWords = 8 - len(infolist[a])

for b in itertools .permutations("1234567890", needWords) :

dictionaryFile .write(infolist[a] + ' ' .join(b) + '\n ')

# 把个人信息元素两两进行相互拼接,大于等于8位的输出到字典

for c in range(0, len(infolist)) :

if (len(infolist[a] + infolist[c]) >= 8) :

dictionaryFile .write(infolist[a] + infolist[c] + '\n ')

# 在两个个人信息元素中加入特殊字符组合起来,大于等于8位就输出到字典 for d in range(0, len(infolist)) :

for e in range(0, len(special List)) :

if (len(infolist[a] + special List[e] + infolist[d]) >= 8) : # 特殊字符加在尾部

dictionaryFile .write(infolist[a] + infolist[d] +

special List[e] + '\n ')

# 特殊字符加在中部

dictionaryFile .write(infolist[a] + special List[e] +

infolist[d] + '\n ')

# 特殊字符加在头部

dictionaryFile .write(special List[e] + infolist[a] +

infolist[d] + '\n ')

# 关闭字典文件对象

dictionaryFile .close()

7)编写main 函数,创建相关的数据列表:

if __name__ == '__main__ ' :

# 字典文件对象

global dictionaryFile

# 创建字典文件

dictionaryFile = open( 'passwords ', 'w ')

# 用户信息列表

global infolist

infolist = []

# 数字列表

global numberList

numberList = []

# 特殊字符列表

global special List

special List = []

# 读取个人信息文件dictionaryFile

Read InformationList()

# 创建数字列表

CreateNumberList()

# 创建特殊字符列表

CreateSpecial List()

# 把常见密码先写入字典文件

AddTopPwd()

# 字典生成主体,将个人信息+数字列表+特殊字符列表进行组合并加入字典

Combination()

print( '\n ' + u"字典生成成功!" + '\n ' + '\n ' + u"字典文件名:passwords")

这样,字典生成脚本的功能函数就完成了。输入以下命令执行字典生成脚 本:

此时,新生成一个名为passwords 的密码字典文件,里面就是生成好的密码, 如下所示:

社会工程学密码字典_第3张图片

密码字典部分内容如下所示:

社会工程学密码字典_第4张图片

这样,密码字典就生成好了。接下来,对于各类服务的身份认证攻击都需要 使用这样的密码字典。

7.1.2    防御策略

在网络飞速发展的时代,人们的生活越来越离不开网络,网站、网游、App  等时常索要我们的信息,信息泄露的事件也屡见不鲜。我们不能完全确保信息不 泄露,但是可以减少信息泄露以及泄露后带来的危害。防止生成社会工程学密码 字典,需要做到以下几点:

·在丢弃各种快递单、凭据前,将个人信息涂抹掉。

·注册账号、填写个人信息时,对于非关键信息尽量不填或者随意填写。

·减少密码与个人信息的关联程度。

· 社交媒体发送动态时,注意遮盖敏感信息。

· 准备多个手机号、邮箱、账号等,分别用于不同用途。

你可能感兴趣的:(笔记)