目录
身份认证攻击
简介
简单网络服务认证攻击
1)纯字典攻击
2)混合攻击
3)完全暴力攻击
破解密码字典
密码字典简单介绍
使用python编写一个生成字典程序
所谓身份认证就是我们在不同的地方,使用应用时候,只要有一台计算机可以上网,就可以轻而易举地通过身份认证后使用这些应用。但是这些应用必须有一种可靠的身份验证模式,这种模式指的是计算机对其操作者身份的确认过程,从而确定该用户是否具有某种资源的访问和使用权限,一般常见的身份认证模式采用的仍然是“用户名+密码”的方式,用户自行设定密码,在登陆时如果输入正确的密码,计算机就会认为操作者是合法的用户。这种认证方式存在的缺陷很明显,如何保证密码不被泄露,以及不被破解是网络安全的最大问题之一。
本系列文章将从以下几个部分展开。
简单网络服务认证攻击
使用python编写字典工具
使用python编写各种服务认证的破解模块
使用BrupSuite对网络认证服务的攻击
网络上常见的应用都采用了密码认证的模式,例如FTP、Telnet、SSH等,这些应用被广泛地应用在各种网络设备上,如果这些认证模式出现了问题,那就意味着网络中大量设备将会沦陷。
针对网络中的简单的网络服务认证,可以采用一种“暴力破解”的方法。这种方法的思路很简单,就是把所有可能的密码都尝试一边,通常可以将这些密码保存为一个字典文件。实现起来的思路如下:
这种思路就是我们只需要利用攻击工具将用户名和字典文件中的密码组合起来,一个个进行枚举即可。破解的成功概率很依赖字典,因为目标用户通常不会选用无意义的字符组合作为密码,所以一般对目标用户有一定的了解可以更好的选择字典。
现在的各种应用对密码的复杂程度都有要求,例如,在注册过程中,通常都不允许纯数字或者纯英文的组合。而混合攻击则是依靠一定的算法对字典文件中的单词进行处理之后再使用。一个最简单的算法就是在这些单词前面或者后面添加常见数字。例如一个单词“test”,经过算法处理后就变成“test1""test2"等等
这种是最粗暴的攻击方式,并不需要字典,而是由攻击工具将所有的密码穷举出来,效果不是很理想。
之前提到了字典文件,常见的字典文件一般是txt或者dic格式,类似于这种
在kali中,词典文件的来源一共有如下三个。
1)使用字典生成工具来制造自己的字典。
2)kali中自带的字典文件,保存在/usr/share/wordlists/目录下, 如图
3)从互联网下载热门字典。
推荐个网站:https://wiki.skullsecurity.org/index.php?title=Passwords 记得挂梯子上不然访问速度太慢了。
生成字典至少要指定如下两项。
1)字典中密码的长度
2)字典中包含词汇所使用的字符。要生成的密码包含的字符集(大小写字符、数字、符号),这个选项是可选的,如果不写这个选项,将使用默认字符集。
首先需要介绍一个新模块:itertools。这个模块是python内置的,功能十分强大使用也很简单。
介绍一下这个模块的函数,最基础的是三个无穷循环器。
1)count()函数:这个函数的作用是产生一个递增的序列,例如count(1,5),生成从1开始的循环,每次增加5,即1,6,11....
2)cycle()函数:这个函数的作用是重复序列中的元素,例如cycle('hello'),将序列中的元素重复,即h,e,l,l,o,h...
3)repeat()函数:这个函数的作用是重复元素,构成无穷循环器,例如Repeat(100),即100,100,100...
还有一些用来实现循环器组合操作的函数。
product()函数:这个函数可以用来获得多个循环器的笛卡儿积,例如product('xyz',[0,1]),得到的结果就是x0,x1,x2,y0,y1,y2。
permutation('abcd',2):从‘abcd’中挑选两个元素,例如:ab,ac....,并且将所有结果排序,返回为新的循环器。这些组合是有顺序的,同时可以生成cd,dc。
combinations('abc',2):从‘abcd’中挑选两个元素,例如:ab,ac....,并且将所有结果排序,返回为新的循环器。这些组合是没有顺序的,同时可以生成cd。
有了itertools这个库,就可以很轻松的生成一个字典文件。
接下来介绍一个简单的字典文件生成过程。
第一步:导入itertoos库
import itertools
第二步:指定生成字典的字符,这是举例用英文字符和数字,没考虑大小写和特殊字符
words = "1234567890abcdefghijklmnopqrstuvwxyz"
第三步:使用itertools中的循环器来生成字典文件,这里根据需求不同,仅仅用permutations,即考虑选项又考虑顺序,考虑到效率问题,仅仅设置为2来进行演示。
temp = itertools.permutations(words,2)
第四步:打开一个用于保存结果的记事本文件。
passwords = open("dic.txt","a")
第五步:使用一个循环将生成的密码写入到一个记事本文件即可。
for i in temp:
passwords.write("".join(i))
passwords.write("".join("\n"))
完整的程序如下:
import itertools
words = "1234567890abcdefghijklmnopqrstuvwxyz"
temp = itertools.permutations(words,2)
passwords = open("dic.txt","a")
for i in temp:
passwords.write("".join(i))
passwords.write("".join("\n"))
dic.close()
为了更方便输入特定字符,变动如下:
import sys
import itertools
if len(sys.argv) != 3:
print('input:')
sys.exit(1)
words = sys.argv[1]
n=sys.argv[2]
temp = itertools.permutations(words,n)
passwords = open("dic.txt","a")
for i in temp:
passwords.write("".join(i))
passwords.write("".join("\n"))
dic.close()
设置如下:
运行结果如图:
这就是我们自己生成的密码字典。