Python渗透测试编程技术--------身份认证攻击(一)

Python渗透测试编程技术--------身份认证攻击(一),第1张

Python渗透测试编程技术

身份认证攻击

目前最为常见的身份验证模式采用的仍然是“用户名+密码”的方式,用户自行设定密码在登录时如果输入正确的密码,计算机就会认为 *** 作者是合法用户。

但是这种认证方式的缺陷也很明显,如何保证密码不被泄露以及不被破解已经成为网络安全的最大问题之一。本章中将介绍基于Python实现的密码破解。密码破解是指利用各种手段获得网络、系统或资源密码的过程。

简单网络服务认证的攻击

网络上很多常见的应用都采用了密码认证的模式,例如FTP、Telnet、SSH等,这些应用被广泛地应用在各种网络设备上,如果这些认证模式出现了问题,那就意味着网络中的大量设备将会沦陷。遗憾的是,目前确实有很多网络的设备因为密码设置不够强壮已经遭到入侵。

针对这些简单的网络服务认证,可以采用一种“暴力破解”的方法。这种方法的思路很简单,就是把所有可能的密码都尝试一遍,通常可以将这些密码保存为一个字典文件。

一般有如下三种思路。

(1)纯字典攻击。这种思路最为简单,攻击者只需要利用攻击工具将用户名和字典文件中的密码组合起来,一个个地进行尝试即可。

破解成功的概率与选用的字典有很大的关系,因为目标用户通常不会选用毫无意义的字符组合作为密码,所以对目标用户有一定的了解可以帮助更好地选择字典

大多数字典文件都是以英文单词为主,这些字典文件更适用干破解以英语为第一语言用户的密码,对干破解母语非英语的用户设置的密码效果并不好。

(2)混合攻击。现在的各种应用对密码的强壮度都有了限制,例如,在注册一些应用的时候,通常都不允许使用“123456”或者“aaaaaaa”这种单纯的数字和字母的组合,因此很多人会采用密码方式

例如,使用早人的名字字符+数字的加上生日就是一种很常见的感码(很多人都以自己孩了的英义名字加出生日

期作为密码),如果仅使用一些常见的英文单词作为字典的内容,显然具有一定的局限性。而混合攻击则是依

壹一定的算法对字典文件中的单词进行处理之后再使用。一个最简单的算法就是在这些单词前面或者后面添加

些常见的数字,例如一个单词“test”经过算法外理之后就会变成“test1*”“test2”“test1981”“test19840123“等。

(3)完全暴力攻击。这是一种最为粗暴的攻击方式,实际上这种方式并不需要字典,而是由攻击工具将所有的密码穷举出来,这种攻击方式通常需要很长的时间,也是最为不可行的一种方式。但是在一些早期的系统中,都采用了6位长度的纯数字密码,这种方法则是非常有效的。

破解密码字典

常见的字典文件一般是txt或者dic格式:。

在KaliLinux系统中词典文件的来源一共有以下三个。

(1)使用字典生成工具来制造自己需要的字典,当需要字典文件,手头又没有合适的字典文件时,就可以考虑使用工具来生成所需要的字典文件。

(2)使用Kali Linux中自带的字典,Kali Linux中将所有的字典都保存在/usr/share/wordlists/目录下

(3)从互联网上下载热门的字典:

生成字典需要至少指定如下两项。

(1)字典中包含词汇(也就是密码)的长度。

(2)字典中包含词汇所使用的字符。要生成密码包含的字符集(小写字符、大写字符、数字、符号)这个选项是可选的,如果不写这个选项,将使用默认字符集(默认为小写字符)。

长度>8 大写字母 小写字母 数字 特殊字符  密码的更换周期

使用Python来编写一个生成字典的程序

在这个程序中需要使用到一个新的模块:itertools,这是一个强大的内置模块。

首先介绍一下itertools,在这个模块中提供了很多函数,其中最为基础的是三个无穷循环器。

(1)count()函数:这个函数的作用是产生递增的序列,例如count(15),生成从1开始的循环器每次增加5,即1,6,11,16,21,26,..

(2)cycle()函数:这个函数的作用是重复序列中的元素,例如cycle(hello),将序列中的元素重复即h,e,l,l,o,h,e,l,l,o,h,….

(3)repeat()函数:这个函数的作用是重复元素,构成无穷循环器,例如Repeat(100),即100

100,100,100,…

除了这些基本的函数之外,还有一些用来实现循环器的组合 *** 作的函数,这些函数适用于生成字典文件。

product()函数:它可以用来获得多个循环器的笛卡儿积,例如product(‘xyz’[1]),得到的结果就是 x0,yo,zo,x1,y1,z1。

permutations('abcd',2)#:从’abcd’中挑选两个元素,例如ab,bc,…,并将所有结果排序,返回为新的循环器。这些元素中的组合是有顺序的,同时生成cd和dc。

combinations('abc'2)#:从’abcd’中挑选两个元素,例如ab,bc,…将所有结果排序,返回为新的循环器,这些元素中的组合是没有顺序的,例如c和d只能生成cd。

一个简单的字典文件生成过程

第一步:导入itertools库。

>>>import itertools

第二步:指定生成字典的字符,这里使用所有的英文字符和数字(但是没有考虑大小写和特殊字符)。

>>>words ="1234568790abcdefghijklASDFGHJJKL~@#$%^&(){}|"

第三步:使用itertools中提供的循环器来生成字典文件

这里可以根据不同的需求来选择,在这里选择permutations,既考虑选项,又考虑顺序。这里考虑到程序运行的速度,仅出于演示的目的,所以选择了生成两位的密码。在真实情景中往往需要生成6位以上的密码,但这需要很长的时间。

>>> temp =itertools.permutations(words,2)

第四步:打开一个用于保存结果的记事本文件。

>>> with open("dic.txt","a")as passwds

第五步:使用一个循环将生成的密码写入到一个记事本文件中。

>>>for i in temp:
        passwds.write("".join(i))
        passwds.write("".join("\n"))

#创建一个字典文件
import itertools
words = "1234568790abcdefghijklASDFGHJJKL~@#$%^&(){}|"
#
根据字母池 创建密码
temp =itertools.permutations(words,2)

#
创建一个密码本 字典
with open("dic.txt","a")as passwds:
    for i in temp:
        passwds.write("".join(i))
        passwds.write("".join("\n"))

这里有一个技巧,如果已经获悉目标的密码为几个特定的字符,例如”q”"wt"”e”等,那么可以由用户输入这几个字符。

import itertools

import sys

#
判断用户输入是否正确,如果格式不正确,退出程序
if len(sys.argv) != 3:
    print("
请按照如下格式输入:python xxx.py 参数1 参数2")
    sys.exit(1)

words = sys.argv[1]
lens = int(sys.argv[2])

#
根据字母池 创建密码
temp =itertools.permutations(words,lens)

#
创建一个密码本 字典
with open("dic.txt","a")as passwds:
    for i in temp:
        passwds.write("".join(i))
        passwds.write("".join("\n"))

将脚本复制到kali

或者

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/792568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存