Python黑客绝技05:UNIX口令破解

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

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

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

1.4.1 背景材料

Clifford Stoll 的《杜鹃蛋》(《The Cuckoo’s Egg》1989)堪称新派武侠的开山之作。它第一次把黑客活动与国家安全联系在一起。黑客极具破坏性的黑暗面也浮出海面,并且永远改变了黑客的形象。迄今仍是经久不衰的畅销书。
  Clifford Stoll 是Lawrence Berkley国家实验室的系统管理员。1986 年夏,一个区区75 美分的帐目错误引起了他的警觉,在追查这次未经授权的入侵过程中,他开始卷入一个错综复杂的电脑间谍案。神秘的入侵者是西德混沌俱乐部的成员。他们潜入美国,窃取敏感的军事和安全情报。出售给克格勃,以换取现金及可卡因。一场网络跨国大搜索开始了,并牵涉出FBI、CIA、克格勃、西德邮电部等。
《杜鹃蛋》为后来的黑客作品奠定了一个主题:追捕与反追捕的惊险故事。而且也开始了新模式:一个坚韧和智慧的孤胆英雄,成为国家安全力量的化身,与狡猾的对手展开传奇的较量。

他还在1988年5月出版的《美国计算机协会通信》中撰文详细描述了攻击和追捕的技术细节。
黑客的攻击手段与行动令Stoll非常着迷,他将打印机连接到一台被黑的服务器上,记录下攻击者的每个按键操作。
在一个记录中,Stoll发现了一些有趣的事情:几乎在攻入服务器的同时,攻击者就立即下载了加密的口令文件。这些文件对攻击者会有什么用?要知道,服务器系统是使用UNIX
Crypt算法
对用户口令进行加密的。然而,在窃取了加密口令文件后的一周,Stoll就发现了攻击者用偷来的账号登录的情况。后来在接触了一些被黑主机的用户后,Stoll才明白,原来这些被黑主机的用户都是使用字典中的常用词作为口令的。
知道这一点后,Stoll意识到黑客曾使用字典攻击法去破解加密的口令。黑客穷举了字典中的所有单词,并用UNIX Crypt算法函数对它们加密,然后将结果与偷来的加密密文进行对比。如果能对比成功,就破解了一个口令。

下面我们就来复原一下这个过程,写出自己的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函数打开加密

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值