Python渗透测试之身份认证攻击

  • 目前最为常见的 身份验证模式 采用的仍然是“用户名+密码”的方式,用户自行设定密码,在登录时如果输入正确的密码,计算机就会认为操作者是合法用户。
  • 但是这种认证方式的缺陷也很明显,如何保证密码不被泄露以及不被破解已经成为网络安全的最大问题之一。
  • 本章中将介绍基于Python实现的密码破解。密码破解是指利用各种手段获得网络、系统或资源密码的过程。

简单网络服务认证的攻击

  • 网络上很多常见的应用都采用了密码认证的模式,例如 FTP、Telnet、SSH等,这些应用被广泛地应用在各种网络设备上,如果这些认证模式出现了问题,那就意味着网络中的大量设备将会沦陷。遗憾的是,目前确实有很多网络的设备因为密码设置不够强壮已经遭到入侵。
  • 针对这些简单的网络服务认证,可以采用一种“暴力破解”的方法。这种方法的思路很简单,就是把所有可能的密码都尝试一遍,通常可以将这些密码保存为一个 字典文件。
  • 一般有如下三种思路:
    (1)纯字典攻击:这种思路最为简单,攻击者只需要利用攻击工具将用户名和字典文件中的密码组合起来,一个个地进行尝试即可。
    破解成功的概率与选用的字典有很大的关系,因为目标用户通常不会选用毫无意义的字符组合作为密码,所以对目标用户有一定的了解可以帮助更好地选择字典。
    大多数字典文件都是以英文单词为主,这些字典文件更适用于破解以英语为第一语言用户的密码,对于破解母语非英语的用户设置的密码效果并不好。
    (2)混合攻击:现在的各种应用对密码的强壮度都有了限制,例如,在注册一些应用的时候,通常都不允许使用“123456”或者“aaaaaaa”这种单纯的数字和字母的组合。例如,使用某人的名字字符+数字的加上生日就是一种很常见的密码(很多人都以自己孩子的英文名字加出生日期作为密码),如果仅使用一些常见的英文单词作为字典的内容,显然具有一定的局限性。而混合攻击则是依靠一定的算法对字典文件中的单词进行处理之后再使用。一个最简单的算法就是在这些单词前面或者后面添加一些常见的数字,例如一个单词“test”,经过算法处理之后就会变成“test1”“test2”…“test1981”“test19840123”等。
    (3)完全暴力攻击:这是一种最为粗暴的攻击方式,实际上这种方式并不需要字典,而是由攻击工具将所有的密码穷举出来,这种攻击方式通常需要很长的时间,也是最为不可行的一种方式。但是在一些早期的系统中,都采用了6位长度的纯数字密码,这种方法则是非常有效的。

破解密码字典

常见的字典文件一般是txt或者dic格式:一个常见的破解字典文件。
在这里插入图片描述

  • 在Kali Linux 系统中词典文件的来源一共有以下三个。
    (1)使用字典生成工具来制造自己需要的字典,当需要字典文件,手头又没有合适的字典文件时,就可以考虑使用工具来生成所需要的字典文件。
    (2)使用Kali Linux中自带的字典,Kali Linux中将所有的字典都保存在/usr/share/wordlists/目录下
    (3)从互联网上下载热门的字典:可以访问https://wiki.skullsecurity.org/Passwords查看最新的字典文件

  • 生成字典需要至少指定如下两项。
    (1)字典中包含词汇(也就是密码)的长度。
    (2)字典中包含词汇所使用的字符。要生成密码包含的字符集(小写字符、大写字符、数字、符号),这个选项是可选的,如果不写这个选项,将使用默认字符集(默认为小写字符)。
    长度>8 大写字母 小写字母 数字 特殊字符 密码的更换周期

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

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

  • 首先介绍一下itertools,在这个模块中提供了很多函数,其中最为基础的是三个无穷循环器。
    (1)count()函数:这个函数的作用是产生递增的序列,例如count(1,5),生成从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’, [0, 1]),得到的结果就是x0,y0,z0,x1,y1,z1。
    permutations('abcd', 2) #:从’abcd’中挑选两个元素,例如ab,bc,…,并将所有结果排序,返回为新的循环器。这些元素中的组合是有顺序的,同时生成cd和dc。
    combinations('abc', 2) #:从’abcd’中挑选两个元素,例如ab,bc,…,将所有结果排序,返回为新的循环器,这些元素中的组合是没有顺序的,例如c和d只能生成cd。

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

第一步:导入itertools库。

import itertools

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

words = "1234568790abcdefghijklmnopqrstuvwxyz"

第三步:使用itertoo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值