Python绝技学习笔记05:口令破解

Python黑客绝技学习笔记05:Unix口令破解

在上一期中,我们学习了条件选择语句、异常处理、函数、迭代、文件输入/输出、sys模块、OS模块等内容,我们还将Python的基础知识全部运用到我们的漏洞扫描脚本中。本期我们将学习一个特别有趣的Python程序——Unix口令破解器。

1.4 第一个程序——Unix口令破解

1.4.1 背景材料

在这里插入图片描述
下面我们就来复原一下这个过程,写出自己的UNIX口令破解器。

1.4.2 UNIX口令破解思路

比如下面这个口令文件,被黑主机的用户使用的口令的明文是单词egg,salt(盐)是开关的两个字节HXUNIX Crypt函数计算的加密口令为crypt('egg',‘HX’) = HX9LLTdc/jiDE。我们使用python自带的crypt模块的.crypt方法可以实现这个功能,我们先看一下这个模块的帮助文档。

>>> help('crypt')
Help on module crypt:                                                                                              
                                                                                                                   
NAME                                                                                                               
    crypt - Wrapper to the POSIX crypt library call and associated functionality.                                  
FUNCTIONS                                                                                                          
    crypt(word, salt=None)                                                                                         
        Return a string representing the one-way hash of a password, with a salt                                   
        prepended.                                                                                                 
                                                                                                                   
        If ``salt`` is not specified or is ``None``, the strongest                                                 
        available method will be selected and a salt generated.  Otherwise,                                        
        ``salt`` may be one of the ``crypt.METHOD_*`` values, or a string as                                       
        returned by ``crypt.mksalt()``.                                                                            
                                                                                                                   
    mksalt(method=None, *, rounds=None)                                                                            
        Generate a salt for the specified method.                                                                  
                                                                                                                   
        If not specified, the strongest available method will be used.                                             
DATA
    METHOD_BLOWFISH = <crypt.METHOD_BLOWFISH>
    METHOD_CRYPT = <crypt.METHOD_CRYPT>
    METHOD_MD5 = <crypt.METHOD_MD5>
    METHOD_SHA256 = <crypt.METHOD_SHA256>
    METHOD_SHA512 = <crypt.METHOD_SHA512>
    methods = [<crypt.METHOD_SHA512>, <crypt.METHOD_SHA256>, <crypt.METHOD...

FILE
    /usr/lib/python3.8/crypt.py

更加详细内容可以查看https://docs.python.org/3.8/library/crypt
我们尝试使用crypt方法实现哈希(hash)值的计算,代码如下:

>>> import crypt
>>> crypt.crypt('egg', 'HX')
'HX9LLTdc/jiDE'

这里我们可以看到,计算出来的结果'HX9LLTdc/jiDE'的前两位就是salt的值。所以我们可以通过加密后的hash密码获得salt的值。
按照背景材料的思路,我们可以使用上面的函数对口令字典中的每个口令进行hash,之后与已知的加密口令hash进行比对,一致的话我们就破解了该口令啦!

接下来,我们写一下这个程序。为了增加程序的可重用性和易读性,我们使用函数的方式对单一功能的代码进行封装。
我们创建两个函数,maintestpass
其中main函数打开加密口令文件password.txt,并逐行读取口令文件中的内容。每一行中的用户名和口令hash值是分开的。对每个口令hash,main函数调用testPass()函数,尝试用字典中的单词进行比对破解。
testPass()函数则以参数形式获得加密口令hash,并在找到密码或遍历无果返回空值。要注意的是,该函数首先将加密的口令hash值的前两个字符视为salt,并提取出来。然后,它打开字典并遍历字典中的每个单词,用每个单词和salt计算一个新的加密口令hash。如果计算结果与我们加密口令hash匹配,函数将全打印一条消息显示找到密码,并返回,继续遍历直到结尾并打印未找到。

1.4.3 UNIX口令破解程序

程序如下:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值